【WordPress】「予約投稿の失敗」エラーの対処方法|WP-Cronの仕組みとサーバーcron設定

予約した日時になっても記事が公開されない「予約投稿の失敗」は、WordPressのブログ運営でよく遭遇するトラブルです。この記事では、原因となるWP-Cronの仕組みから、本質的な解決策・代替手段・応急処置まで順番に解説します。

この記事でわかること

  • 予約投稿が失敗する根本原因(WP-Cronの仕組み)
  • サーバー側のcronに任せる本質的な解決策
  • サーバーへのアクセスがない場合のプラグインでの代替
  • 失敗した予約投稿を今すぐ公開する応急処置
スポンサーリンク

なぜ予約投稿は失敗するのか(WP-Cronの仕組み)

WordPressの予約投稿は、WP-Cron という仕組みが定期的にチェックし、予定時刻を過ぎた投稿を公開しています。ただし WP-CronOSの本物のcronとは違い、サイトへのアクセスがあったタイミングでしか動作しません。そのため、予約時刻の前後にアクセスが無いサイト(特に深夜など)では、チェック自体が走らず公開が次の訪問者が来るまで遅延します。

「失敗」というより「遅延」であることが多い
完全に投稿が消えるわけではなく、次に誰かがサイトにアクセスした瞬間にまとめて公開処理が走ることがほとんどです。ただし、サーバーのファイアウォールがwp-cron.phpへの内部リクエストをブロックしている場合は、アクセスがあっても本当に処理が走らないことがあります。

本質的な解決策:サーバー側の本物のcronに任せる

アクセス依存の疑似cronをやめ、サーバーの本物のcronで定期的に wp-cron.php を呼び出すようにすると、アクセスの有無に関係なく確実な時刻に処理が走ります。

wp-config.php:WP-Cronの疑似実行を無効化
define( 'DISABLE_WP_CRON', true );
crontab:5分ごとにwp-cron.phpを呼び出す
*/5 * * * * wget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
DISABLE_WP_CRONを設定したら、必ずcrontabもセットで用意する
DISABLE_WP_CRON だけ設定してサーバー側のcronを用意し忘れると、予約投稿がいつまでも公開されなくなります。エックスサーバーなど多くのレンタルサーバーでは、管理画面の「cron設定」からGUIで登録できます。crontabの書式(*/5 * * * * の意味など)を詳しく知りたい場合はcron・crontabで定期実行する方法(書式・PATHの罠)を参照してください。

サーバーへのアクセスがない場合の代替:プラグインを使う

共用サーバーの契約プランによってはcrontabを設定できないこともあります。その場合は「MWW Scheduled Post Trigger」というプラグインが代替になります(2026年7月時点でWordPress.org上で6万件以上のアクティブインストール・直近4か月以内に更新され継続的にメンテナンスされています)。インストールして有効化するだけで、予約投稿の公開漏れを検知・処理する仕組みが動き始めます。

  1. WordPress管理画面の「プラグイン」→「新規追加」を開く
  2. 検索欄に「MWW Scheduled Post Trigger」と入力する(「Scheduled Post Trigger」だけだと別のプラグインが先に表示される場合があるため正式名で検索)
  3. インストール後「有効化」をクリックする
手動でチェックを走らせたい場合
プラグイン有効化後、「設定」→「Scheduled Post Trigger」の画面にある「Trigger Missed Schedule Posts」ボタンから、公開漏れの手動チェックを実行できます。

今すぐ公開したい場合の応急処置

原因を調べている時間が無く、とにかく今すぐ公開したい場合は、該当の投稿を直接編集して公開してしまうのが最速です。

  1. 「投稿」一覧から失敗している記事を開く
  2. 公開ステータスを確認し、「今すぐ公開」ボタンがあればクリックする
  3. ボタンが無い場合は公開ステータスを「公開済み」に変更し、更新する

関連する定期実行の設定

サーバー側でcrontabを設定する際の書式やハマりやすい罠はLinux cron・crontabで定期実行する方法で詳しく解説しています。

よくある質問(FAQ)

QWordPressの予約投稿が実行されない主な原因は何ですか?
AWP-Cron が正常に動作していないことが主な原因です。WP-Cron はサイトへのアクセスをトリガーに動作する疑似cronのため、アクセスが少ないサイトでは遅延が発生することがあります。
QWP-Cronの代わりにサーバーのcronを使う方法は?
Awp-config.phpに define('DISABLE_WP_CRON', true); を追加してWP-Cronを無効化し、サーバーのcrontabで */5 * * * * wget -q -O /dev/null サイトURL/wp-cron.php?doing_wp_cron のような設定をします。
Q予約投稿が失敗した記事を手動で公開する方法は?
AWordPress管理画面で投稿の編集画面を開き、公開ステータスを「公開済み」に変更して更新します。または「今すぐ公開」ボタンをクリックして手動で公開できます。

まとめ

  • 原因:WP-Cronはアクセス依存の疑似cronのため、低アクセス時に遅延・失敗する
  • 本質的な解決策DISABLE_WP_CRON + サーバー本物のcron
  • サーバーアクセスがない場合:MWW Scheduled Post Triggerプラグイン
  • 今すぐ公開したい場合:投稿を手動で「公開済み」に変更

サーバー側でcronを設定できる環境であれば、プラグインに頼らずそちらを優先するのが最も確実な対策です。