我正在尝试使用 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”答案外没有找到任何帮助。有关服务器配置类型或此处可能发生的其他情况的任何其他信息?
最佳答案
如果预定时间已过,当有人访问您的 WordPress 网站时将触发此操作。
也许你可以使用
wp_schedule_event()
代替
wp_schedule_single_event()
更多内容来自:http://www.nongpin88.com/
标签:doing,request,cron,wordpress,wp,action,my
From: https://www.cnblogs.com/68xi/p/17748591.html