2026年5月20日
2026年5月20日
WordPressのWP-Cronが重い場合の解決方法【クロンジョブ最適化】
はじめに
WordPressのWP-CRONはページアクセスのたびに実行チェックが走るため、アクセスが多いサイトではサーバー負荷の原因になります。WP-Cronを無効化してサーバーの本物のCronに移行することが根本解決です。
WP-Cronの問題点
- ページリクエストのたびにCronチェックが実行される
- アクセスが集中する時間帯にCronが重なって処理が遅くなる
- バックアッププラグインなど重い処理がリクエスト中に実行される
- 低トラフィックのサイトではCronが実行されないことがある
解決手順
ステップ1:現在のCronジョブを確認
# WP-CLIで登録済みCronジョブを確認
wp cron event list
# 特定のジョブを手動実行
wp cron event run wp_scheduled_delete
管理画面で確認する場合は「WP Crontrol」プラグインが便利です。
ステップ2:WP-CronをWordPressで無効化
// wp-config.phpに追加
define('DISABLE_WP_CRON', true);
これだけではCronが実行されなくなるため、次のステップでサーバーCronを設定します。
ステップ3:サーバーCronを設定(推奨)
# crontabを編集
crontab -e
# 5分ごとにWordPressのCronを実行(WP-CLI使用)
*/5 * * * * cd /var/www/html && wp cron event run --due-now --quiet
# またはcurl(WP-CLIがない場合)
*/5 * * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
エックスサーバーの場合:
1. サーバーパネル → 「Cron設定」
2. 新しいCronタスクを追加
3. コマンド:/usr/local/bin/php /home/ユーザー/公開フォルダ/wp-cron.php
4. 実行間隔:5分
ステップ4:不要なCronジョブを削除
// functions.phpに追加(不要なイベントを削除)
add_action('init', function() {
// 例:特定のプラグインの不要なCronを削除
$timestamp = wp_next_scheduled('plugin_daily_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'plugin_daily_event');
}
});
# WP-CLIで特定のイベントを削除
wp cron event delete plugin_daily_event
ステップ5:Cronのタイムアウトを調整
// wp-config.phpに追加
define('WP_CRON_LOCK_TIMEOUT', 120); // デフォルト60秒を延長
注意事項
DISABLE_WP_CRONを設定したらサーバーCronを必ず設定すること- バックアッププラグイン・メール送信など定期実行が必要な処理が停止する
- サーバーCronの実行間隔は5〜15分が推奨
まとめ
WP-Cronによる負荷はdefine('DISABLE_WP_CRON', true)でWP-Cronを無効化し、サーバーのCronタスクでwp-cron.phpを5分ごとに実行することで解決します。エックスサーバーのようなCron設定機能があるホスティングでは管理画面から簡単に設定できます。
関連記事: