WordPress:wp-cronを無効化する方法

WordPressでは、ジョブを定期実行するために「wp-cron」と呼ばれる⽅法が利⽤されています。wp-cronでは、Webアクセスをトリガーにして、実⾏すべき処理がないかどうかを確認しています。(具体的には、⾃サーバーからwp-cron.phpをHTTP/HTTPS経由で実⾏します)

しかし、Webアクセスをトリガーにしていると、予約投稿などがアクセスがあるまで投稿されないといったことが起こります。

そこで、ジョブの定期実行をwp-cronからOS(オペレーティングシステム)のcronに変更することで、リアルタイムに処理することできるようになります。ここではwp-cronからcronに変更する方法をご紹介します。

手順

wp-cronを無効にする

WordPressの設定ファイル(wp-config.php)に以下を追記します。追記する箇所は、「編集が必要なのはここまでです ! WordPress でブログをお楽しみください。」というコメント行の直上に追記しました。

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

cronの設定

wp-cronを無効にすると、記事の予約投稿などのジョブが動作しなくなるので、cronでwp-cron.phpを定期的に実⾏するように、/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ファイルのフルパスを指定してください。

以上で完了です。

まとめ

curlコマンドを使用してHTTP/HTTPS経由でも実行できますが、Webサーバー経由の実行は、phpコマンドでの実行と比べ動作が遅くなる可能性が高いようです。

ジョブの実行状況を確認するときは、WordPressプラグイン「WP Crontrol」で確認するとよくわかります。

スポンサーリンク