WordPressの予約投稿

WordPress の管理画面で「すぐに公開する」の部分の年月日時分を未来の日付にすると予約投稿をすることができる。

しかし時々失敗してしまうとのことで、原理原則から予約投稿の仕組みを読み解く。

予約投稿の仕組み

予約投稿は、cronなどでの動作ではなく、サイトへのアクセスをトリガーとした『疑似cron』になっている。 管理画面から予約投稿を設定すると、データベースにもこの予約データが登録される。

その後公開時間を過ぎた後サイトにアクセス(フロント側)された後にWordPressの処理で予約投稿のデータが有るかどうかを調べる。
あった場合は該当データのステータスを『公開』にする。

ということは、サイトにアクセスがないと予約投稿データは公開にならない。
これが予約投稿の失敗になる。

また、下記の原因も考えられる。

1.キャッシュによりCron処理が阻害されてしまう場合
 →キャッシュクリアを行うなど

2.ベーシック認証を利用しているサイト
 →Cronの動作がベーシック認証で弾かれてしまうことがある

参考:http://kotori-blog.com/wordpress/future_miss/

20180119追記

cronとは。。。

コンピュータに常駐し、決められた日時に決められた動作を自動実行してくれるプログラムのこと。
crontabでプログラムの動作のスケジュールを設定し、細かい曜日や日時を編集することができる。

KUSANAGI用のcron → ユーザー単位で設定している。

対応策として、crontabコマンドで対応できる。
$ crontab -e
エディタが開くので、

#1分おきに実行する場合には、
*/1 * * * * php /home/kusanagi/{profile_name}/DocumentRoot/wp-cron.php >/dev/null 2>&1

これは、1分おきに指定のDocumentRootのwp-cron.phpを実行し、その際にメールでの通知が行くのだがそれを/dev/null(いわゆるゴミ箱)に入れていくという処理。
これにより、予約投稿の期間が過ぎた場合には遅くとも1分以内には wp-cron.phpが実行され、予約投稿が完了することが可能になる。

【確認方法】
1.root権限にて
tail -f /var/log/cron

すると、1分毎にしっかりクーロンがまわっているか確認できる!!

2.DBを見てみる
対象のDocumentRootにて、
$ wp db cli
のwpコマンドにてデータベースに入る。

試しに予約投稿してみると、ステータスがfeatureになっているはず。
予約投稿をした際に生成される投稿IDを手がかりに確認してみる。
例えば、投稿IDが7832だったら
select * from wp_posts where ID=7832;
とSQL文を打つと「予約投稿ステータス」ならfeature「投稿ステータス」ならpublishが、post_statusのところに表示されます。
これでSQLも確認して証拠とするといい。

例えばこれなら、post=554なので、ID 554が割り振られている投稿ということ。

Leave a Reply

Your email address will not be published. Required fields are marked *