这是一个愚蠢的问题...

我安排了一个每小时运行的动作:

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如何在后台运行?因为如果我没有看到输出,显然就是这样。
这似乎在对象上下文中不起作用;为什么?


评论

好的,我发现wp-cron.php正在使用wp_remote_post()执行。解释一切...

通过“对象上下文”,您是说您的回调就像array(&$ this,'my_method_name')吗?确实不行,因为函数名称存储在数据库中,以后再执行。 &$ this指的是特定对象,而不是类名,并且在执行cron作业时下一个请求将不存在该对象。静态类函数应该起作用。

是的,我必须将函数设为静态。我不认为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了解更多详细信息。