次のような状態になっていたら、本件を疑うこと。
- WordPress本体の自動更新が止まっている
- 「自動更新を有効にする」リンクが表示されない
- サイトヘルスに
「WP-Cron に問題がある可能性があります」 と表示される - 予約投稿や更新チェックが正常に動かないことがある
■ 原因
Basic認証(.htaccess)を設定すると、
WordPressが自分自身へ行うHTTPアクセス(ループバック通信)も認証で遮断される。
WordPressの自動更新・予約投稿・各種スケジュール処理は
WP-Cron(疑似cron) によって動作しており、
内部的には次の処理を行っている。
- WordPressが
wp-cron.phpにHTTPアクセス - そのアクセスをトリガーに定期処理を実行
Basic認証があると、このアクセスが401エラーになり、
WP-Cronが完全に停止してしまう。
■ 対処方法(wp-cron.phpのみ認証除外)
Basic認証は維持したまま、wp-cron.php だけ認証対象外にする。
.htaccess のBasic認証設定の直後に、以下を追加する。
▼ 追加設定
<Files wp-cron.php>
Satisfy Any
Order Allow,Deny
Allow from all
</Files>
■ Apache2.4環境の場合(推奨記述)
サーバーがApache2.4系の場合は、以下の書き方でも可(こちら推奨)。
<Files "wp-cron.php">
Require all granted
Satisfy any
</Files>
■ この設定で何が変わるか
| 対象 | 状態 |
|---|---|
| サイト全体 | Basic認証で保護 |
| 管理画面 | 保護されたまま |
| wp-cron.php | WordPress内部実行のみ許可 |
セキュリティを保ったまま、WP-Cronだけ正常動作に戻せる。
■ このトラブルが起きやすいケース
- 開発環境/検証環境でBasic認証を設定した
- 公開前サイトにアクセス制限をかけた
- 久しぶりに管理画面を見たら更新が止まっていた
WordPressの仕様上、Basic認証とWP-Cronは相性が悪いため頻出。
■ 今後の予防ルール
Basic認証を設定する際は、必ず以下も同時に設定すること。
「wp-cron.php の認証除外をセットで入れる」
■ 参考(不具合の典型例)
- 自動更新が数か月止まる
- 予約投稿が公開されない
- サイトヘルスでループバックエラー表示
→ まずBasic認証の有無を確認すること。
コメントを残す