見る人が少ない WordPress のサイトで、予約投稿やプラグインの定期の処理が遅れていました。
WordPress の予定を動かす仕組み(WP-Cron)は、だれかがサイトを開いたときに動くためです。
この記事では、エックスサーバーの cron で WP-Cron を動かす設定を、管理しているサイトでそろえたときのことをまとめます。
WP-Cron が遅れる理由
WP-Cron は、ページが開かれたときに「時間が来た予定」があるかをチェックして、あれば動かします。
そのため、1 日に数回しか開かれないサイトでは、予約投稿の時刻を過ぎても公開されなかったり、プラグインの定期の処理がたまったりします。
キャッシュのプラグインの画面で「予定が遅れています」という警告が出て、気づきました。
サーバーの cron の一覧を見て分かったこと
同じサーバーに入っているサイトの cron を、まとめて見直しました。
| 見つかったこと | どうなるか |
|---|---|
| cron が入っていないサイトがあった | 見る人が少ないと、予定が遅れる |
| 1 日 1 回だけ動かしているサイトがあった | 予約投稿が、次の日の朝まで出ないことがある |
| 閉じたサイトの行が残っていた | 動かす必要のない処理が、10 分ごとに動き続ける |
サイトを足したり閉じたりしたときに、cron の一覧まで直すのを忘れやすいと分かりました。
入れた形
サイトごとに、10 分ごとに WP-CLI で「時間が来た予定」を動かす形にそろえました。
/usr/bin/php8.3 /usr/bin/wp cron event run --due-now --path=/home/(ユーザー名)/(ドメイン)/public_html/(サイトのフォルダ) > /dev/null 2>&1
コマンドの /usr/bin/php8.3 と /usr/bin/wp は、エックスサーバーの場所です。ほかのサーバーでは場所が違うので、サーバーのマニュアルで確かめてください。
分の欄は、ほかの処理と同じ分に重ならないよう、サイトごとに少しずつずらしました(例:5,15,25,35,45,55)。
気をつけたこと
- エックスサーバーでは、cron で使う PHP のバージョンをパスで決める(
/usr/bin/php8.3)。ただのphpだと、管理画面でサイトに設定したバージョンではなく、サーバーの初期のバージョンで動くことがある - wp-config.php に
DISABLE_WP_CRONが入っているサイトは、サーバーの cron がないと予定がまったく動かない。入っているかを先にチェックする - 出力は捨てる形にしたので、cron の画面からは動いたかが分からない。次の日に、遅れていた予定がなくなったかで確かめる
- サイトを閉じたときは、cron の行も消す
まとめ
- WP-Cron は、サイトが開かれたときに動く。見る人が少ないサイトでは遅れやすい
- サーバーの cron で、10 分ごとに WP-CLI で動かす形にそろえると、見る人の数に関係なく動く
- サイトを足したとき・閉じたときは、cron の一覧も合わせて直す


