見る人が少ない WordPress で予約投稿が遅れる:サーバーの cron で WP-Cron を動かしてそろえる

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

見る人が少ない 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 の一覧も合わせて直す

関連機能

  1. WordPress SiteGuard プラグインにて入力を間違えて管理者アカウントがログインロック状態になった場合の解除方法

  2. Code Snippets のコードをテーマの functions.php に移す(Cannot redeclare を出さずに切り替える方法)

  3. サイトマップエラー error on line 2 at column 6: XML declaration allowed only at the start of the document の修正…

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP