WordPressにより構築されているサイトで、定期的に何かの処理を実行したい、ということがあるかと思います。
例えば、毎日午前2時に定型文の投稿を下書きを作っておく、という処理をさせたいというケースを考えます。
システムに詳しい方だと「自動実行」といえばすぐに「cron」機能が思い浮かぶかもしれません。
Linux系のサーバーで定期的にある処理を自動で実行してくれるようにできる機能です。
しかし、サーバーのcron機能が使えない状況もあるかもしれませんが、
その場合でもWPが提供している「WP-Cron」という機能を使えば自動実行を実現させることができます。
WP-Cronの動き
サーバーのcron機能は、サーバーの時間に基づいた定期実行ですが、WPはそもそもWeb上のシステムですので、ブラウザからのアクセスがないと何も動きません。
ですので、WP-Cronの動きとしては02:00に処理が実行されるのではなく、02:00以降の最初のアクセス時に処理が実行されます(毎日02:00実行設定の場合)。
アクセスが少ないサイトの場合、極端な話、処理が実行されない日がある可能性があります。
しかし、この「アクセス」には管理画面も含まれますので、たいていのケースでは困ることはないと思います。
が、それを考慮した処理にする必要があると言えます。
設定方法
テーマフォルダにある「functions.php」に以下の記述を書くことで設定することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 自動実行用関数 function my_auto_function() { ・・・ 処理 ・・・ } add_action ( 'my_auto_function_cron', 'my_auto_function' ); // cron登録処理 if ( !wp_next_scheduled( 'my_auto_function_cron' ) ) { // 何度も同じcronが登録されないように date_default_timezone_set('Asia/Tokyo'); // タイムゾーンの設定 wp_schedule_event( strtotime('2017-06-29 02:00:00'), 'daily', 'my_auto_function_cron' ); } |
cronがきちんと登録されているかどうかを確認する方法としては、「WP Crontrol」というプラグインを入れると視覚的に確認しやすいです。
何時何分にどの頻度で実行されるのかが分かります。
また、実行時間をここから修正もできますし、削除も行うことができます。
また、「PHP Cron イベントの追加」のタブから、自動実行処理をここで設定することもできます。
注意点
上記でも書きましたが、WP-CronはLinuxのcronとは違いますので、以下の点、注意しておく必要があります。いわば「疑似」自動処理です。
・アクセスがない場合、処理が実行されない。
・Basic認証がかかっていると正常に動かない。
プログラム例
例として最初に触れた「毎日午前2時に定型文の投稿を下書きを作っておく」処理を記載しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 自動実行用関数 function my_auto_function() { $content = 'テンプレートの内容です'; $title = 'テンプレートのタイトルです'; $post = array ( 'post_content' => $content, 'post_title' => $title, 'post_status' => 'draft', 'post_type' => 'post' ); wp_insert_post( $post ); } add_action ( 'my_auto_function_cron', 'my_auto_function' ); // cron登録処理 if ( !wp_next_scheduled( 'my_auto_function_cron' ) ) { // 何度も同じcronが登録されないように date_default_timezone_set('Asia/Tokyo'); wp_schedule_event( strtotime('2017-06-30 02:00:00'), 'daily', 'my_auto_function_cron' ); } |
南本貴之