WordPressの「wp-cron」をOSの「cron」で実行する方法

WordPressの「wp-cron」をOSの「cron」で実行する方法

WordPressでは、WordPress上のジョブを定期実行するために「wp-cron」と呼ばれる機能が搭載されていますが、wp-cronは、Webサイトへのアクセスをトリガーにして、実⾏すべきジョブがないかどうかを確認しているため、アクセスの少ないWebサイトだと、アクセスをトリガーにした実行ではなかなかwp-cronが実行されないケースがあります。

そのような場合、Linux環境でWordPressを稼働させているなら、ジョブの定期実行をwp-cronからOS(オペレーティングシステム)のcronから実行するように変更することで、指定した間隔でwp-cronを実行させることができます。

そこでここでは、Wordpressの「wp-cron」をOSの「cron」で実行する方法を紹介します。

この記事は、以下の環境で実行した結果を基にしています。他のソフトウェアやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS7.4.1708
WordPress5.7.2

手順1:wp-cronを無効にする

まず、WordPressの設定ファイル(wp-config.php)に、以下の内容を追記して、wp-cronを無効化します。

追記する箇所は、「編集が必要なのはここまでです ! WordPress でブログをお楽しみください。」というコメント行の直上です。

define('DISABLE_WP_CRON', 'true');
/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */

手順2:cronの設定

つぎに、OSのcronでwp-cron.phpを定期的に実⾏するように、/etc/crontabの最終行に以下を追記します。

# vi /etc/crontab

* * * * * nginx /usr/bin/php -q /var/www/html/wp-cron.php >/dev/null
  • 「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」で確認するとよくわかります。

WP Crontrol – WordPress プラグイン | WordPress.org 日本語