WordPressで「予約投稿の失敗」と出る原因と対処法
直らないときは、無料でご相談いただけます(直らなければ料金はいただきません)。
結論:投稿の一覧に「予約投稿の失敗」と出るのは、予約した日時を過ぎても、記事がまだ「予約済み」のまま公開されていないときです。WordPressの予約の仕組み(WP-Cron)は、だれかがサイトを開いたときに動くため、その時間帯にアクセスが無いときや、サイトが自分自身への呼び出し(ループバック)を止められているとき、予約の仕組みを止めているときなどに、遅れたり公開されなかったりします。
まずは、その記事を手で公開します。そのうえで、サイトヘルスやサーバーの設定で、原因を確かめます。
目次
この記事は、WordPressのトラブル解決を受け付けているWP-ingが、原因の見分け方と対処法をまとめたものです。
出る画面
管理画面の「投稿」→「投稿一覧」の日付の欄に、赤い字で「予約投稿の失敗」と出ます。予約した日時より前は、「予約済み」と出ます。
この表示は、予約した日時を過ぎたのに、記事の状態がまだ予約のままであることを表しています。
予約の仕組みと、失敗する理由
WordPressは、記事を予約すると、その日時に「この記事を公開する」という予定を登録します。この予定を実行する仕組み(WP-Cron)は、サーバーの中でずっと動いているのではなく、だれかがサイトのページを開いたときに、その時点で実行する予定があるかを確かめて動きます。WordPressの公式の案内でも、午後2時に予約しても午後5時までだれもページを開かなければ、予定どおりに動かないことがある、と説明されています。
| 原因の例 | どうなっているか |
|---|---|
| 予約した時間帯に、サイトを開く人がいなかった | 予定を確かめる機会が無く、遅れます。次にだれかが開いたときに公開されることもあります |
| ベーシック認証(IDとパスワードの入力の画面)や、サーバーの守りの仕組み・セキュリティのプラグインが、サイト自身からの呼び出しを止めている | 予定を実行するための呼び出し(wp-cron.php)が届かず、実行されません |
wp-config.php でWP-Cronを止めているのに、代わりにサーバーから定期的に呼び出す設定が無い |
予定が実行されません |
このほか、「設定」→「一般」の「タイムゾーン」がふだんの時間と合っていないと、思っていた時刻と違う時刻に公開されることがあります(下の1)。
まずすること:記事を手で公開する
まず、その記事を今、公開してよいか(中身や、公開の日時)を確かめます。そのうえで、次のように公開します。
- 記事の編集画面を開きます。予約の日時を過ぎた記事では、画面の右上のボタンが「保存」になっています(WordPress 7.1 のブロックエディターの場合)。
- 公開の日時を確かめて、「保存」を押します。WordPressは、日時が過ぎた予約の記事を保存すると、公開の状態にします。
- 投稿の一覧で状態が「公開済み」になったかと、ログアウトした状態で記事が開けるかを確かめます。
公開の日時は、予約していた日時のままになります。今の日時で公開したいときは、日時を直してから保存します。ボタンの名前は、WordPressの版や、使っている編集画面によって違うことがあります。
同じことが続くときは、次の手順で原因を確かめます。
原因の確かめ方
1. 予約した時刻とタイムゾーンを確かめる
予約した日時が、思っていた時刻と合っているかを確かめます。あわせて、「設定」→「一般」の「タイムゾーン」が、ふだん使っている時間(日本なら「東京」や「UTC+9」)になっているかも見ます。ずれていると、予約した時刻と、実際に公開される時刻がずれます。
2. サイトヘルスを見る
管理画面の「ツール」→「サイトヘルス」を開きます。次のような項目が出ていれば、予約の仕組みがうまく動いていない手がかりになります。
- 「予約したイベントの実行に失敗しました」
- 「予約したイベントが遅れています」
- 「サイトでループバックリクエストが完了できませんでした」(サイトが自分自身を呼び出せていない。「cURL error 28」などの番号が出ている場合は、cURL error の記事もご覧ください)
それぞれの項目を開くと、くわしい説明が出ます。何も出ていなければ、予約の時間帯にアクセスが無かったことなども考えられます。ただ、サイトヘルスは開いたときの状態を見るものなので、何も出ていなくても、予約の時点の原因までは分からないことがあります。サイトヘルスの見方は、サイトヘルスの記事にまとめています。
3. ベーシック認証やアクセスの制限を確かめる
ベーシック認証(ブラウザにIDとパスワードを入れる画面が出る仕組み)をかけていて、その対象に wp-cron.php が含まれていると、WordPressが予定を実行するための呼び出しも止められることがあります。サイト全体にかけている場合などが当てはまります。
- この場合は、
wp-cron.phpを認証の対象から外す設定などが必要になることがあります。次の4の、サーバーから呼び出す方法でも、呼び出し方によっては認証の影響を受けます。設定の仕方はサーバーによって違うため、サーバー会社の案内をご確認ください。 - サーバーの守りの仕組み(WAFなど)や、セキュリティのプラグインが、サイト自身からの呼び出しを止めていることもあります。直前に入れた・設定を変えたものがあれば、元に戻して確かめます。WAFの記録の見方は、「返答が正しい JSON レスポンスではありません」の記事の「サーバーのWAFが止めているとき」にまとめています。
4. WP-Cron を止めていないかを確かめる(慣れた方向け)
wp-config.php に、次の1行が入っていると、ページを開いたときにWP-Cronが動かなくなります。
define( 'DISABLE_WP_CRON', true );
この行は、サーバーの定期実行(cron)の設定で wp-cron.php を決まった間隔で呼び出すときに使うものです。WordPressの公式の案内でも、この行を入れたうえで、サーバーの定期実行から wp-cron.php を呼び出す方法が紹介されています(間隔は、15分ごとなど、必要に合わせて決めます)。
- この行があって、サーバーの定期実行など、ほかに予定を実行する仕組みが無い・止まっている場合は、予約が実行されません。サーバーの管理画面の「cron」「定期実行」などの設定を確かめます。
- 管理画面に設定が見当たらないだけでは、ほかの方法で呼び出していないとは言い切れません。だれがなぜ入れたか分からない場合は、
wp-config.phpは書き換えずに、サイトを作った会社などに確かめると安心です。
wp-config.php を書き換える前に、ファイルの写しを残します。このファイルには、データベースのパスワードなどの大事な情報が書かれています。人に相談するときは、ファイルの中身を含めずにお知らせください。
5. 直った後に確かめること
- サイトヘルスの項目が消えたか
- ベーシック認証やサーバーの守りの仕組みを一時的に変えた場合は、元に戻したか
- 設定を元に戻した後で、公開されても差し支えない中身の試しの記事を予約し、その時刻を過ぎてから公開されているかを確かめます。サーバーの定期実行を使っている場合は、その間隔の分だけ待ってから確かめます。確かめた後は、試しの記事を削除します
自分で直すのが難しいとき
次のような場合は、無理に作業を進めず、ご相談ください。
- 予約投稿の失敗が、何度もくり返される
- サイトヘルスに出ている項目の意味が分からない
- ベーシック認証やサーバーの定期実行の設定の仕方が分からない
- 予約投稿のほかに、自動の更新やバックアップのプラグインなど、決まった時間に動くはずのものも動いていない
WP-ingでは、このエラーをはじめ、WordPressの不具合の修理を承っています。状況を確かめて、作業の前に料金をご案内します。直らなければ料金はいただきません。お支払いは、直ったことを確かめていただいてからです。
よくある質問
「予約投稿の失敗」の記事は、待てば公開されますか?
その後にだれかがサイトを開いたときに、公開されることもあります。ただ、原因によってはそのままのこともあるため、気づいたときに手で公開しておくと安心です。
アクセスの少ないサイトでも、予定どおりに公開したいです。
サーバーの定期実行(cron)から wp-cron.php を決まった間隔で呼び出すと、アクセスの有無にかかわらず、予定を確かめられるようになります。ただ、公開までの遅れは、定期実行の間隔などによって変わり、予約した時刻ぴったりとは限りません。設定の仕方はサーバーによって違うため、分からないときはご相談ください。