コンテンツへスキップ

「スケジュール投稿が公開されない」の正体 — WP-CLI で WP-Cron の中身を見る

公開予約した記事が指定時刻になっても公開されない。プラグインの定期メール通知が届かない。アクセスが少ない時間帯にこうした現象が起きやすいのには理由がある。

補足: WP-Cron は WordPress に組み込まれた予定実行の仕組み。「指定した時刻に処理を実行する」という点では OS の cron と似ているが、実態は大きく異なる。

WordPress の WP-Cron は、サーバー OS の本物の cron とは仕組みが違う。WordPress はページが読み込まれるたびに「予定されているタスクで実行時刻を過ぎているものがあるか」をチェックし、あれば実行する。これは「疑似 cron」と呼ばれる方式で、アクセスがないと実行されないという弱点を持つ。深夜のアクセスが少ない時間帯に予約投稿を設定すると、次にサイトへのアクセスが来るまで投稿が公開されないことがある。

WP-CLI を使うと、この見えない仕組みの中身を一覧表示し、必要な処理だけを今すぐ実行できる。

予定されているタスクを一覧する

wp cron event list
hook next_run_gmt recurrence
publish_future_post 2026-06-20 03:00:00
wp_version_check 2026-06-20 06:12:00 12 hours
wp_scheduled_delete 2026-06-21 00:00:00 daily

hook は処理の識別名、next_run_gmt は次回実行予定時刻(UTC)、recurrence は繰り返し間隔。publish_future_post が予約投稿の公開処理で、これが現在時刻を過ぎているのに残っているなら、ページアクセスが発生していないために実行されていない状態だと分かる。

今すぐ実行する

特定のタスクをその場で動かしたい場合:

# 特定の hook を今すぐ実行する
wp cron event run publish_future_post

# 実行時刻を過ぎている全タスクをまとめて実行する
wp cron event run --due-now

--due-now は「予定時刻を過ぎているのに未実行のタスク」をまとめて検出して実行する。サイトへのアクセスを待つ代わりに、この 1 行で予約投稿の公開やメール通知などを確実に動かせる。

WP-Cron 自体が動いているか確認する

wp cron test

このコマンドは WP-Cron のスケジューラ自体が機能しているかを検証する。wp-config.phpdefine('DISABLE_WP_CRON', true); が設定されているサイトでは、疑似 cron 自体が無効化されているため wp cron event run --due-now を手動または別の仕組みから定期的に呼び出す必要がある。

利用できる繰り返し間隔を確認する

wp cron schedule list
name display interval (秒)
hourly Once Hourly 3600
twicedaily Twice Daily 43200
daily Once Daily 86400

プラグインが独自の繰り返し間隔(例: 15 分おき)を登録している場合もこの一覧に表示される。意図しない頻度で動いているタスクがあれば、ここで気付ける。

本物の cron に切り替える

DISABLE_WP_CRONtrue に設定した上で、サーバー OS の crontab から定期的に WP-CLI を呼び出す構成にすると、ページアクセスに依存せず確実な時刻に実行される。

# crontab の例(5 分おきに実行)
*/5 * * * * cd /path/to/wordpress && wp cron event run --due-now > /dev/null 2>&1

wp-cron.php への HTTP リクエストを curl で叩く構成もよく使われるが、WP-CLI から直接呼び出す方式は HTTP のオーバーヘッドがなく、wp-cron.php という公開エンドポイントへの外部アクセスを許可する必要もない。

実行後の確認

# 公開されたはずの予約投稿のステータスを確認
wp post list --post_status=publish --orderby=date --order=DESC --posts_per_page=3

# 残っているタスクがないか再確認
wp cron event list

publish_future_post が一覧から消えていれば、対象の投稿はすでに公開処理が完了している。

まとめ

知りたいこと コマンド
予定タスクの一覧 wp cron event list
特定タスクを今すぐ実行 wp cron event run <hook>
遅延中の全タスクを実行 wp cron event run --due-now
WP-Cron 自体の動作確認 wp cron test
利用可能な繰り返し間隔 wp cron schedule list

WP-Cron が「ページアクセス頼みの疑似 cron」であることを知っていれば、「公開予約が反映されない」という現象に遭遇したときに、まず wp cron event list で状況を確認するという一手が浮かぶ。これは、管理画面に入れなくなったときの WP-CLI 復旧シリアライズ安全な置換と同じく、WordPress の管理画面という一段上のレイヤーではなく、その下で動いている仕組みそのものに直接アクセスできることが WP-CLI の価値になっている一例といえる。