ワードプレスで時間がかかる処理は夜中のアクセスが少ない時間にバッチ処理で回しておきたい。
そんな便利な機能がワードプレスにはあります。
ただし…
スケジュールされた時間の後の最初のアクセスがフックになります…orz
アクセスの少ないサイトは、自分のアクセスがフックになったりするかもしれません。
テスト時に設定しておくと便利なもの
下記のdefineは、wp-config.phpファイルの設定です。
//wp-config.phpに設定 //wp-cron.php クーロン自動処理停止 define('DISABLE_WP_CRON', 'true');
これを指定するとクーロンの自動処理がすべて停止します。WPのバージョンアップチェックやプラグインのバージョンアップお知らせなどもクーロンで動いていてそれがすべてとまってしまうので、そういうのを気にしないのであれば、停止してもよいかもしれません。
※停止してしまっても、自分でwp-cron.phpをキックすればバッチ処理を起動させることができます。
//wp-config.phpに設定 //エラーメッセージ出力 define('WP_DEBUG', true);
基本はすべてエラーメッセージの出力が止められていますが、これをtrueにするとnoticeもすべて表示されるようになります。
//wp-config.phpに設定 // /wp-content/debug.log ファイルへのデバッグログの出力を有効化 define('WP_DEBUG_LOG', true);
ajaxやcronはエラーを確認することができません。WP_DEBUG_LOGを設定しておくと、phpのエラーが/wp-content/debug.logに出力されます。
ただし、ajaxやcron以外のサイト上で起こる全てのエラーが出力されるので、見分けるのが少し大変です。
WP Controlというプラグイン
現在登録されているスケジュールを確認、実行、削除することができます。
自分の登録したクーロンの確認や実行などの確認に使うと便利です。
WP Controlプラグインはここ。
クーロンスケジュールで好きな秒数を設定する方法
2分以下でも自分で好きな間隔秒数を設定できます。
下記は、20秒で設定したい場合。
function cron_add_20sec( $schedules ) { $schedules['20sec'] = array( 'interval' => 20, 'display' => __( '20秒1回' ) ); return $schedules; } add_filter( 'cron_schedules', 'cron_add_20sec' );
特定時刻でバッチ処理をする時のUNIX時刻の書き方
WordPressのクーロンでは、スケジュールをUNIXタイムで指定しないといけない。
PHPで、UNIXタイムで特定時刻を指定する方法。
//今日の2時をUNIXタイムにする $tt = strtotime(date('Ymd 02:00:00'));
処理時間オーバーでエラーになる場合
Fatal error: Maximum execution time of 60 seconds exceeded
などのエラーがでる場合があります。処理時間がオーバーする場合は、処理時間を延長させることで回避できます。
set_time_limitで処理時間に3600(1時間)を設定しておけばほとんとの場合は問題ないと思います。
参考:処理時間の延長方法