WordPressの予約投稿(Scheduled Post)が特定の条件下で投稿されずMissed Scheduleとなってしまう問題に対処しました。
目次
予約投稿が投稿できない
現在開発中のWordPressサイトではフロントエンドから将来公開予定の投稿を登録できる仕様があります。
そのこと自体は問題ではなく、期待通りスケジュール日時が来ると公開されるのですが、問題はいったん作成した予約投稿をフロントエンドから編集し、公開日時を現在より過去に変更するとMissed Scheduleとなってしまう現象が発生してしまいました。
バックエンドで投稿を同様に編集した場合は問題なくScheduledからPublishedに変わるのですが、なぜかフロントエンドではPublishedにならずMissed Scheduleエラー状態となってしまいます。
この状態になってしまうとバックエンドに移動しないと投稿ができません。ユーザーにはバックエンドには行かせたくないのでフロントエンドで対処する方法を見つけるしかありません。
なぜMissed Scheduleとなってしまうのか
原因はいろいろ考えられるのですが、最も多い理由はサーバーのクローン(cron)が正しく動作せずに投稿が過去の日時にもかかわらずFuture Postとなってしまったままで公開されないということです。
このエラーを正して再度Cronを動かしてやれば投稿されるはずです。
簡単な解決方法
最初はサーバーサイドでCron設定をいろいろといじってみたのですが、ネットを検索をすると同様の問題がレポートされておりこの問題を解決するWordPressプラグインも見つけました。
Scheduled Post Trigger
このプラグインはアクティベートすれば特に何の設定も不要で、サーバー側に対してアクセスがあった時点で起動し、Missed Scheduleの投稿を公開してくれるというものです。
実際に導入してみましたが、私の環境ではうまく動いてくれませんでした。
プラグインの設定は特に不要ということなので現在のサーバーとの相性かと思います。
Missed Scheduled Post Publisher
こちらのプラグインも同様に特に設定は不要です。ただし、Scheduled Post Triggerがサーバーへのアクセスがトリガーとなって投稿されるのに対して、15分ごとにCronを強制的に作動させてMissed Scheduleとなった投稿を再投稿させるという仕組みです。
15分というタイムラグが発生しますが、幸い私の環境でも正常に動作しました。
まとめ
フロントエンドからの投稿作成、スケジュールポストの投稿、投稿時間を過去に変更という少し特殊な条件で発生するバグですがなんとかうまく回避することができました。
長年WordPressを使っていますがMissed Scheduleというエラーは今回初めて対応しました。
同様の問題を抱えられている場合はこれらのプラグインを試してみる価値はあると思います。