WP_Schedule_Single_Event不调用我的操作

时间:2015-09-17 作者:Duncan Edwards

我创建了以下操作:

add_action( \'test_action\', \'test_action\' );

function test_action() {
    error_log( \'test_action\' );
}
我这样称呼它:

error_log( \'send_test_email_in_background:START\' );

wp_schedule_single_event( time(), \'test_action\' );

error_log( \'send_test_email_in_background:END\' );
我在apache错误日志文件中收到的是:

[17-Sep-2015 11:09:35 UTC] send_test_email_in_background:START

[17-Sep-2015 11:09:35 UTC] send_test_email_in_background:END
这在我的Windows PC(运行WAMP)上的开发工作与在生产(在AWS中运行Linux)上的工作完全相同。此外,如果我将单个事件安排在未来的5分钟内(time()+300),它会在我的“Debug Bar Cron”插件中显示为可以在5分钟内运行,并且运行正常。因此,似乎正在创建CRON作业,但由于某种原因,它们在运行时实际上没有调用该操作?其他人有没有遇到过这个问题或对此有什么见解?

2 个回复
SO网友:TheDeadMedic

因为您正在计划事件,即使它设置为立即运行(即time()), 直到第二次请求它才会开火。

因此,完全可以预期日志输出。再次尝试运行它,删除代码,然后再次运行-您应该得到:

[time] test_action

SO网友:Dave Hilditch

如果您使用了WordPress管理函数的模板,那么您可能倾向于在admin类中插入cron作业。

同时,如果主代码有如下If语句:

if (is_admin()) {
    foreach( glob ( PLUGIN_DIR . "/admin/*.php" ) as $filename ) {
       require_once( $filename );
    }
}
然后,这将意味着不会为cron加载管理文件。is\\u admin()仅在管理员访问wp admin页面时返回true。

如果是这种情况,则需要将add\\u操作分离到一个文件中,该文件总是由插件调用。如果愿意,您仍然可以使用静态函数在类中使用实际的cron函数。

相关推荐

Wordpress wp-cron not working

Cron未按预期工作。如果我安排帖子或事件管理器事件,如果在发布时间之后访问站点,则不会发布。如果我去http://somedomain.tld/wp-cron.php?doing_wp_cron 它为空,而调试设置为打开。它应该是空的还是应该显示一些错误(如果有)?错误日志为空。WP Crontrol插件显示cron作业。有没有提示下一步要检查什么?