WordPressで作られているWebサイトで定期的に何かを実行させたい場合は「wp_schedule_event」関数を使うと便利ですね。
「1時間に1回」「1日に1回」など「どれくらいの間隔で定期実行させるのか」を指定するパラメーター「recurrence」は、以下の3つのスケジュールから選ぶことができます。
- hourly(1時間に1回)
- twicedaily(1日に2回)
- daily(1日に1回)
ここで、例えば「1週間に1回」とか「30分に1回」とか、もうちょっと長い(短い)間隔で定期実行させたいこともあると思います。そんな時は、新しくスケジュールを追加すればOKです。
定期実行させたいスケジュールを新しく追加する方法
Codexにあるサンプルコードを参考にして、以下のようにコメントで簡単な解説を付けました。「cron_schedules」でスケジュール追加って感じですね。
add_filter( 'cron_schedules', 'my_add_weekly' ); // 「cron_schedules」フックを使ってスケジュール追加
function my_add_weekly( $schedules ) {
// 1週間に1回のスケジュールを追加する
$schedules['weekly'] = array( // 「weekly」という名前でスケジュールを登録
'interval' => 604800, // 実行間隔 この場合は1週間なので、60(秒) * 60(分) * 24(時間) * 7(日) = 604800(秒)
'display' => __('Once Weekly') // 表示名(どれくらいの間隔で実行されるのか、わかるように書いておけばいいんじゃないかな)
);
return $schedules;
}「wp_schedule_event」のパラメーター「recurrence」に「weekly」を指定すると、「1週間に1回」定期実行してくれます。
一度に複数のスケジュールを追加することもできるよ
追加したいスケジュールが複数ある場合は、下のコードのように複数書けばOKです。こちらもCodexにあるサンプルコードを参考にしました。
add_filter( 'cron_schedules', 'my_add_intervals'); // 「cron_schedules」フックを使ってスケジュール追加
function my_add_intervals($schedules) {
// 1週間に1回のスケジュールを追加する
$schedules['weekly'] = array(
'interval' => 604800,
'display' => __('Once Weekly')
);
// 30分に1回のスケジュールを追加する
$schedules['every_30min'] = array( // 「every_30min」という名前でスケジュール登録
'interval' => 1800, // 実行間隔 この場合は30分なので、60(秒) * 30(分) = 1800(秒)
'display' => __('Every 30 minutes') // 30分おきに実行
);
return $schedules;
}
「wp_schedule_event」のパラメーター「recurrence」に「every_30min」や「weekly」を指定すると、それぞれ対応したスケジュールで定期実行してくれます。
参考リンク
Plugin API/Filter Reference/cron schedules
スケジュールを簡単に追加できるプラグインもあるよ
以下のページに書きましたので、ご参考ください。

このページを共有する