CreaTools LogoCreaTools
Tips

WP-Cronが動かない原因と対処

2026-01-11

この記事が解決する状況

あなたの状況読むべきセクション
予約投稿が時間通りに公開されない今すぐ確認:Cronが動いているか
バックアップが自動実行されないWP-Cronの仕組み
プラグインの定期処理が動いていない確認1〜3
サーバーCronへの切り替え方を知りたい対処: サーバーCronに切り替える

「動いているかすら分からない」なら、まず「今すぐ確認」セクションを実行。


今すぐ確認:Cronが動いているか

30秒でできる確認方法。

方法1: ブラウザでアクセス

https://example.com/wp-cron.php?doing_wp_cron

白い画面(空白)が表示されればOK。エラーが出たら何か問題がある。

方法2: 予約投稿が溜まっていないか

管理画面 → 投稿一覧 → 「予約済み」フィルタ

過去の日時の予約投稿が残っていたら、Cronが動いていない証拠。


よくある失敗

「予約投稿が時間通りに公開されない」

WP-Cronは「誰かがサイトにアクセスした時」に動く。深夜に予約しても、朝までアクセスがなければ公開されない。


WP-Cronの仕組み

通常のcron: サーバーが指定時刻に実行
WP-Cron:    誰かがアクセスした時に実行
項目WP-CronサーバーCron
実行タイミングアクセス時指定時刻
低トラフィックサイト遅延する正確
サーバー設定不要必要

アクセスが少ないサイトでは、WP-Cronは信頼できない。


症状別の原因

症状原因
予約投稿が公開されないアクセスがない、またはCron無効化
数時間〜翌日に公開される低トラフィック
全く動かないDISABLE_WP_CRONがtrue
プラグインの定期処理が動かない同上

確認1: WP-Cronが無効化されていないか

// wp-config.php を確認
define('DISABLE_WP_CRON', true);  // これがあると無効

意図せず無効化されていることがある。サーバーCronに切り替え済みなら正常。

無効化されているのにサーバーCronが設定されていない → 完全に動いていない


確認2: Cronイベントの状態

WP Crontrolプラグインで確認

  1. プラグイン「WP Crontrol」をインストール
  2. ツール → Cron イベント
確認項目正常な状態
予約投稿のイベントpublish_future_post が存在
次回実行時刻過去日時になっていない

「次回実行」が過去のまま溜まっていたら、Cronが動いていない証拠。


確認3: 手動でCronを実行

ブラウザで直接アクセス:

https://example.com/wp-cron.php?doing_wp_cron

これで予約投稿が公開されれば、WP-Cron自体は正常。トリガーされていないだけ。


対処: サーバーCronに切り替える

WP-Cronを無効化し、サーバー側で定期実行する。最も確実な方法。

手順1: WP-Cronを無効化

// wp-config.php に追記
define('DISABLE_WP_CRON', true);

手順2: サーバーCronを設定

Xserverの場合

サーバーパネル → Cron設定 → 追加

項目設定値
*/15(15分ごと)
*
*
*
曜日*
コマンドwget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron"

さくらサーバーの場合

コントロールパネル → CRONの設定

*/15 * * * * /usr/bin/wget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron"

ConoHa WINGの場合

コントロールパネル → サイト管理 → Cron設定

*/15 * * * * wget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron"

SSHでcrontab直接編集

crontab -e
*/15 * * * * wget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron" > /dev/null 2>&1

実行間隔の決め方

サイト種別推奨間隔
一般的なブログ15分
予約投稿を多用5分
ECサイト・会員サイト1〜5分
ほぼ静的なサイト30分〜1時間

間隔を短くしすぎるとサーバー負荷になる。 用途に応じて調整。


curlとwgetの違い

どちらでも動作する。サーバーにインストールされている方を使う。

# wget版
wget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron"

# curl版
curl -s "https://example.com/wp-cron.php?doing_wp_cron" > /dev/null

確認方法:

which wget  # パスが表示されればインストール済み
which curl

事故事例:Cron設定の落とし穴

事例1: 無効化だけして設定忘れ

状況: wp-config.phpにDISABLE_WP_CRONを追加したが、サーバーCronを設定し忘れた
結果: 予約投稿、バックアップ、全ての定期処理が停止
対処: サーバーCronを設定するか、DISABLE_WP_CRONを削除

事例2: Basic認証で弾かれる

状況: ステージング環境にBasic認証をかけている
結果: サーバーCronからのアクセスが401で弾かれる
対処: URLに認証情報を含める
wget -q -O /dev/null "https://user:pass@example.com/wp-cron.php?doing_wp_cron"

事例3: マルチサイトで一部だけ動かない

状況: WordPressマルチサイトでメインサイトのCronだけ設定
結果: サブサイトの予約投稿が動かない
対処: 各サイトのURLでCronを設定

トラブルシューティング

症状原因対処
Cron設定したのに動かないコマンドのパスが違うwhich wgetでパス確認
SSL証明書エラー自己証明書--no-check-certificateオプション追加
Basic認証で弾かれる認証付きサイトURLに認証情報を含める
実行されているか不明ログがない出力先を指定してログ確認

実行ログを残す場合

*/15 * * * * wget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron" >> /home/user/cron.log 2>&1

WP-Cronに依存するプラグイン

以下のプラグインはWP-Cronが正常でないと機能しない:

  • 予約投稿(WordPress標準)
  • バックアッププラグイン(UpdraftPlus等)
  • メール送信キュー(SMTPプラグインのリトライ)
  • キャッシュの定期削除
  • 定期的なDB最適化

「動かない」と思ったらWP-Cronを疑う。


まとめ

  • WP-Cronは「アクセス時」に動く仕組み
  • 低トラフィックサイトでは遅延・未実行が起きる
  • サーバーCronに切り替えれば確実に動く
  • DISABLE_WP_CRONを設定してからサーバーCronを追加
  • 実行間隔は15分が一般的、用途に応じて調整
  • 無効化だけしてサーバーCron未設定は最悪のパターン

関連記事