WP Plugin 中的异步 php 代码

Posted

技术标签:

【中文标题】WP Plugin 中的异步 php 代码【英文标题】:Asynchronous php code in WP Plugin 【发布时间】:2015-01-05 18:03:06 【问题描述】:

需要使这段代码与其余代码异步。它会收集 wp 帖子并向我的网址发送帖子请求。该插件应该异步运行,并且不会妨碍 wordpress 网站的功能。

for ($x=0; $x<=n; $x++) 
$data = posts[$x];
$ch = curl_init('http://myurl.com/');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'ACCEPT: application/json',
'Content-Length: ' . strlen($data))
);

$result = curl_exec($ch);
curl_close($ch);

【问题讨论】:

如果您想要异步,您可能不得不使用 Node.js 或其他替代方案。 php 对异步不友好。 Basically the only alternative. 需要为 Wordpress 本身制作这个插件并将其提供给博主,所以除了 PHP 之外别无选择。 再说一次,PHP 在这方面是可怕的,所以你发现的任何东西都将是一个 hacky 解决方法 - 但也许 this question 或 this one 会有所帮助。 【参考方案1】:

在 WordPress 中处理异步请求的正确方法是使用 WP-Cron 来安排事件。您可以安排它运行一次,也可以按时间间隔运行。请参阅有关设置它的一些指南here。要检查的两个主要函数是wp_schedule_event()wp_schedule_single_event()

但要记住的一件事是,由于您的代码仅在有请求时运行,如果流量较低,那么您的计划事件可能不会按预期运行。我在我的网站上写了一篇关于如何将 crontab 与 WP-Cron 结合使用来更准确地安排事件的文章:http://justinsilver.com/technology/wordpress/disable-wp-cron-wordpress/。

【讨论】:

来自帖子:The way that I handle WP-Cron on my sites is to disable it entirely by setting the DISABLE_WP_CRON constant to false in wp-config.php....我想你已经把它倒退了。 @rnevius 谢谢修复它。【参考方案2】:

使用Guzzle Package,代码示例:

$request = $client->createRequest('GET', ['future' => true]);
$client->send($request)->then(function ($response) 
    echo 'Got a response! ' . $response;
);

看看你怎么能install it。另请查看RingPHP and Future Responses 了解更多信息。实际上RingPHP 在Guzzle 中用作处理程序层,在底部,React/Promise 为Promises/A 提供对PHP 的支持。

【讨论】:

以上是关于WP Plugin 中的异步 php 代码的主要内容,如果未能解决你的问题,请参考以下文章

php WP脚本标记异步/延迟

为啥 WP_CONTENT_URL 基于选项 `siteurl` 而不是 `home`

php 一个WordPress自定义短代码,用于显示wp_usermeta表中的一段用户元数据。依赖Ultimate Member插件

taxonomy.php中的WP Query会杀死标准循环

Wordpress“插入-php”:文件中的php代码未执行

php wp-config.php文件中的WP Mail SES设置