Meow Apps

記事 · 2026年9月7日

WP-Cron を手動で動かす方法と、放っておいても動くようにする方法

予約投稿が出ない、プラグインが深夜に何もしない。原因は WP-Cron が「時計」ではなく「訪問者」で動くからです。手動で叩く URL、WP-CLI、止まる四つの理由、本物の cron に置き換える一行。

WP-Cron は WordPress に内蔵されたスケジューラです。予約投稿、更新チェック、ニュースレターの送信キュー、データベースの自動掃除。全部この仕組みが「そろそろ実行する時間だ」と判断して動かしています。

問題は、その「そろそろ」の決め方です。WP-Cron は時計を持っていません。誰かがページを開いたときに、たまっている仕事がないかを確認するだけです。訪問者が来なければ、何も起きません。

「予約投稿が公開されなかった」「深夜に動くはずの処理が動いていない」という相談の大半は、ここに行き着きます。

今すぐ手動で動かす

いちばん簡単なのは、ブラウザでこの URL を開くことです。WordPress が起動して、期限の来た仕事を全部片づけて、白いページを返します。

https://あなたのサイト/wp-cron.php?doing_wp_cron

ターミナルからなら同じことを curl で。

curl -s https://あなたのサイト/wp-cron.php?doing_wp_cron

サーバーに WP-CLI があるなら、実行する前に「何が予約されているか」を見られます。こちらのほうがずっと便利です。

wp cron event list          # 予約されている仕事と、その時刻
wp cron event run --due-now # 期限切れの仕事を全部実行
wp cron test                # WP-Cron を起動できる状態か確認

ターミナルが無ければ、無料の WP Crontrol を入れてください。ツール → Cron Events に同じ一覧が出て、各行に「今すぐ実行」が付きます。仕事が詰まっているのか、そもそも予約されていないのかが、一目で分かります。

予約した処理が静かに止まる、四つの理由

よく見る順番で。

  1. ページキャッシュ。 これが最大の原因で、ほとんど誰も疑いません。キャッシュプラグインやホスティングのキャッシュが保存済みの HTML を返すので、WordPress 自体が起動しません。起動しなければ WP-Cron も動きません。アクセスの多いサイトほど、逆に何時間も予定を取りこぼします。
  2. アクセスが少ない。 一日十回しか訪問がなければ、cron も一日十回、しかもばらばらな時刻にしか動きません。
  3. ホスティングが無効にしている。 管理型のホスティングの多くは DISABLE_WP_CRON を設定して、代わりにサーバー側の cron を動かしています。それ自体は正しい設計ですが、あなたのサイトでその cron が本当に有効になっているかは、コントロールパネルで確認する必要があります。
  4. ロックが残っている。 WP-Cron は実行中にロックをかけます。処理の途中で落ちると、ロックが一分ほど残り、その間の全リクエストがキューを飛ばします。wp cron event run --due-now でロックごと片づきます。

放っておいても動くようにする

直し方は、スケジューラを訪問者から切り離すことです。まず wp-config.php で、ページ読み込み時の WP-Cron を止めます。

define( 'DISABLE_WP_CRON', true );

次に、サーバーに時計で叩かせます。cron が使える Linux のホストなら crontab -e で一行、五分おき。

*/5 * * * * curl -s https://あなたのサイト/wp-cron.php?doing_wp_cron > /dev/null 2>&1

WP-CLI があるなら、Web サーバーを経由しない形でも同じことができます。

*/5 * * * * cd /var/www/site && wp cron event run --due-now > /dev/null 2>&1

五分が無難な初期値です。時間に敏感なメールを送るサイトなら一分でも構いませんし、ブログなら十五分で十分です。訪問者はもう「たまたま期限が来た処理」に待たされませんし、キューは誰もいなくても動きます。

その前に一度、ホスティングのコントロールパネルを見てください。Kinsta、WP Engine、SiteGround、Cloudways などの管理型ホスティングは、すでにサーバー側の cron を回しているか、スイッチ一つで有効にできます。それで作業は終わりです。

サーバーに触れない場合は、外から叩く

cron の使えない共用サーバーなら、外部のサービスに URL を定期的に開いてもらいます。cron-job.org や EasyCron には無料枠があり、数分おきに一つの URL を叩く程度なら十分です。https://あなたのサイト/wp-cron.php?doing_wp_cron を登録して、DISABLE_WP_CRON はそのまま。それだけです。

「?doing_wp_cron」とは何か

WordPress やプラグインが URL の末尾に付けるこのパラメータは、「これは cron の起動リクエストです」という合図です。付いていると WordPress はページを描画せずにキューを処理し、値のタイムスタンプをロックとして使います。ログに残っても害はなく、予約する URL には必ず付けておいてください。

Meow Apps のプラグインで、これに依存しているもの

裏で動くものは全部そうです。Database Cleaner の自動掃除、Meow Mailer のニュースレター送信キュー、Meow Workflow の予約トリガー。「予定の時刻に何も起きない」と感じたら、プラグインの設定より先に wp cron event list を打ってください。十中八九、仕事はそこに並んで待っていて、起こす役の WP-Cron が寝ていただけです 🙂

この記事に関連するプラグイン

Database Cleaner

使われていないテーブルやリビジョンでデータベースが肥大化する問題を整理します。