【WordPress】wp-cronを毎週、毎月実行してみよう
以前【WordPress】自動で定期的に処理をさせよう!wp-cronの使い方で、とある処理をすればweeklyやmonthlyも使えると書きました。
それを今回ご紹介します。
Contents
ソースコード
function my_add_intervals($schedules) { $schedules['weekly'] = array( 'interval' => 604800, 'display' => __('1週間に1度実行') ); $schedules['monthly'] = array( 'interval' => 2635200, 'display' => __('1ヶ月に1度実行') ); return $schedules; } add_filter( 'cron_schedules', 'my_add_intervals');
これをfunction.phpにコピペするだけで、weekly,hourlyが使えます。
では解説です。
解説
まず、wp-cronで使えるスケジュールは現在hourly,twicedaily,dailyとなっています。
これはwp_get_schedules()関数で確認できます。
var_dumpしてみた結果を記載します。
array(3) { ["hourly"]=>array(2) { ["interval"] => int(3600) ["display"] => string(14) "1時間に1回" } ["twicedaily"]=>array(2) { ["interval"] => int(43200) ["display"] => string(8) "1日2回" } ["daily"]=>array(2) { ["interval"] => int(86400) ["display"] => string(8) "1日1回" } }
現在このような感じですね。
ここにweekly,monthlyなどを追加してあげればいいわけです。
どうするかといいますと、フィルターフックを使います。
フィルターフックはデータが出力される際に、そのデータをカスタマイズすることができる仕組みです。
関数でフィルターして、ひっかかったデータをすくい取って加工して放流する、そんな感じ?
本来上記の配列が出力されようとしているところをすくい取って、好きな内容に書き換えてやるわけです。
フィルターフックの使い方
add_filter( $tag, $function_to_add, $priority, $accepted_args );
パラメータ名 | 要否 | 初期値 | 説明 |
---|---|---|---|
$tag | 必須 | なし | $function_to_addで指定した関数を登録するフィルターフックの名前 |
$function_to_add | 必須 | なし | 呼び出す関数 |
$priority | オプション | 10 | この関数を実行する順序 |
$accepted_args | オプション | 1 | 関数が受け取る引数の個数 |
今回はmy_add_intervals()という関数を作ってcron_schedulesフックに登録してやります。
cron_schedulesはcronのスケジュールをフィルタリングするフィルターフックです。
ここですくい取ったスケジュールの配列に自前で書いたスケジュールの配列を合成して書き換えてあげます。
配列の内容としてはこちらです。
スケジュール配列の作り方
$schedules['weekly'] = array( 'interval' => 604800, 'display' => __('1週間に1度実行') );
$schedules[]のキーにweekly,monthlyなど、wp_schedule_event()の$recurrenceに指定する実行頻度の名称を設定します。
値は配列とし、キーにはintervalとdisplayを設定します。
intervalはスケジュールが実行されるまでの時間で、秒数で指定します。
1時間であれば60秒*60分=3600秒、1日であれば60秒*60分*24時間=86400秒。
なので、1週間であれば60秒*60分*24時間*7日=604800秒。
1ヶ月は月ごとに日数が違うのでこの方法では正確な秒数は出せないのですが、1ヶ月を30.5日とすることでおおよその秒数が出せますね。
2635200秒です。
displayは説明ですね。WP Crontrolというプラグインを入れてあれば、WP-Cronイベントの頻度のところに表示される説明の指定です。
そして$schedules[]配列をreturnしてあげましょう。
これで終了です。
終わりに
これで自由に実行頻度を設定出来るようになりました。
参考になりましたら幸いです。
それではよいWordPressライフを!