我希望在WP Cron间隔中增加一点特殊性。为了增加“每周”间隔,我做了以下工作:
function re_not_add_weekly( $schedules ) {
$schedules[\'weekly\'] = array(
\'interval\' => 604800, //that\'s how many seconds in a week, for the unix timestamp
\'display\' => __(\'weekly\')
);
return $schedules;
}
add_filter(\'cron_schedules\', \'re_not_add_weekly\');
这很好,但是-这里的额外酱汁是让cron在特定的一天运行:
if( !wp_next_scheduled( \'re_not_mail\' ) ) {
wp_schedule_event( time(), \'weekly\', \'re_not_mail\' );
}
任何人都有关于使用WP-Cron实现这一点的最佳方法的想法(假设这不是我们可以控制其cPanel/Cron区域的特定站点)。谢谢
全力以赴更新并发现an article 这可能会让事情更清楚一些,但并不完全回答我的问题。那篇文章的基本要点是,WP Cron没有那么灵活(超过了“hourly,daily,weekly”参数),因此在某一天将其扩展到类似于每周的内容似乎有点牵强。
我遇到的问题(出于困惑/沮丧而称之为问题)是->当然,我可以禁用WP CRON并让WP CRON使用服务器CRON每周运行一次,但这也意味着通常运行的项目,如插件/主题更新、基于CRON的后期删除/发布,都会在一整周的待办事项中(例如,如果我希望CRON每周周一运行一次)。
我不得不假设其他人也遇到过这种情况,所以对这方面的进一步了解将是一个巨大的帮助。谢谢
SO网友:Michael Thompson
如果计划中有重要的WP cron作业,那么您当然应该运行一个系统cron作业,该作业定期调用WP cron,以便在需要时始终启动它们。
如果您需要WP cron运行的特定时间/日期,则始终可以安排单个事件,并让被调用的方法安排下一个事件。
简单示例:
function some_awesome_hook() {
// Do stuff here
// Run next Monday
$next_run = strtotime(\'next monday\');
// Clear hook, just in case
wp_clear_scheduled_hook(\'some_awesome_hook\');
// Add our event
wp_schedule_single_event($next_run, \'some_awesome_hook\');
}
// Run next Monday
$first_run = strtotime(\'next monday\');
// Add our event
wp_schedule_single_event($first_run, \'some_awesome_hook\');
OOP样式:
class My_Sweet_Plugin {
public $cron_hook;
public function __construct() {
// Store our cron hook name
$this->cron_hook = \'my_awesome_cron_hook\';
// Install cron!
$this->setup_cron();
// Add action that points to class method
add_action($this->cron_hook, array($this, \'my_awesome_function\'));
}
public function setup_cron() {
// Clear existing hooks
wp_clear_scheduled_hook($this->cron_hook);
// Next run time
$next_run = strtotime(\'next monday\');
// Add single event
wp_schedule_single_event($first_run, $this->cron_hook);
}
public function my_awesome_function() {
// Do stuff!
// Setup our next run
$this->setup_cron();
}
}