WordPress予約投稿に失敗する原因を調べてみました。
私の場合は、wp-content/object-cache.php
が原因でした。
目次
WordPressの予約投稿に失敗した時に確認する4点
WordPressの予約投稿に失敗してしまいます。
失敗の再現性は100%です。
調査してみると、WordPressの予約投稿に失敗することは比較的よくあるケースのようです。
ネットで調べる限り、どこを調べてみても以下の点を調査するように書いてあります。
1. ベーシック認証を使っている場合
ベーシック認証を使っていると予約投稿に失敗するそうです。
2. キャッシュ系プラグインを使っている場合
WP File Cache
WP Super Cache
W3 Total Cache
Quick Cache
などのキャッシュ系プラグインを使っていると予約投稿に失敗するそうです。
3. プラグイン「WP Missed Schedule Fix Failed Future Posts」をインストール
予約投稿に失敗する場合の対処療法的プラグインです。
4. 代替Cronを使って対応する
wp-config.phpに以下の行を追加して試してみるとよいようです。
define(‘ALTERNATE_WP_CRON’, true);
私の場合、本質的な原因を調べたかったので、
「WP Missed Schedule Fix Failed Future Posts」
は使わずに原因を調べてみました。
1. ベーシック認証は使っていません。
2. キャッシュ系プラグインはすべて無効にしています。
4. wp.config.phpにdefine(‘ALTERNATE_WP_CRON’, true)を設定してみました。
これらのすべてを試してみても予約投稿に失敗してしまいます。
ちょっと困りました。
キャッシュ系プラグインを無効にしてもobject-cache.php、wp-cache-config.php、advanced-cache.php、db.phpがゴミで残ることがある
解決策がなくて困っていたのですが、フォルダをじっくり見てみるといくつか見慣れないファイルが残っていることがわかりました。
具体的には、以下のファイル群です。
/var/www/wordpress/wp-content/wp-cache-config.php
/var/www/wordpress/wp-content/advanced-cache.php
/var/www/wordpress/wp-content/object-cache.php
これらのファイルはキャッシュ系のプラグインを有効にした際に、pluginフォルダからwp-contentフォルダにコピーされるファイルです。
基本、キャッシュ系プラグインを無効にした場合、wp-contentフォルダから削除されるべきファイル群です。
これらのファイルですが、ひとつひとつ削除して、予約投稿との関連を調べてみました。
すると、以下のことが分かりました。
object-cache.phpが存在すると予約投稿に失敗する。
object-cache.phpが存在しないと予約投稿は成功する。
私の場合、キャッシュ系のプラグインを無効にしているので、
wp-cache-config.php、
advanced-cache.php、
object-cache.php
は何も考えずに削除しました。
という訳で、無事に予約投稿が成功するようになりました。
結論から言うと、予約投稿に失敗する際に調査するべき
「2.キャッシュ系プラグインを使っている場合」
に該当していたようです。
ただ、まさか、キャッシュ系プラグインを無効化した際にゴミファイルとして削除されずに残ることがあるとは想像していませんでした。
ちなみに、予約投稿だけでなく、今まで動作しなかった
BackWPupというバックアップ用のプラグインのスケジューラー
も動くようになりました。
キャッシュ系プラグインとwp-content以下のファイルの関係
WP File Cacheをインストールすると、
/var/www/wordpress/wp-content/object-cache.php
が作成されます。
WP Super Cache をインストールすると、
/var/www/wordpress/wp-content/wp-cache-config.php
/var/www/wordpress/wp-content/advanced-cache.php
が作成されます。
W3 Total Cacheをインストールすると、
/var/www/wordpress/wp-content/object-cache.php
/var/www/wordpress/wp-content/advanced-cache.php
/var/www/wordpress/wp-content/db.php
が作成されます。
これらのwp-contentフォルダにコピーされるファイルはプラグインを無効化した際に削除されるべきです。
ただ、タイミングなのか権限なのか、ゴミとして残ることはよくあるのではないかと思います。
その場合は、単にゴミとして残ったファイルを削除すればよいです。
WordPressの予約投稿、バックアッププラグインBackWPupのジョブとWordPress cron
WordPressの予約投稿やバックアッププラグインBackWPupが使っているスケジューラーはWordPress cronというものを使っています。
これはLinuxなどのOSが持っているcronと異なり疑似的なcronで、アクセスがあるたびにWordPressの内部時計を更新しているようです。
実際、nginxのaccess.logを見てみると以下のような記述があります。
1 2 3 |
aaa.bbb.ccc.ddd - - [18/Nov/2014:14:30:14 +0900] "POST /wp-cron.php?doing_wp_cron= 1416288613.5269489288330078125000 HTTP/1.0" 200 0 "-" "WordPress/3.9.2; http://urashita.com" "-" |
従いまして、アクセスが全くない場合、WordPress cronは動作せずに、結果として予約投稿などスケジュールされたジョブは実行されません。
ある程度、正確な時間にジョブを実行させたい場合は、WordPress cronを使わずにOSのcronを使う必要があります。
WordPressのおすすめ本
↓WordPressのおすすめ本はコチラ
コメント
[…] WordPress予約投稿に失敗する原因はwp-content/object-cache.phpだった | urashita.com (新窓) […]
[…] 原因不明でどうしたものかと思い、Google先生に「WordPress 予約投稿失敗」で検索をかけたら下の記事を見つけました。どうもキャッシュプラグインのphpファイルが悪さをしているようです。早速当該ディレクトリを調べてみることにしました。 WordPress予約投稿に失敗する原因はwp-content/object-cache.phpだった | urashita.com […]