好的,我已经测试了你的代码,我很确定它甚至不能运行一次。。。这就是为什么。。。
如果你看看wp_schedule_event
您将在函数顶部看到此检查:
if ( !isset( $schedules[$recurrence] ) )
return false;
这意味着您无法安排重复性未知的事件。
那么让我们回到你的代码。。。它所做的是:
添加自定义重复(使用cron_schedules
钩子),
在插件激活期间安排一个重复发生的事件一切看起来都很好,对吗?嗯,不,不是这样的。激活钩子在插件激活期间激发。因此,该插件在激活运行之前不起作用。因此,您的自定义重复未注册。所以您的挂钩未计划。我已经测试过了wp_schedule_event
在你的激活钩子是假的,所以事件没有安排。
那么该怎么办呢
简单-如果要使用自定义重复,请不要将事件安排在激活挂钩上。下面是您的安全代码:
register_deactivation_hook(__FILE__, \'my_deactivation\');
function my_deactivation() {
wp_clear_scheduled_hook(\'cron_every_5_seconds\');
}
function add_every_5_seconds_cron_schedule( $schedules ) {
$schedules[\'every_5_seconds\'] = array(
\'interval\' => 5,
\'display\' => __( \'Every 5 Seconds\', \'textdomain\' )
);
return $schedules;
}
add_filter( \'cron_schedules\', \'add_every_5_seconds_cron_schedule\' );
function schedule_my_cron_events() {
if ( ! wp_next_scheduled( \'cron_every_5_seconds\') ) {
wp_schedule_event( time(), \'every_5_seconds\', \'cron_every_5_seconds\' );
}
}
add_action( \'init\', \'schedule_my_cron_events\' );
function cron_every_5_seconds_action() {
$value = 91;
update_user_meta( $value + 1, \'from_cron\', \'updated\' );
}
add_action( \'cron_every_5_seconds\', \'cron_every_5_seconds_action\' );
PS。(but it may be important) 你的代码还有一个缺陷,但可能是在这里发布之前进行了一些编辑造成的。。。您将无法检查cron是否只运行一次或多次。您的事件操作将更新用户元。但设置的新值始终等于91。既然你使用update_user_meta
, 数据库中只存储一个这样的元数据。