我最近在一些插件中注意到了这种模式:
<?php
function MY_CRON(){
wp_schedule_single_event(time(), \'MY_ACTION\');
}
add_action(\'save_post\', \'MY_CRON\');
function MY_FUNCTION(){
// YOUR CODE HERE
}
add_action(\'MY_ACTION\', \'MY_FUNCTION\');
它将避免在您想要快速的挂钩上运行复杂的函数。它可以是“save\\u post”,一个通过AJAX的调用,或者在我的例子中是Woocommerce中的一个新订单。这些文章对其进行了更详细的概述:
- Asynchronous functions in Wordpress
- Use WP Cron to Trigger
Asynchronous Background Tasks in WordPress on Post Save or
Update
I was hoping to get some opinions from other developers about this pattern. 我对这种方法的问题是a)如果你的网站流量低,它可能永远不会运行,因为WP Cron的工作方式。b)如果你正在做的事情非常复杂,比如说需要10秒才能完成,那么在下一次页面加载触发WP Cron时,会不会延迟页面呈现?因此,我的管理操作非常迅速,我关闭了浏览器,但下一个访问该网站的用户将获得额外的10秒加载时间?所以我所做的就是把等待时间传给其他人?在某些情况下,这甚至可能是我自己。
所以我的结论是禁用WP-Cron并安排对WP-Cron的调用。php?通过crontab执行\\u cron。但这不会在我的网站运行时阻止它吗?
最合适的回答,由SO网友:TheDeadMedic 整理而成
。。。如果您的站点流量很低,那么由于WP Cron的工作方式,它可能永远不会运行
在您的特定示例中,它应该始终启动。自从save_post
在浏览器重定向之前运行,随后返回到编辑屏幕的请求将触发cron调度。
。。。下次页面加载触发WP Cron时,这不会延迟页面呈现吗?
不,如果你退房spawn_cron()
, 您将看到它触发一个并行请求来处理计划。
从…起the codex:
通过不会停止页面加载的HTTP请求发送运行cron的请求。不会每60秒运行一次以上。