WordPressの予約投稿は、記事を書いた時間ではなく読まれる時間に合わせて公開するための基本機能だ。設定自体は1分で終わる。ただし、この機能には有名な落とし穴がある。「時間が来ても公開されない」という事故だ。
つい先日、当サイトでも予約記事が公開されないまま何本も滞留する事故が起きた。原因を追いかけると、WordPressの予約公開が「時計」ではなく「来客」で動いているという、意外な仕組みに行き当たる。この記事では、基本のやり方から事故の直し方までを一度に片付ける。
設定は1分で終わる
手順から。記事を書き終えたら、エディタ右側の設定パネルで「公開」の行を見る。「今すぐ」と表示されている部分を押すと、カレンダーが開く。未来の日付と時刻を選ぶと、青い公開ボタンの文字が「予約投稿」に変わる。これを押せば予約完了だ。あとは指定時刻に自動で公開される。
つまずきどころは時刻の基準だけ。予約時刻は「設定 → 一般」のタイムゾーンに従う。海外製テーマの導入時などにここがUTC(世界標準時)のままだと、9時間ズレた時刻に公開される。日本のサイトなら「東京」になっているかを一度だけ確認しておこう。
learn.wordpress.org Scheduling Posts and Pages(公式チュートリアル) 一次情報。スクリーンショット付きの公式手順。英語だが画面を見ながらなら迷わない。予約公開は「時計」ではなく「来客」で動く
公式ドキュメントにも、はっきりこう書いてある。「WP-Cronは、ページが読み込まれるたびに予定タスクの一覧を確認することで動作する」。裏を返せば、誰も訪れないサイトでは、予約時刻が来ても何も起きない。公式が挙げる例では、14時に予約したタスクは、次の訪問が17時ならそのとき実行される。予定が消えるわけではないが、遅れるのだ。
過ぎる → 誰かがサイトを
訪れる → wp-cronが起きて
予定表を確認 → 溜まっていた記事を
公開する
図: WordPress標準の予約公開の流れ。訪問が起点になる点がすべての事故の根っこだ(筆者作成)
「公開されない」3大原因——当サイトの実例つき
この仕組みを知ると、事故のパターンも読めてくる。ひとつ目は単純にアクセスが少ないこと。始めたばかりのブログほど予約がズレるのは、これが理由だ。ふたつ目はキャッシュ。高速化の仕組みがページの完成品を直接返してしまうと、WordPress本体が動く機会そのものが減り、番人が起きられなくなる。
三つ目が、当サイトで実際に起きたやつだ。セキュリティ設定の変更で、サーバーがwp-cron.phpへのアクセス自体を遮断していた。チャイムの配線が切られた状態である。こうなると予約は永久に公開されない。管理画面のエラーは出ないので、気づくのはたいてい「あれ、朝の記事が出ていない」と青ざめた瞬間になる。
本命の直し方は「本物の時計」に任せること
応急処置としては、失敗した予約を15分ごとに探して公開し直してくれる定番プラグイン「Missed Scheduled Posts Publisher」がある。入れるだけで設定不要。まずはこれで止血できる。
ただ、筆者として勧めたい本命は、訪問頼みをやめてサーバーの定時実行(cron)に任せることだ。手順は2段階になる。まず、wp-config.phpに次の1行を足して内蔵の番人を休ませる。
define( 'DISABLE_WP_CRON', true );
次に、レンタルサーバーの管理画面にある「cron設定」で、15分おきにwp-cron.phpを実行するジョブを登録する。ConoHa WINGやエックスサーバーなど、国内の主要サーバーにはこの機能が標準で付いている。これで公開のきっかけが「来客」から「本物の時計」に変わり、アクセスゼロでも時刻どおりに記事が出る。
予約が安定したら、次は「何時に出すか」
仕組みが整うと、予約投稿はブログ運営のいちばん頼れる相棒になる。週末に書きためて平日の朝昼晩に流す。旅行中も更新が続く。当サイトも毎日の記事はほぼすべて予約で回している。
では何時に出すのが得か——これはデータで答えが変わる話なので、投稿頻度と時間帯の研究まとめに譲る。まずは今夜1本書いて、明朝8時の予約を入れてみてほしい。目覚めたときに記事が公開されている感覚は、一度知るともう手放せない。
出典: WordPress公式 Plugin Handbook「Cron」 / 同「Hooking WP-Cron Into the System Task Scheduler」 / Learn WordPress「Scheduling Posts and Pages」 / Missed Scheduled Posts Publisher(公式プラグインページ)





