我正在开发一个插件来注册和安排各种cron作业。我是:
使用WP Crontrol (只需查看我的所有cron作业并在需要时覆盖它们)设置服务器cron作业并define(\'DISABLE_WP_CRON\', true);
当我进入Crontrol中的“Cron事件”时,我看到一些函数被添加了数百次。具体来说,在“Cron事件”中,函数是注册/列出的内容,而不是挂钩。我的代码的简化版本:
class My_Cron_Manager {
/**
* Constructor
*/
public function __construct() {
add_filter( \'wp\', array( $this, \'my_schedule_cron_jobs\' ) );
add_action( \'my_cron_event_func\', array( $this, \'my_cron_job_func\' ));
}
/**
* Schedule cron Jobs
*/
public static function my_schedule_cron_jobs() {
if (! wp_next_scheduled ( \'my_cron_job_func\' )) {
wp_schedule_event(time(), \'twicedaily\', \'my_cron_job_func\');
};
}
/**
* My Function
*/
public static function my_cron_job_func() {
// Do Stuff
}
}
new My_Cron_Manager();
我怀疑我的代码在重新注册函数时出错,但我不能完全确定。我是否正在利用
wp_next_scheduled
和
wp_schedule_event
正确地
有人能告诉我我的上述代码是否会导致重复的挂钩/函数注册吗?
提前感谢!
SO网友:Ryan Dorn
好吧,我相信我的工作是正确的。我很好奇是否有人有更多的见解,但我相信发生了什么:
我错误地调用了我的类wp_next_scheduled
和wp_schedule_event
当我应该引用回调/挂钩时我修改后的代码(已经过测试,我可以确认工作正常)。
<小时>
define( \'MY_CRON_FILE\', __FILE__ );
class MY_Cron_Manager {
/**
* Hook in methods.
*/
public static function init() {
register_activation_hook( MY_CRON_FILE, array(__CLASS__, \'my_schedule_cron_jobs\' ));
add_action( \'my_cron_job_event_func\', array( __CLASS__, \'my_cron_job_func\' )); //
}
/**
* Schedule cron Jobs
*/
public static function my_schedule_cron_jobs() {
if (! wp_next_scheduled ( \'my_cron_job_event_func\' )) {
wp_schedule_event(time(), \'twicedaily\', \'my_cron_job_event_func\');
};
}
/**
* My Function
*/
public static function my_cron_job_func() {
// Do Stuff
}
}
MY_Cron_Manager::init();