已更新
我正在尝试使用自定义的5分钟间隔在插件激活期间建立重复任务。无法将我的操作与自定义间隔相关联。
如果我选择默认间隔(例如“每日”),则一切正常。
当我在对wp_get_schedules()
的调用上方立即回显wp_schedule_event()
的结果时,可以看到我的自定义间隔。
据我所知,当我尝试使用自定义间隔时,我的自定义间隔已成功注册,但是我的任务从未成功与之关联。
如果我在cron.php $crons
和$schedules
中回显wp_schedule_event()
和_set_cron_array()
的结果,则可以看到我的任务与自定义间隔正确关联。但是,在插件激活完成之后,我的任务没有反映在Cron Manager / db中。
作为测试,我将自定义间隔直接添加到cron.php中的WP默认值中-当我这样做时,可以成功地计划任务。
我正在通过register_activation_hook()
调用的函数中执行以下操作:
add_filter( 'cron_schedules', function($schedules) {
$schedules['5_min'] = array(
'interval' => MINUTE_IN_SECONDS * 5,
'display' => __( 'Every 5 minutes' ),
);
return $schedules;
}
);
function my_plugin_import_handler() {
// ...
}
add_action( 'my_plugin_import_hook', 'my_plugin_import_handler' );
wp_schedule_event( time(), '5_min', 'my_plugin_import_hook' );
我想念什么?
更新
我安装了WordPress的新副本,安装了Advanced Cron Manager,并添加了一个仅包含以下代码的简单插件。我看到两件事。
有意义的是,如果这是单个事件,并且我分配给它的开始时间是现在,那么我的任务就永远不会与自定义间隔关联。
那我在做什么导致此事件是单个事件,而不是重复发生的事件?
register_activation_hook( __FILE__, 'activate_test_plugin' );
function activate_test_plugin()
{
add_filter( 'cron_schedules', function($schedules) {
$schedules['5_min'] = array(
'interval' => MINUTE_IN_SECONDS * 5,
'display' => __( 'Every 5 minutes' ),
);
return $schedules;
});
add_action( 'my_test_import_hook', 'my_test_import_handler' );
function my_test_import_handler()
{
echo 'import is beginning';
}
if ( ! wp_next_scheduled ( 'my_test_import_hook' ))
{
wp_schedule_event( time() + 3600, '5_min', 'my_test_import_hook' );
}
}