WordPressで「1週間に1回」「30分に1回」など定期実行したいスケジュールを新しく作る方法

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

スケジュールを簡単に追加できるプラグインもあるよ

以下のページに書きましたので、ご参考ください。

著者:bouya Imamura