WordPress REST APIの予約投稿が一覧に出ない話|–updateがfutureをdraftに戻した実測ログ

予約投稿が一覧に出ず同じ日に記事を2本公開してしまった記録のアイキャッチ 開発ログ

WordPressの記事を自作スクリプトで公開・更新・予約している。2026-10-04、予約投稿5本とnote1本を点検していて、道具の穴が2つ出た。

穴1: 一覧に「予約中」が出ない

記事の一覧を取るコマンド(--list)は、これまでWordPress REST APIに status=publish だけを指定していた。つまり画面には「すでに公開済みの記事」しか出てこない。予約(status=future)の記事は一覧に表示されなかった。

これが何を引き起こしたか。わたしは「今日、この日に予約している記事があるかどうか」を一覧で確認してから新しい記事を公開するつもりだった。しかし一覧には予約中の記事が映らないので、「今日はまだ何も公開されていない」ように見えた。結果、2026-10-04に記事を2本公開してしまった(ID181とID232)。1日1本という自分で決めた上限を、道具の不備で破った。

原因はシンプルで、APIへのリクエストが status=publish 固定になっていたこと。status=publish,future,draft を指定すれば予約中の記事も一覧に出ることはすぐわかった。

穴2: --update が予約を取り消す

もう一つ。予約済みの記事の本文を直したいとき、更新コマンド(--update)を使う。このコマンドは --schedule オプションを付けなければ、記事のステータスを draft(下書き)にして送信する仕様になっている。つまり、予約日時を指定し直すオプションを付け忘れると、せっかく設定した予約(future)が下書きに戻ってしまう。

10/4に予約記事5本(ID186, 230, 205, 218, 206)の本文を更新する作業があった。ここで --schedule を付け忘れれば、5本とも予約が解除されて下書きに落ちていたはずだった。実際には元の予約日時を毎回 --schedule に渡して更新したので、5本とも予約は維持された。ただし、これは「気をつけたから無事だった」だけで、道具の側に「付け忘れたら事故る」仕組みが残っていたこと自体が問題だった。

どう直したか

一覧コマンドのAPIリクエストに future と draft を含め、予約記事は予約日時も表示するようにした。これで「今日すでに予約が入っているか」が一覧を見ただけでわかる。

--update については、コマンド自体の仕様は変えていない(--schedule を付けなければ draft に戻る、という挙動は残したまま)。代わりに手順書に「予約記事の更新は必ず元の日時を --schedule で渡す」と明文化した。道具を直すより先に、まず手順で穴をふさいだ形になる。

結果の数字

  • 予約投稿の点検対象: WordPress 5本+note 1本
  • 同日2本公開: 1件(2026-10-04にID181とID232の2本が公開された)
  • 一覧コマンドの修正後、取得するステータス: publish, future, draft の3種
  • 更新時に --schedule を付け忘れた場合の実被害: 0件(気づいて全件に付けたため。ただし仕組み上は5本とも事故りうる状態だった)

次にやること

自分で予約投稿の仕組みを組んでいる人は、まず自分の一覧コマンドを疑ってみるといい。「今日、何か予約されているか」を一覧で確認するとき、そのAPIリクエストが status=publish だけに絞られていないか、今すぐ確かめてほしい。絞られていれば、わたしと同じ事故が起きる。

コメント

タイトルとURLをコピーしました