WordPressにはスケジュール投稿機能がある。
時間を設定しておくと、だいたいその時間に投稿が公開される。
仕組みとしてはWordpressのページをアクセスされる度に時間をチェックし、投稿時間が過ぎていたら、投稿を公開するようになっている。
WordPressにアクセスされるごとにこのプロセスが走るので、その分だけページの表示に時間がかかる。
ようするにページアクセスをトリガとして、時間のチェックルーチンが動作するわけだ。
サーバがいじれる環境であればcronでこのプロセスを動かす事が出来る。
これならアクセスの度にプロセスが動くわけではないので、負荷を軽減する事が出来る。
これを設定していたのだが、先日から動作しなくなった。
何故動作しないのかよく分からなかったのだが、wp-cron.phpが実行出来ないとエラーが出ていた。
そこで以下のように記述を変更してエラーは出なくなった。
従来 /home/wordpress/wp-cron.php
修正 /usr/bin/php /home/wordpress/wp-cron.php
何かが変わってphpの場所を指定しなければいけなくなったようだ。
これで良いかなと思ったのだが、結果としてはうまく行かなかった。
cronでエラーは出ていないのだが、予約投稿は動作しない。
wp-cron.phpは実行に際してメッセージを殆ど出してこないので、何がどう動作していないのかが分からない。
Cache系プラグインが邪魔をしているという話がある。
私はW3 Total Cacheを使っているので、まずはこれをDisableにしたがダメ。
Disableにしても wordpress/wp-content/object-cache.php ファイルが消えずに残るので、手動でこれを消したがそれでもダメだった。
次に手動でwp-cron.phpを動かして更新のチェックをしてみると、以下の記述であればうまく行くことが分かった。
cronの記述↓
× /home/wordpress/wp-cron.php
× /usr/bin/php /usr/bin/php /home/wordpress/wp-cron.php
○ /usr/bin/curl -s https://サイトのURL/Wordpress/wp-cron.php
PHPファイルを直接叩くのはダメで、HTTP経由でアクセスするとうまく行った。
WordPressがアップデートされてwp-cron.phpの動きが変わったのだと思う。
どうしても予約投稿がうまく行かない場合、レンタルサーバなどでcronなどが自由にいじれない場合は、予約投稿の失敗を検出して再投稿してくれるプラグインがある。
対症療法的な無理矢理感が漂うのだが、こうした方法もあるという事で。

コメント