Managing scheduled tasks

时间:2013-02-20 作者:user417627

我希望插件的用户能够根据标准WP设置定义任务是每天运行、每天运行两次、每小时运行还是根本不运行。我将它们存储为“每日”、“两天”、“每小时”或“obr\\u scheduled\\u interval”选项。

问题是,我希望“obr\\u grab”的任务在每次页面访问时运行,而不是在选定的时间段之后每次页面访问时运行。

这些是类中的相关代码位。

function __construct(){
    register_activation_hook(__FILE__, array(&$this, \'obr_activate_scheduled_task\'));
    add_action(\'obr_scheduled_task\', array(&$this, \'obr_activate_scheduled_task\'));
    add_shortcode(\'obr_grab\', array(&$this, \'obr_grab\'));
    register_deactivation_hook(__FILE__, array(&$this, \'obr_deactivate_scheduled_task\'));
}

function obr_activate_scheduled_task() {
    // function to activate the scheduled task (if there is one);
    if (wp_next_scheduled(\'obr_scheduled_task\')){
        wp_clear_scheduled_hook(\'obr_scheduled_task\');
    }
    $interval = get_option(\'obr_scheduled_interval\');
    if (strlen($interval) > 0){
        wp_schedule_event(time(), $interval, \'obr_scheduled_task\');
    }
}

function obr_scheduled_task(){
    // if called we need to use the grab function
    $this->obr_grab();
}

function obr_deactivate_scheduled_task(){
    // clear the schedule on deactivation
    wp_clear_scheduled_hook(\'obr_scheduled_task\');
}       
我已经看过了core control 但那里只有两个标准作业:wp\\u scheduled\\u auto\\u draft\\u delete和wp\\u scheduled\\u delete

非常感谢大家的帮助!

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

在我看来,这条线

add_action(\'obr_scheduled_task\', array(&$this, \'obr_activate_scheduled_task\'));
应该是

add_action(\'obr_scheduled_task\', array(&$this, \'obr_scheduled_task\'));
否则,您将重新安排每页访问。

Edit:

以下是调试wp cron时有用的记录器:

function my_logger($var){
    $logfile="/tmp/logger.txt"; // EDIT this to your needs
    file_put_contents($logfile, date("Y-m-d: H:i:s",time())." --- ".print_r($var, true)."\\n", FILE_APPEND);
}
您可以在类函数中使用它以及相关的调试消息,

 my_logger("My Class construction");
 my_logger("Running the cron function");
日志文件如下所示:

2013-02-20: 14:00:43 --- My Class construction
2013-02-20: 14:00:53 --- Running the cron function
希望这有帮助。

结束

相关推荐

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