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