WordPress 予約投稿が失敗する原因を徹底解説【原因別対策付き】

WordPressには、指定した日時に記事を自動公開できる「予約投稿」機能があります。
あらかじめ記事を書いて公開日時を設定しておけるため、ブログやWebサイトを計画的に運営するうえで非常に便利な機能です。

ところが、ときどき「予約投稿したはずなのに公開されていない」「予約時刻を過ぎても記事が公開されない」といったトラブルが発生することがあります。

このような場合、WordPressそのものが壊れているとは限りません。
予約日時の設定、WP-Cronの動作、プラグインや独自コード、キャッシュなど、いくつかの原因が考えられます。

この記事では、WordPressの予約投稿が失敗したときに確認したいポイントを、初心者にもわかりやすく順番に解説します。

1 予約投稿が失敗したときに最初に確認したい3つのポイント

予約投稿が正常に公開されない場合、まず次の3点を確認しましょう。

  • WordPressの予約日時・タイムゾーンが正しいか
  • WP-Cronが正常に動作しているか
  • 実際には公開済みで、キャッシュによって古いページが表示されていないか

特に多いのが、WP-Cronが予定した時刻に実行されていないケースです。

2 WordPressの予約投稿はWP-Cronで動いている

WordPressでは、予約投稿をはじめとする時間指定の処理にWP-Cronという仕組みが使われています。

一般的なサーバーのcronは、設定された時刻になるとサーバー側から自動的に処理が実行されます。

一方、WordPressのWP-Cronは通常、サイトへのアクセスをきっかけに、実行予定時刻を過ぎた処理がないか確認する仕組みです。

そのため、アクセスの少ないサイトでは、予約した時刻になってもWP-Cronがすぐに実行されず、予約投稿の公開が遅れることがあります。

たとえば午前10時に記事を予約していても、その時間帯にサイトへのアクセスがほとんどなければ、10時ちょうどに公開されない場合があります。

3 原因① 予約日時やタイムゾーンが間違っている

まず確認したいのが、WordPressのタイムゾーン設定です。

WordPress管理画面から、

「設定」→「一般」→「タイムゾーン」

を確認してください。

日本国内向けのサイトであれば、通常は「東京」または日本時間に相当する設定を使用します。

予約投稿で指定する日時は、WordPress側で設定されているタイムゾーンを基準に扱われます。

たとえば管理者が日本にいるのにWordPressが別のタイムゾーンになっていると、管理者が想定している公開時刻と実際の予約時刻がずれる可能性があります。

3.1 確認するポイント

  • WordPressのタイムゾーンが運営地域と合っているか
  • 予約した日付が正しいか
  • 午前・午後や24時間表記を間違えていないか
  • 予約時刻が本当に未来の日時になっているか

「サーバーのタイムゾーンとWordPressのタイムゾーンを必ず同じにする」ということではなく、まずWordPressのサイト設定として正しいタイムゾーンになっているかを確認することが重要です。

4 原因② 投稿が正しく「予約済み」になっていない

日時を変更しただけで、予約投稿として保存できていない場合もあります。

投稿編集画面で未来の日時を指定したあと、予約を確定するボタンを押し、投稿一覧で予約状態になっているか確認してください。

使用しているWordPressのエディターやバージョンによって画面表示は異なりますが、重要なのは未来の公開日時が設定され、投稿が予約状態になっていることです。

投稿一覧を開き、対象の記事が予約投稿として保存されているか確認すると分かりやすいでしょう。

5 原因③ WP-Cronが正常に動いていない

予約日時が正しく設定されているのに記事が公開されない場合は、WP-Cronが正常に動作していない可能性があります。

WP-Cronは予約投稿だけではなく、WordPress内部のさまざまな定期処理にも利用されています。

5.1 よくある症状

  • 予約時刻を過ぎても投稿が予約状態のままになっている
  • 予約投稿が毎回数分から数十分遅れる
  • アクセスすると突然予約投稿が公開される
  • 複数の予約投稿で同じ問題が起きる

特にアクセス数が少ないサイトでは、WP-Cronの実行タイミングが遅くなる可能性があります。

6 WP-Cronが無効化されていないか確認する

まず wp-config.php を確認します。

次の記述がある場合、

define( 'DISABLE_WP_CRON', true );

WordPressが通常のページアクセス時にWP-Cronを起動する仕組みは無効化されています。

この設定自体が間違いというわけではありません。
サーバー側のcronからWP-Cronを実行する構成では、むしろこの設定を使うことがあります。

問題なのは、WP-Cronを無効化したにもかかわらず、代わりとなるサーバー側のcronが設定されていない場合です。

この状態では、予約投稿などの定期処理が正常に実行されなくなる可能性があります。

7 アクセスの少ないサイトではサーバー側のcronを利用する方法もある

予約投稿をより安定して実行したい場合は、WordPress標準のアクセス依存型WP-Cronではなく、サーバー側のcronから定期的に wp-cron.php を呼び出す方法があります。

その場合、まず wp-config.php に次の設定を追加します。

define( 'DISABLE_WP_CRON', true );

そのうえで、サーバー側のcronにWP-Cronを呼び出す処理を設定します。

たとえばLinux系のcronで、5分ごとに実行する例は次のようになります。

*/5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

example.com の部分は、自分のWordPressサイトのドメインに変更します。

この例では5分間隔でWP-Cronを確認するため、予約時刻によっては公開まで数分程度の差が出る可能性があります。

「5分ごとのcronを設定すれば予約時刻ぴったりに必ず公開される」という意味ではありません。

公開時刻の精度が重要なサイトでは、サーバー負荷なども考慮しながらcronの実行間隔を検討してください。

なお、cronの設定方法はレンタルサーバーによって異なります。
利用しているサーバーの管理画面や公式マニュアルを確認してください。

8 原因④ キャッシュによって公開されていないように見える

予約投稿そのものは正常に公開されているのに、閲覧者側では新しい記事が見えない場合があります。

この場合は、WordPressの予約投稿ではなくキャッシュが原因かもしれません。

たとえば、

  • WordPressのキャッシュプラグイン
  • レンタルサーバーのキャッシュ機能
  • CDNのキャッシュ
  • ブラウザキャッシュ

などによって、公開前に生成された古いページが表示され続けることがあります。

8.1 確認方法

まずWordPress管理画面の投稿一覧を確認し、対象記事のステータスを確認します。

記事がすでに公開済みになっているのであれば、予約投稿自体は成功している可能性が高くなります。

その場合は、利用しているキャッシュプラグインやサーバーキャッシュ、CDNなどのキャッシュを削除して確認します。

シークレットウィンドウや別のブラウザから確認する方法もあります。

9 原因⑤ プラグインや独自コードがWP-Cronに影響している

WP-Cronが正常に動かない場合、プラグインや独自コードが影響していることもあります。

特に、

  • 予約投稿を制御するプラグイン
  • 投稿ステータスを変更するプラグイン
  • 自動投稿・自動更新プラグイン
  • cron処理を追加するプラグイン
  • functions.phpに追加した独自コード
  • 独自制作したWordPressプラグイン

などを使用している場合は確認が必要です。

最近プラグインを追加したあとから予約投稿が動かなくなった場合は、そのプラグインが関係している可能性があります。

9.1 確認するときの注意

本番サイトでいきなりプラグインをすべて停止すると、表示やお問い合わせフォームなどに影響することがあります。

可能であればバックアップを取得したうえで、テスト環境やステージング環境で確認するのがおすすめです。

10 原因⑥ セキュリティ設定によってwp-cron.phpへのアクセスが妨げられている

セキュリティ対策を強化しているWordPressでは、wp-cron.php の実行に必要な通信まで制限してしまう場合があります。

たとえば、

  • .htaccessによるアクセス制限
  • WAF
  • セキュリティプラグイン
  • Basic認証されたテストサイト
  • 外部通信を制限するサーバー設定

などを使用しているサイトでは注意が必要です。

予約投稿だけでなくWordPressの定期処理全般がおかしい場合は、セキュリティ設定やサーバーログも確認してみましょう。

11 WP-CLIが使える場合はWP-Cronを確認できる

サーバーでWP-CLIを使用できる場合は、コマンドラインからWP-Cronの状態を調べる方法もあります。

WP-Cronの起動システムをテストするには、次のコマンドがあります。

wp cron test

登録されているcronイベントを確認する場合は、

wp cron event list

を利用できます。

この方法は初心者には少し難しいですが、WordPressの保守や開発を行っている場合は、予約投稿トラブルの原因調査に役立ちます。

12 独自プログラムから予約投稿を登録している場合

プラグイン開発やテーマ開発で wp_insert_post() を使って予約投稿を作成している場合は、通常の管理画面からの予約投稿とは別にコードの確認が必要です。

予約投稿として登録する場合、post_statusfuture を指定するだけではなく、未来の公開日時をpost_dateに指定する必要があります。

たとえば次のような形です。

$post_id = wp_insert_post(
	array(
		'post_title'   => '予約投稿のテスト',
		'post_content' => '予約投稿の記事本文です。',
		'post_status'  => 'future',
		'post_date'    => '2026-08-20 10:00:00',
		'post_type'    => 'post',
	),
	true
);

post_statusfuture にしているにもかかわらず、公開日時が適切に設定されていないと、意図した予約投稿になりません。

また、save_post や投稿ステータス変更関連のフックで独自処理を追加している場合は、その処理が予約状態を変更していないか確認してください。

13 カスタム投稿タイプでも予約投稿は使える?

カスタム投稿タイプでも、設定や実装が適切であればWordPressの予約投稿機能を利用できます。

ただし、独自プラグインやテーマ側で投稿ステータスを変更していたり、保存時に独自処理を行っていたりすると、通常投稿では問題がなくてもカスタム投稿タイプだけ予約処理がおかしくなることがあります。

カスタム投稿タイプだけで問題が起きている場合は、

  • 投稿保存時の処理
  • post_statusの変更処理
  • save_post関連のフック
  • 独自の公開処理

などを確認しましょう。

14 PHPのメモリや実行時間はむやみに変更しない

予約投稿が失敗したときに、

memory_limit = 256M
max_execution_time = 300

などへ変更すれば直る、と紹介されていることがあります。

しかし、通常の予約投稿だけで非常に大きなメモリや長いPHP実行時間が必要になるわけではありません。

PHPエラーやメモリ不足が実際に発生しているのであれば対処が必要ですが、原因を確認せずにPHP設定を大きくすることはおすすめできません。

まず、

  • WordPressのデバッグログ
  • サーバーのPHPエラーログ
  • レンタルサーバーのエラーログ

などを確認し、実際にエラーが発生しているか調べましょう。

15 外部サービスとの連携を使っている場合

ZapierやIFTTTなどの外部サービスを利用していても、それだけでWordPressの予約投稿が失敗するわけではありません。

ただし、外部サービスや独自APIが、

  • 投稿ステータスを書き換える
  • 投稿日時を書き換える
  • 公開時に別の処理を実行する
  • 予約投稿を独自処理に置き換える

といった動作をしている場合は、予約投稿に影響する可能性があります。

外部連携を導入したあとから問題が発生した場合は、その処理内容やログを確認してください。

16 「予約投稿に失敗しました」と表示されたときの確認順序

原因が分からない場合は、次の順番で確認すると効率的です。

  1. 投稿の予約日時を確認する
  2. WordPressのタイムゾーンを確認する
  3. 投稿一覧で予約状態になっているか確認する
  4. 予約時刻を過ぎたあと、投稿が公開済みになっているか確認する
  5. 公開済みならキャッシュを削除して確認する
  6. 公開されていなければWP-Cronの動作を確認する
  7. DISABLE_WP_CRON の設定を確認する
  8. サーバー側のcronを使っている場合は設定を確認する
  9. 最近追加・変更したプラグインや独自コードを確認する
  10. 必要に応じてPHPやサーバーのエラーログを確認する

いきなりPHP設定やテーマを変更するのではなく、簡単に確認できるところから一つずつ原因を切り分けるのがポイントです。

17 アクセスの少ないWordPressサイトはサーバーcronも検討する

アクセス数の多いサイトであれば、通常のWP-Cronでも頻繁に実行されます。

一方、

  • 開設したばかりのサイト
  • アクセス数の少ない企業サイト
  • 更新頻度の低いサイト
  • 決まった時間に記事を公開したいサイト

などでは、アクセスをきっかけに動くWP-Cronより、サーバー側から一定間隔で実行する方式を検討する価値があります。

ただし、サーバーcronへ変更する場合は、

define( 'DISABLE_WP_CRON', true );

だけを追加して終わりにしてはいけません。

必ず代わりとなるcron処理をサーバー側に設定する必要があります。

18 まとめ:予約投稿が失敗したらまずWP-Cronを確認しよう

WordPressの予約投稿が予定時刻に公開されない場合、まず確認したいのは次のポイントです。

  • 予約日時が正しく設定されているか
  • WordPressのタイムゾーンが正しいか
  • 投稿が予約状態になっているか
  • WP-Cronが正常に実行されているか
  • DISABLE_WP_CRONが設定されていないか
  • サーバーcronを使用している場合、その設定が正常か
  • 公開済みなのにキャッシュで古いページが表示されていないか
  • プラグインや独自コードが投稿ステータスを変更していないか

特に重要なのは、WordPressのWP-Cronは一般的なサーバーcronとまったく同じ仕組みではないという点です。

通常のWP-Cronはサイトへのアクセスをきっかけに予定された処理を確認するため、アクセスの少ないサイトでは予約投稿が予定時刻より遅れることがあります。

そのようなサイトで予約投稿をより安定して運用したい場合は、サーバー側のcronから定期的にWP-Cronを実行する方法も検討してみましょう。

予約投稿のトラブルは、原因を一つずつ確認すれば解決できるケースが多くあります。
まずはタイムゾーンと予約日時を確認し、次にWP-Cronの動作、キャッシュ、プラグインや独自コードの順番で切り分けてみてください。