WPで予約投稿の失敗になるとき

原因

予約投稿、プラグインの最新バージョンチェック、メルマガ配信など、WPが定期的に行っている自動処理、これらは定期的に行われるように正しく設定されていても、そのスケジュール日時になっても実行されないことがあります。

例えば、このようにツールからのリモート投稿が自動投稿されず「予約投稿の失敗」となってしまう経験はありませんか?

これは結論から言うと、WPへのアクセスが少ないのが原因です。

以下、詳しく説明していきますが、対処方法だけを知りたい方は最後のパートまで読み飛ばしてください。
※ただしそんなやり方は成長しないのでお勧めできないです。

WP(というプログラム)は、24時間ずっと動き続けている訳ではありません。
普段はアクセスがあるまで何もせずただ待機しているだけです。
アクセスがあったページの情報を出力したらプログラムは終了し、また次のアクセスまで待機します。
WPにいつアクセスしても、すぐにちゃんと表示されるので、ずっと動き続けているように勘違いしてしまう人も多いと思いますが、実はそうではないのですね。

では、どうやって予約投稿などのスケジュール処理ができるのかというと、
『●月●日●時●分●秒以降の最初のアクセスがあった時に●●を実行する』と設定されているからです。
『●月●日●時●分●秒になったら●●を実行する』ではないのです。

この違い分かりますか?
アクセスが増えてきて四六時中アクセスが発生していると、上の2つは実質同じタイミングで実行されますが、アクセスが無いと実行できないのですね。

でも、『●月●日●時●分●秒以降の最初のアクセスがあった時に●●を実行する』なら、遅れてでも投稿されていくのでは?
と気付いた人はなかなかいい筋です。

実は自動投稿の仕組みはもう少し複雑です。

記事自体に『●月●日●時●分●秒に公開』というデータを持たせておき、それとは別に自動投稿スケジュール設定で、
『●月●日●時●分●秒以降の最初のアクセスがあった時に、対象の記事があれば公開する』と設定されているからです。

そして、WPの仕様ではその対象は最後の1件です。
この仕様があるので、次の記事までにアクセスがあれば遅れて公開されますが、次の記事までにアクセスが無ければ「予約投稿の失敗」となるのです。

アドバイス

これを回避する対策を3つ紹介します。
1番から順にオススメですが、難易度も高くなります。

対策1:サーバーのcronを利用する

サーバーのタイマー機能である「cron」を利用する方法です。
●分間隔で●●を実行する、というような設定をする機能ですね。

エックスサーバーでの設定例

コマンド

/usr/bin/php7.4 /home/xs843257/example.com/public_html/wp-cron.php 1> /dev/null

PHPのバージョン、サーバーID、WPのパスなどは適時書き換えてください。

アドバイス

実行間隔は 15分にする。
つい1分間隔にしたくなりますが、それではサーバーに負荷を掛け過ぎです。
そもそも15分間隔なんて短い間隔で投稿しないので、WPの自動投稿チェックは15分間隔で十分です。
記事自体が2時間おきとか、6時間おきなら、cronも2時間間隔、6時間間隔でOKです。

サーバー会社によって設定方法は違いますが、サーバーの公式マニュアル内で「cron」と検索すれば設定方法が分かります。
各社設定画面が違いますし、今どきの公式マニュアルは親切に書かれているので、エックスサーバー以外でも挑戦してみてください。

WPの疑似cron機能を無効化

サーバーのcronを設定したら、WPの疑似cron機能を無効化にしましょう。

FTPソフトで、WP設置ディレクトリ直下にある wp-config.php をダウンロードします。

テキストエディタで開き、一番最後に次のコマンドを追記します。

// wp-cronを無効化
define('DISABLE_WP_CRON', 'true');

元の場所にアップロードします。

対策2:プラグイン『Scheduled Post Trigger』を使う

「Scheduled Post Trigger」は予約投稿に失敗した記事がないかをチェックして、自動的に投稿し直してくれるプラグインです。

冒頭「原因」で書いたように、WPの仕様では予約投稿の対象は最後の1件なのですが、このプラグインを入れると、公開対象から漏れてしまって「予約投稿の失敗」となってしまったものを対象として、遅れて公開してくれます。

ですから、予約通りの公開スケジュールにはなりませんが、投稿漏れは発生しなくなります。

また、このプラグインも「アクセスをきっかけとしてバックグラウンドで動き出す」ので、アクセスがまったく無いと動きません。

ただ、プラグインを入れるだけなので、対策1よりかなりハードルが低いです。

このプラグインには設定はありません。
ただインストールするだけでOKです。

対策3:巡回ジュール『SiteCrawler』を使う

CSVに登録したサイトを順番にアクセスしてくれるツールです。

サーバー側の設定は一切なく、巡回するサイトのURLをリストに書いてツールを起動しておくだけです。
デメリットはPCツールなので、ずっとPCを起動しておかないとダメだということです。


詳しい使い方はツールのマニュアルを参照してください。
ダウンロードサイトに特典として追加しています。

アドバイス

アクセスがそこそこ集まってくるようになれば、このツールに頼らなくても自動投稿されるようになりますので、対応1が難しい人は、それまでの対応だと割り切ってご利用ください。

タイトルとURLをコピーしました