
WordPress には、スケジュールされたタスクをバックグラウンドで実行する仕組みがあります。この仕組みは、内部データのクリーンアップ、利用可能なアップデートの確認、Plugin が特定の時刻や定期的に実行すべきアクション(サイトの定期的な Backup の作成など)といった、多くの重要なタスクを担っています。
WordPress の Cron ジョブのスケジューラがスケジュールタスクを実行していないようだ、というメッセージが表示された場合は、以下の原因を確認してください。
サイトに訪問者はいますか?
しばらく誰もサイトを訪れていない場合、この状況は想定どおりです。WordPress は、訪問者がページにアクセスしたときにのみ何かを実行する機会を得ます。訪問者がいなければ WordPress には一切アクセスされず、スケジュールされたバックグラウンドタスクを開始できません。そのため、サイトが Staging サイトや開発サイトで、他の理由から実訪問者がいない場合は、このメッセージが表示されても不思議ではありません。ページをいくつか訪れれば、メッセージは消えるはずです。
WordPress のメンテナンスモードが有効ですか?
サイトはメンテナンスモードになっていませんか? メンテナンスモードでは、あらゆる種類のスケジュールタスクが無効化されます。そのため、WordPress の Cron ジョブを有効にするには、メンテナンスモードをオフにしてください。
WP Cron は有効ですか、それとも無効ですか?
WordPress のスケジューラは、サイトの設定でオフにできます。これに該当する場合は WP STAGING が警告を表示し、サイトの wp-config.php で DISABLE_WP_CRON が true に設定されていることをお知らせします。
手動で確認することもできます。
WordPress インストールのルートにある wp-config.php ファイルで以下の行を探し、削除してください。任意で、true を false に変更しても構いません。
define('DISABLE_WP_CRON', true);この場合、無効化は Hosting 会社が意図的に行っている可能性があるため、再び無効化される可能性があることに留意してください。一方で、ご自身が意図的に無効化し、Hosting 会社のコントロールパネルなどから別の方法で WordPress のスケジューラへアクセスする手段を用意している場合もあります。
この場合、DISABLE_WP_CRON に関するメッセージが表示されるのは想定どおりです。そのうえで、サイトのすべてのスケジュールジョブを処理できるよう、スケジューラが十分な頻度で呼び出されるようにする必要があります。
スケジューラがそれを呼び出すように設定するまで、スケジュール Backup は実行されません。
なお、DISABLE_WP_CRON は wp-config.php 以外のファイルで設定されている可能性もあります。wp-config.php は単に最も可能性が高い場所というだけです。DISABLE_WP_CRON に関する警告が表示され、wp-config.php には記述がない場合は、別の場所にあるはずなので、それを探してください。
ループバック接続は動作していますか?
一部の Hosting プロバイダは、正当な理由もなく意図的に、WordPress がスケジューラを実行するために必要な「ループバック」接続を無効化していることがあります。サイトがパスワード保護されている場合や、一般公開されていないStaging サイトを運用している場合にも、同じ状況になります。
ループバック接続が動作しない場合(意図的に無効化されているかどうかを問わず)、WordPress の代替スケジューラを試すことができます。
wp-config.php ファイルの中程あたりに、以下の内容の行を追加してください。
define('ALTERNATE_WP_CRON', true);ファイルの末尾近くに追加しすぎると、効果がない場合があります。
サイト全体がパスワード保護されていませんか?
WP Cron とスケジュール Backup が動作しないもう 1 つの理由として、サイト全体が HTTP レベルでパスワード保護されている可能性があります。これは .htaccess ファイルによって行われている場合があります。
これも、WordPress のスケジューラが動作しない原因になります。ウェブサーバーを設定し、自分自身への接続を許可する「ループバック」接続を有効にする必要があります。そうしないと、WordPress のスケジューラとそれに依存するすべての機能が動作しなくなります。Apache と .htaccess を利用している場合は、.htaccess のアクセス制御セクションに以下の 2 行を追加してみてください。
Allow from 0.0.0.0
Satisfy Any0.0.0.0 をサイトの IP アドレスに置き換えてください。
LiteSpeed ウェブサーバーを使用していますか?
LiteSpeed ウェブサーバーを使用していて WP の Cron ジョブが動作しない場合は、こちらの記事をご覧ください。