wordpress - wp_cron 计划但未触发

发布时间 2023-10-08 12:23:25作者: 圆柱模板

我正在尝试使用 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 核心文件,发现以下 block (来自 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”答案外没有找到任何帮助。有关服务器配置类型或此处可能发生的其他情况的任何其他信息?

http://www.nongpin88.com/

 

最佳答案

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

也许你可以使用

wp_schedule_event()

代替

 wp_schedule_single_event()

更多内容来自:http://www.nongpin88.com/