WordPress予約投稿が失敗する件
WordPressの予約投稿はWP-Cronが動作して予約した時間に投稿を公開する仕組みですが、失敗してしまうケースも多いです。実際に遭遇したので覚書。
WP-Cronの場合は予約投稿が動作するのは、公開日時までに誰かがサイトにアクセスし時点からです。
なので、公開日時までの間にアクセスがなかった場合は失敗に終ります。
他にもいくつか原因はあるようですが、Wordpressの基本的な設定(日本時間になっているか等)が完了していてキャッシュ系プラグインをOffにしていても失敗する場合は上記が原因の可能性が高いです。
ひっきりなしにアクセスがあるようなサイトであったり、キャッシュ系プラグインなどの利用がない場合であれば問題ないかもしれません。
Scheduled Post Triggerなどのプラグインを使うのも手軽で良いかもしれませんが、プラグインは必要最低限にしたいのと、なるべく確実に実行できる環境が良いな、ということでサーバー側で監視する設定に変更しました。15分おきに監視して予約投稿があった場合はスタンバイする設定です。これならキャッシュ系プラグインを利用していても問題ありません。以下さくらインターネットの場合です。
コントロールパネル→スクリプト設定→CRON設定からスケジュール追加します。
実行コマンド
/usr/local/bin/php /home/(ユーザー名)/www/(フォルダ名)/wp-cron.php > /home/(ユーザー名)/www/cron_log.txt 2>&1
実行日時は
月 *
日 *
時 *
分 */15
曜日は全て選択
「保存する」
これで15分後には(ユーザー名)/www/部分にcron_log.txtは生成されていて、ログの内容が空白だったら成功です。
成功を確認したらもうログの出力は必要ないので、
> /home/(ユーザー名)/www/cron_log.txt 2>&1
の部分は削除します。
また、Wordpressでの監視ももう必要ないのと混在するのは良くないのでwp-config.phpに以下を追加します。
define('DISABLE_WP_CRON', true);以上で完了です。
CRONの追加・設定はサーバーに負担がかかることもあるようなので、時間設定など気をつけながらの運用が肝心ですね。
設定後は必ず実際に予約投稿ができるかテスト投稿で確認しましょう。