cron_schedulesを使用して新しいスケジュール時刻を作成できます。
function my_cron_schedules($schedules){
if(!isset($schedules["5min"])){
$schedules["5min"] = array(
'interval' => 5*60,
'display' => __('Once every 5 minutes'));
}
if(!isset($schedules["30min"])){
$schedules["30min"] = array(
'interval' => 30*60,
'display' => __('Once every 30 minutes'));
}
return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');
これで、機能をスケジュールできます。
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
一度だけスケジュールするには、関数でラップし、実行する前に確認します。
$args = array(false);
function schedule_my_cron(){
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
}
if(!wp_next_scheduled('my_schedule_hook',$args)){
add_action('init', 'schedule_my_cron');
}
$ argsパラメーターに注意してください!wp_next_scheduledで$ argsパラメーターを指定せず、wp_schedule_eventに$ argsを指定すると、(1つだけではなく)ほぼ無限の数の同じイベントがスケジュールされます。
最後に、実行する実際の関数を作成します。
function my_schedule_hook(){
// codes go here
}
ページがロードされるたびにwp-cronがスケジュールをチェックし、予定されたジョブを実行していることに言及することが重要だと思います。
したがって、1時間に1人の訪問者しかいない低トラフィックのWebサイトがある場合、wp-cronはその訪問者があなたのサイトを閲覧したときにのみ(1時間に1回)実行されます。訪問者が1秒ごとにページを要求するトラフィックの多いサイトがある場合、wp-cronが1秒ごとにトリガーされ、サーバーに余分な負荷がかかります。
解決策は、wp-cronを非アクティブにし、スケジュールされたwp-cronジョブを最速で繰り返す時間間隔(実際には5分)で実際のcronジョブを介してトリガーすることです。
Lucas Rolffが問題を説明し、解決策を詳細に説明します。
別の方法として、次のような無料のサードパーティサービスを使用できます。 UptimeRobot wp-cronを非アクティブ化し、実際のcronジョブを介してトリガーしたくない場合、5分ごとにサイトを照会(およびwp-cronをトリガー)できます。