公開していたはずのWordPressの記事が、ある日まとめて下書きに戻っていたり、完全削除される現象が発生しました。
ゴミ箱にも入っていないし、誰かが編集した形跡もありません。それなのに、複数の記事がほぼ同じ時刻に変更されている。「これはまずい!」と思い、不正アクセスやデータベースの不具合を疑い、アクセスログを一行ずつ確認し、WordPressの内部処理を追ってみたところ、原因はもっと身近なところにありました。
原因は、PublishPress Futureという期限管理プラグインと、WP-Cron、そしてAction Schedulerの組み合わせでした。
今回は実際に発生したトラブルをもとに、なぜ投稿が一斉に下書き・完全削除されたのか、その仕組みと対策を解説します。同じような現象に悩んでいる方の参考になれば幸いです。
複数投稿が同時刻に変更された理由
まず注目したのは、変更された投稿の更新時刻がほぼ同じだったことです。
人が管理画面で一つずつ操作した場合、数秒単位でも時刻はずれます。しかし今回は、まるでスイッチを押したかのように一斉に変更されていました。
さらに、通常の編集であれば増えるはずのリビジョンもありませんでした。アクセスログを確認すると、同じ時間帯にwp-cron.phpへのPOSTと、admin-ajax.phpへのリクエストが記録されています。
POST /wp-cron.php POST /wp-admin/admin-ajax.php?action=as_async_request_queue_runner
この組み合わせは、WordPressのスケジュール処理が実行されたときによく見られるパターン。つまり、人の操作ではなく、自動処理が動いた可能性が高いということになります。
WP-CronとAction Schedulerの仕組み
WordPressにはWP-Cronという仕組みがあります。これはサーバーの本来のcronとは違い、サイトへのアクセスをきっかけに動作する疑似的なスケジューラーです。
アクセスがなければ処理は実行されません。また、多くのプラグインはAction Schedulerという内部キューを使って非同期処理を管理しています。
期限付きのアクションはこのキューに登録され、wp-cronが動いたタイミングで実行されます。もし何らかの理由でwp-cronが止まっていれば、処理は実行されずに溜まり続けます。そして再びwp-cronが動いた瞬間、溜まっていたジョブがまとめて処理されるのです。
今回の現象は、まさにこの動きと一致していました。
PublishPress Futureのワークフローが影響した可能性
今回構築サイトでは、Wordpressプラグイン「PublishPress Future」を入れていました。
PublishPress Futureは投稿の公開後に自動でステータスを変更したり、カテゴリを更新したりできる便利なプラグインです。ただし「ワークフロー」を有効にしていると、投稿ごとに個別設定をしていなくても、公開されたすべての投稿にルールが適用されます。
例えば「公開から1週間後にDraftへ変更」というワークフローがあれば、その条件を満たした投稿は自動で下書きになります。個別に期限を設定していない投稿が対象になったのは、この仕組みによるものでした。知らないうちに全投稿へ自動ルールが登録されていたのです。
PublishPress Futureはデフォルトでワークフローが有効になっているので注意しなければなりません。
Automatically create actionsがOFFでも起きた理由
投稿タイプ設定でAutomatically create actionsをOFFにしていても、すでに登録されているスケジュールは消えません。
この設定はあくまで「今後作成する投稿に自動で期限を付けるかどうか」を制御するものなので、過去に登録されたアクションやワークフローの影響までは止められません。
そのため、以前に設定されたルールが有効なまま残り、条件が揃ったタイミングで一気に実行された可能性が高いと考えられます。
ベーシック認証とCron停止の関係
今回もう一つ大きな要素だったのが、ベーシック認証をサイトに適用していた点です。
環境によっては、ベーシック認証が有効な間、WordPressのループバックリクエストが正常に通らず、wp-cronが実行されないことがあります。その結果、期限処理がキューに溜まり続けます。そして認証を解除した瞬間、wp-cronが再び動き、溜まっていた処理がまとめて実行されるという流れです。
ログ上の時刻と挙動が一致しているため、この可能性は十分に考えられました。
安全に期限機能を使うための設定
期限機能を完全に無効するわけにはいかないため、全投稿に自動ルールを適用するワークフローを見直しました。
一般的なWordpressの運用であれば、ワークフローを削除し、投稿タイプのAutomatically create actionsをOFFにしたうえで、必要な投稿だけ手動で期限を設定する方法がもっとも安全だと思います。
期限到来時のアクションも、DraftやDeleteではなくPrivateを選ぶと影響を抑えられます。特にSEOを重視するサイトでは、誤って下書きや削除になるリスクは避けたいところです。
再発防止のために見直したいポイント
今回のようなトラブルを防ぐためには、定期的にScheduled Actionsを確認し、不要なワークフローが残っていないかチェックすることが大切です。
また、wp-cronが正常に動作しているかも確認しておきたいポイントです。必要であれば、サーバー側のcronでwp-cron.phpを実行する設定に変更するのも一つの方法です。
自動化は便利ですが、その動作条件を理解していないと、思わぬタイミングで影響が出ることがあります。
まとめ
今回の投稿一斉下書き・完全削除問題は、不正アクセスでもシステム障害でもなく、PublishPress FutureのワークフローとWP-Cronの挙動が重なった結果でした。
Automatically create actionsをOFFにしていても、過去に登録されたルールは残るため、ベーシック認証によるCron停止が引き金となり、溜まっていた期限処理が一気に実行されたと考えられます。
便利な自動化機能ほど、その仕組みを理解して使うことが大切です。設定を見直し、ワークフローを整理するだけで、同じトラブルは防げます。今回の経験が、WordPress運用の安心材料になれば幸いです。
コーヒーは体に良い?悪い?1日1杯の健康効果を科学的に解説します
コメントはこちら