WordPressでは、WordPress上のジョブを定期実行するために「wp-cron」と呼ばれる機能が搭載されていますが、wp-cronは、Webサイトへのアクセスをトリガーに実行されるため、アクセスの少ないWebサイトだと、アクセスをトリガーにした実行ではなかなかwp-cronが実行されないケースがあります。
そのようなとき、Linux環境でWordPressを稼働させているなら、wp-cronをOS(オペレーティングシステム)のcronから実行するように変更することで、指定した間隔でwp-cronを実行させることができます。
そこでここでは、Wordpressの「wp-cron」をOSの「cron」で実行する方法を紹介します。
目次
wp-cronとは
wp-cronは、WordPressで行われるさまざまな処理(ジョブ)を定期的に実行するための仕組みで、WordPressやプラグインのアップデートなどの処理がwp-cronで行われています。
wp-cronは、デフォルトではWebサイトへのアクセスをトリガーにして実⾏すべき処理がないかを確認していますが、アクセスの少ないWebサイトでは、アクセスをトリガーにした実行ではなかなかwp-cronが実行されないケースがあります。
自分のWordPress環境でどのようなジョブが定義されているかは「WP Crontrol」というプラグインをインストールすることで確認できます。
WP Crontrol – WordPress プラグイン | WordPress.org 日本語
wp-cronからOSのcronへ変更
wp-cronをOSのcronから定期実行するよう変更する手順は、次のとおりです。
wp-cronの無効化
まず、WordPressの設定ファイル「wp-config.php」に以下の内容を追記して、wp-cronを無効化します。
define('DISABLE_WP_CRON', 'true');
/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
wp-config.phpへの追記箇所は、「編集が必要なのはここまでです ! WordPress でブログをお楽しみください。」というコメント行の直上です。
OSのcronの設定
つぎに、OSのcronでwp-cronを定期的に実⾏するように、cronに設定を追記します。たとえば、/etc/crontabに以下のように追記します。
# vi /etc/crontab
* * * * * nginx /usr/bin/php -q /var/www/html/wp-cron.php >/dev/null
- 「* * * * *」の部分は実行間隔を指定しており、この場合は毎分実行されます。「*/10 * * * *」と指定すれば、10分ごとに実行できます。
- 「nginx」の部分は、Webサーバーを実行しているユーザーを指定してください。Webサーバーがnginxなら「nginx」、Apacheなら「apache」などのユーザー名を指定します。
- 「/usr/bin/php」の部分は、PHPコマンドのパスを指定してください。通常はこのままで問題ないと思います。
- 「/var/www/html/wp-cron.php」の部分は、WordPressをインストールしたディレクトリのwp-cron.phpファイルのフルパスを指定してください。
以上で設定完了です。
あとがき
設定変更後に、WordPressのジョブがcronで実行されているかは、WordPressプラグイン「WP Crontrol」で確認するとよくわかります。