WordPressで日時を指定して予約投稿したのに、その時刻を過ぎても公開されず「予約投稿を公開できませんでした」と表示される。この現象は珍しいものではなく、WordPressの仕組み上どのサイトでも起こり得ます。原因のほとんどは、WP-Cronという時限実行の仕組みが動いていないことです。この記事では、公開されなかったときの復旧手順と、二度と起こさないための設定を解説します。
予約投稿の失敗はWP-Cronが動かなかったことが原因
まず仕組みを理解すると、対処が一気に簡単になります。WordPressの予約投稿は、指定時刻に自動で動く時計を持っているわけではありません。
WordPressの時限処理は「誰かがサイトを見た瞬間」に動く
WordPressはWP-Cronという仕組みで予約投稿・自動更新・バックアップなどの時限処理を管理しています。この仕組みは、サイトに誰かがアクセスしたタイミングで「そろそろやるべき処理はないか」を確認して実行する方式です(出典 WordPress Developer Resources WordPress Cron)。
アクセスがなければ予約時刻を過ぎても実行されない
この仕組みの弱点は明確です。予約時刻の後に誰もサイトを訪れなければ、公開処理は実行されません。アクセス数が少ないサイトで深夜3時に予約投稿を設定すると、朝までアクセスがなく、公開が遅れます。(サイトに時計はなく、来訪者が時計を持ってきてくれるのを待っている状態です)
時刻を過ぎた投稿は「予約投稿を公開できませんでした」になる
WordPressには、予約時刻から一定時間を過ぎた投稿を失敗扱いにする仕様があります。この状態になると、その後アクセスがあっても自動公開されず、投稿一覧に「予約投稿を公開できませんでした」と赤字で表示されます。
公開されなかった投稿を今すぐ公開する手順
まず目の前の投稿を公開する方法です。数分で終わります。
投稿を開いて公開ボタンを押し直す
- 管理画面の投稿一覧を開く
- 「予約投稿を公開できませんでした」と表示されている投稿を開く
- 公開設定の日時を「今すぐ」に変更する
- 「公開」ボタンを押す
これで即座に公開されます。日時を過去の予約時刻のままにして公開すると、その日時で公開扱いになるため、記事の並び順を保ちたい場合は日時をそのままにして公開してください。
大量にある場合はプラグインで一括処理する
失敗した予約投稿が多数ある場合、Scheduled Post Trigger のような予約投稿を再実行するプラグインを使うと一括で処理できます。ただしこれは対症療法であり、根本原因の解消にはなりません。
公開に失敗した投稿を放置すると、下書きでも公開でもない宙ぶらりんの状態でリストに残り続けます。定期的に投稿一覧を確認し、失敗した投稿がないかをチェックしてください。
予約投稿が失敗する原因は6つに分類できる
WP-Cronの仕組み以外にも、失敗を引き起こす要因があります。
| 原因 | 症状の特徴 | 確認方法 |
|---|---|---|
| アクセス数が少ない | 深夜や早朝の予約だけ失敗する | 失敗した投稿の予約時刻を確認する |
| WP-Cronが無効化されている | すべての予約投稿が失敗する | wp-config.php の DISABLE_WP_CRON を確認 |
| キャッシュプラグインの干渉 | 導入・設定変更後から失敗が始まる | キャッシュ系プラグインの設定を確認 |
| タイムゾーン設定のずれ | 指定時刻と9時間ずれて公開される | 設定の一般でタイムゾーンを確認 |
| サーバーの負荷制限 | 不定期に失敗する | サーバーのエラーログを確認 |
| プラグイン同士の競合 | 特定のプラグイン導入後から発生 | プラグインを順に停止して切り分ける |
タイムゾーンが東京になっているか必ず確認する
WordPressの初期設定ではタイムゾーンがUTC(協定世界時)になっていることがあります。この状態では、指定した時刻から9時間ずれて公開されます。管理画面の「設定」から「一般」を開き、タイムゾーンが「東京」になっているか確認してください。この設定ミスは、公開失敗ではなく「9時間後に勝手に公開された」という形で現れます。
キャッシュプラグインは予約投稿と相性が悪い場合がある
ページキャッシュを強く効かせていると、実際のアクセスがWordPressの本体処理まで届かず、WP-Cronが起動しないことがあります。またサーバー側のキャッシュ機能でも同じ現象が起こります。予約投稿の失敗がキャッシュ導入後から始まった場合は、この線を疑ってください。
wp-config.php で無効化されているケース
サーバー負荷を下げる目的で、wp-config.php に WP-Cron を無効化する設定が書かれていることがあります。制作会社が高速化のために設定した場合、その代わりにサーバー側の定時実行(Cron)を設定しているはずですが、その設定が抜けていると予約投稿がまったく動かなくなります。
再発防止の本命はサーバー側の定時実行に切り替えること
根本的な対策は、アクセス頼みのWP-Cronから、サーバーが確実に実行する仕組みへ切り替えることです。
レンタルサーバーのCron機能を設定する
エックスサーバー・さくらのレンタルサーバ・ConoHa WINGなど主要なレンタルサーバーには、指定時刻にコマンドを実行するCron機能が標準で備わっています。WordPressのWP-Cronを無効化し、サーバーのCronで5分〜15分おきに実行するよう設定すれば、アクセスの有無に関係なく予約投稿が動きます。
設定手順の概要は以下のとおりです。
- wp-config.php に WP-Cron を無効化する設定を追記する
- サーバーの管理画面でCronを新規作成する
- 実行間隔を5分〜15分に設定する
- wp-cron.php を呼び出すコマンドを登録する
- 設定後、テスト用の予約投稿で動作を確認する
この作業はサーバーの管理画面とファイル編集の両方が必要になるため、自信がない場合は保守担当に依頼してください。設定を誤ると、予約投稿だけでなく自動バックアップや自動更新もすべて止まります。
外部の死活監視サービスで定期アクセスを発生させる方法もある
サーバーのCron機能が使えないプランの場合、外部の監視サービスから定期的にサイトへアクセスさせることで、WP-Cronを起動させる方法があります。5分おきの死活監視を設定すれば、予約投稿の遅延は最大でも5分に収まります。サイトの死活監視も同時に実現できるため、一石二鳥の対策です。
そもそもアクセスの多い時間帯に予約する
設定変更が難しい場合の現実的な回避策として、予約時刻を昼間に寄せる方法があります。深夜3時ではなく午前9時に予約すれば、通勤時間帯のアクセスで確実に処理が走ります。技術的な対策ができない環境では、運用でカバーするのが早いです。
予約投稿の運用ルールを決めておくと事故が減る
仕組みの対策に加えて、運用面のルールも整えておくと安心です。
公開日の翌日に必ず表示を確認する
予約投稿を設定したら、公開予定日の翌営業日にサイトを確認するルールにしてください。失敗していても翌日に気づければ、実質的な影響はほとんどありません。逆に、確認習慣がないと数週間気づかないことがあります。
重要な告知は予約投稿に頼らない
セール開始・営業時間変更・臨時休業のように、時刻が重要な告知は予約投稿に任せず、当日に手動で公開する方が確実です。予約投稿が便利なのは、多少ずれても問題ないコンテンツに限ります。(臨時休業のお知らせが1日遅れて公開されると、告知の意味がありません)
予約投稿の一覧を定期的に確認する
投稿一覧で「予約済み」のフィルタを選ぶと、公開待ちの投稿だけを表示できます。月に1度この一覧を確認し、過去日付のまま残っている投稿がないかをチェックしてください。
最後に
予約投稿の失敗は、WordPressの故障ではなく仕様に起因する現象です。アクセスに依存するWP-Cronという仕組みを理解していれば、原因の特定も対策も難しくありません。根本対策はサーバー側のCronへの切り替え、当面の回避策はアクセスの多い時間帯への予約です。
Web管理では、月額1万円からWordPressサイトの運用保守を代行しています。WP-Cronの設定切り替え、予約投稿の動作確認、サイトの死活監視もあわせて対応可能です。「原因が分からないまま毎回手動で公開している」という状態のご相談も歓迎します。

