运行WP Cron Weekly(但在某一天)

时间:2012-09-10 作者:Zach

我希望在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每周周一运行一次)。

我不得不假设其他人也遇到过这种情况,所以对这方面的进一步了解将是一个巨大的帮助。谢谢

4 个回复
最合适的回答,由SO网友:Otto 整理而成

WP-Cron的目的并不是那么精确,如果您必须在特定时间安排事情,则不应使用WP-Cron。WP-Cron是一种“尽力而为”的调度机制,它不能像真正的Cron系统那样保证运行时间。

如果您需要这种性质的精度,唯一真正的答案是不使用WP-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();
    }
}

SO网友:Damien

根据Codex you can use wp_get_schedules 添加一个选项,如Weekly(您已经这样做了)。

WP-Cron并不打算拥有所有的Cron功能,所以为什么不登录到服务器并创建一个Cron作业,只在周一调用您的PHP文件,并将类似的内容添加到crontab中呢

* 07 * * Mon root cmd

SO网友:Edris

您可以使用这种方法

//Your cron function which you want to execute any specific day, e.g. Monday
function daily_cron_callback() {
    $timestamp = time();    
    
    if(date(\'D\', $timestamp) !== \'Mon\') { //do nothing, if not Monday
        return;
    }
    
    //Process your logic here
}

结束

相关推荐

WP-cron.php-如何删除WP的Cron瞬变?

我有一个Wordpress网络,我的任务是禁用WP Cron并将其替换为Apache Cron。我已经设置了一个PHP脚本,当Apache Cron调用该脚本时,它将在网络下的所有站点中循环,并向该站点的wp Cron发出请求。php页面,从而执行其cron。我想使用Wordpress的瞬态特性来限制我的PHP脚本,因为Wordpress限制了自己的cron。然而,当我深入研究代码时,我看到doing\\u cron瞬态已设置(在cron.php#217中),但从未取消设置。瞬态是否一直未设置,或者Wor