我安排了一个每小时运行的动作:
if(!wp_next_scheduled('my_hourly_events'))
wp_schedule_event(time(), 'hourly', 'my_hourly_events');
add_action('my_hourly_events', 'the_function_to_run');
function the_function_to_run(){
echo 'it works!';
}
我如何测试是否工作不用等一个小时? :)
我尝试在此代码之前添加
wp_clear_scheduled_hook('my_hourly_events');
,然后在此代码之后添加wp_cron()
,但我看不到我的函数正在运行... 编辑:
好吧,我在函数中添加了一个
trigger_error()
,检查了Apache错误日志,它就在这里:) 所以现在我更加困惑了:
wp-cron如何在后台运行?因为如果我没有看到输出,显然就是这样。
这似乎在对象上下文中不起作用;为什么?
#1 楼
我最喜欢的插件是Core Control,它有一个非常漂亮的模块来显示cron中正在发生的事情-设置了哪些事件,何时触发下一个事件等。级别,请参阅
_get_cron_array()
,它返回cron事件的内部存储数据(键的顶级是时间戳)。评论
HTTP Access Logger是记录所有请求还是仅记录使用WP的HTTP api发出的请求?这非常适合查找插件发出的请求以及您的页面加载缓慢的原因:)
–onetrickpony
2011年4月11日17:12
@One Trick Pony不确定,但是假设它仅是API是有道理的
–稀有
2011年4月11日在17:27
#2 楼
wp-cli是另一种方式:列出事件
> wp cron event list
+-------------------+---------------------+-----------------------+---------------+
| hook | next_run_gmt | next_run_relative | recurrence |
+-------------------+---------------------+-----------------------+---------------+
| wp_update_plugins | 2020-04-14 08:11:38 | 7 hours 24 minutes | 12 hours |
| wp_update_themes | 2020-04-14 08:11:38 | 7 hours 24 minutes | 12 hours |
| wcsc_prime_sites | 2020-04-14 17:00:55 | 16 hours 13 minutes | 1 day |
+-------------------+---------------------+-----------------------+---------------+
安排事件
> wp cron event schedule wp_update_plugins "now +5 seconds"
Success: Scheduled event with hook 'wp_update_plugins' for 2020-04-14 00:43:54 GMT.
然后您可以访问网站的前端,并刷新几次以确保已触发。然后再次运行
list
以查看它是否不再计划。直接在终端中运行
> wp cron event run wcsc_prime_sites
Executed the cron event 'wcsc_prime_sites' in 0.805s.
Success: Executed a total of 1 cron event.
要知道的一个怪癖是wp-cli在wp-admin上下文中运行,但是WP Cron在前端运行。通常这不是问题,但是在编写作业时,请确保您
require()
希望加载代码的所有wp-admin/includes
文件。如果不这样做,则作业将在wp-cli中可以正常工作,但在正常运行时会产生致命错误。
其他命令
运行
wp help cron
了解更多详细信息。
评论
好的,我发现wp-cron.php正在使用wp_remote_post()执行。解释一切...通过“对象上下文”,您是说您的回调就像array(&$ this,'my_method_name')吗?确实不行,因为函数名称存储在数据库中,以后再执行。 &$ this指的是特定对象,而不是类名,并且在执行cron作业时下一个请求将不存在该对象。静态类函数应该起作用。
是的,我必须将函数设为静态。我不认为wp会远程运行本地脚本“ cron”