wp_cron已安排但未开火

时间:2016-11-17 15:16:30

标签: wordpress cron

我正在尝试使用wp_schedule_single_event运行在用户操作上触发的后台脚本,虽然我已经确认正在调度该事件并且wp_cron识别出已经过了预定时间,但它不会触发事件处理程序。为了进一步复杂化,代码在我的本地WP安装上运行良好,但在我的服务器上什么都不做。

要安排活动,我正在使用:

if ( ! wp_next_scheduled( 'my_action_name' ) ) {
    wp_schedule_single_event( time(), 'my_action_name' );
}

我的处理程序操作定义为:

add_action('my_action_name', 'my_action_handler');
function my_action_handler () {
    // do stuff
}

我测试了wp核心文件,发现以下块(来自wp-includes / cron.php:322)是脚本终止的地方:

var_dump('test1');
$cron_request = apply_filters( 'cron_request', array(
    'url'  => add_query_arg( 'doing_wp_cron', $doing_wp_cron, site_url( 'wp-cron.php' ) ),
    'key'  => $doing_wp_cron,
    'args' => array(
        'timeout'   => 0.01,
        'blocking'  => false,
        /** This filter is documented in wp-includes/class-wp-http-streams.php */
        'sslverify' => apply_filters( 'https_local_ssl_verify', false )
    )
), $doing_wp_cron );
var_dump('test2'); //exit here to test
wp_remote_post( $cron_request['url'], $cron_request['args'] );

在我的本地计算机上,应用过滤器,打印“test2”,脚本可以继续调用wp_remote_post。但是,在服务器上,脚本在执行apply_filter('cron_request')期间终止,打印'test1'但不是'test2'并且无法访问wp_remost_post。

我无法找到此过滤器的源代码以进一步调试。 Wordpress.org说过滤器是在wp-includes / cron.php中定义的,并且我已经引用的一个实例是它应用的唯一地方,但是,使用Sublime多文件搜索显示字符串'cron_request'仅出现在我引用的过滤器应用程序中。

我已经读过很多关于wp_cron失败的帖子,并且除了非描述性的“服务器配置阻止wp_cron”答案之外没有找到任何帮助。有关什么类型的服务器配置或其他可能发生的任何其他信息?

1 个答案:

答案 0 :(得分:-2)

当有人访问您的WordPress网站时,如果预定时间已过,则会触发此操作。

也许你可以使用

wp_schedule_event()

而不是

 wp_schedule_single_event()