WP插件中的异步php代码


Asynchronous php code in WP Plugin

需要使此代码块与其余代码异步。它将收集wp帖子并向我的url发送帖子请求。插件应该异步运行,并且不会妨碍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);
}

在WordPress中处理异步请求的正确方法是使用WP Cron来安排事件。您可以将其安排为运行一次,也可以按间隔运行。请参阅此处的一些设置指南。要检出的两个主要功能是wp_schedule_event()wp_schedule_single_event()

然而,需要记住的一点是,因为您的代码只有在有请求时才运行,所以如果流量较低,那么您计划的事件可能不会在预期的时间运行。我在我的网站上写了一篇文章,介绍如何将crontab与WP Cron结合使用,以更准确地安排事件:http://justinsilver.com/technology/wordpress/disable-wp-cron-wordpress/.

使用Guzzle包,代码示例:

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

看看如何安装它。还可以查看RingPHP和Future Responses以了解更多信息。实际上,RingPHP被用作Guzzle中的处理程序层,在底部,React/Promise为Promises/A提供了对PHP的支持。