2012-12-31 66 views
2

專家,定製WP時間表事件

目前在我的一個wordpress插件中有一個cron按照下面的時間表運行。 wp_schedule_event(time(),'hourly','w4pr_cron'); 我想將其更改爲在特定時間範圍內每5分鐘運行一次。

對於例如如您所知,當前的代碼將在一天中每小時運行一次。 (每天24次)。 我想這對每5分鐘上午5:00和6:30 AM(EST)只(18個運行一天)之間運行。

任何幫助表示讚賞!

感謝 托馬斯

回答

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分鐘燒成。

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'); 
}