自定义WP计划事件

时间:2012-12-31 15:17:46

标签: wordpress

专家,

目前在我的一个wordpress插件中有一个cron,按照以下计划运行。 wp_schedule_event(time(),'hourly','w4pr_cron'); 我想将此更改为在特定时间范围内每5分钟运行一次。

例如您知道的当前代码将在一天中每小时运行一次。 (一天24次)。 我希望这只在每天上午5:00到早上6:30(美国东部时间)之间每5分钟运行一次(每天18次)。

任何帮助表示赞赏!

由于 托马斯

2 个答案:

答案 0 :(得分:10)

首先创建自定义时间间隔,您可以找到有关此here的更多信息。

 add_filter( 'cron_schedules', 'cron_add_5min' );

 function cron_add_5min( $schedules ) {
    $schedules['5min'] = array(
        'interval' => 5*60,
        'display' => __( 'Once every five minutes' )
    );
    return $schedules;
 }

确保您已预先安排插件注册的事件:

wp_unschedule_event( next_scheduled_event( 'w4pr_cron' ), 'w4pr_cron' );

接下来安排具有此重复间隔的事件从凌晨5点开始:

if( time() > strtotime( 'today 5:00' ) )
    wp_schedule_event( strtotime( 'tomorrow 5:00' ), '5min', 'w4pr_cron' );
else
    wp_schedule_event( strtotime( 'today 5:00' ), '5min', 'w4pr_cron' );

w4pr_cron不是一个函数,而是一个附加了函数的钩子。因此,如果时间戳不在给定的时间间隔内,则要确保在调用此挂钩时没有任何反应。因此,在functions.php或将在每个页面加载时执行的某处,放置:

add_action( 'init', function() {
    $start = strtotime( 'today 5:00' );
    $end = strtotime( 'today 6:30' );
    if( !(time() > $start && time() < $end) ) remove_all_actions( 'w4pr_cron' );
}

答案 1 :(得分:1)

首先需要添加自定义cron计划,以便每5分钟运行一次

 // Add cron interval of 60 seconds
function addCronMinutes($array) {
    $array['minute'] = array(
            'interval' => 60,
            'display' => 'Once a Minute',
    );
    return $array;
}
add_filter('cron_schedules','addCronMinutes');

但是,要仅允许它在特定时间范围内运行而不会产生额外开销,您可能最好安排每个特定事件。

另一种选择是将触发器中的逻辑放在指定的时间范围内仅运行您的函数,但这会导致高流量站点的额外开销,而cron将每5分钟触发一次。