我正在尝试使用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”答案之外没有找到任何帮助。有关什么类型的服务器配置或其他可能发生的任何其他信息?
答案 0 :(得分:-2)
当有人访问您的WordPress网站时,如果预定时间已过,则会触发此操作。
也许你可以使用
wp_schedule_event()
而不是
wp_schedule_single_event()