HUSKY - Product Filter for WooCommerce

HUSKYターボモード:自動cron更新が失敗する理由とその修正方法

問題点

ユーザーから、WOOFのターボモードにおける自動ファイル再生成が正常に動作しないとの報告があります。

症状:

  • ターボモードを「毎日cron」スケジュールで有効化
  • WordPressのcronジョブ woof_turbo_do_recreate_file が作成されない
  • 手動でのファイル生成は正常に動作
  • 自動更新で部分的/空のファイルが生成される
  • ファイル再生成が完了しないように見える

影響:

  • 顧客に古いフィルター件数が表示される
  • ユーザー体験の低下(存在しない商品が表示される)
  • 毎日の手動操作が必要

発生理由:2つの根本原因

1. ファイルクリアの競合状態

WOOFがターボファイルを再生成する際、以下の処理を行います。

// Step 1: Clear the file
file_put_contents($turbo_file, ''); 

// Step 2: Write new data (takes time)
foreach ($products as $product) {
    // Heavy processing for each product...
    file_put_contents($turbo_file, $data, FILE_APPEND);
}

問題点:
サイトに多数の商品(1000件以上)がある場合、ステップ2に60~120秒かかることがあります。PHPの max_execution_time(通常30~60秒)を超えると、スクリプトは書き込み途中で終了し、ファイルが空または部分的な状態になります。

2. WordPress cronは本物のcronではない

WordPress cron(wp-cron.php)には重大な制限があります。

実行が保証されない – 誰かがサイトにアクセスしたときのみトリガー
ブロックされる可能性がある – キャッシュプラグインが実行を妨げる可能性
長時間タスク不可 – PHP実行制限により強制終了
タイミングが不確実 – 遅延実行や未実行の可能性

実際のシナリオ:
サイトへのアクセスが主に営業時間(9時~18時)に集中しているとします。ターボ再生成を午前3時にスケジュールしても、午前3時には誰もアクセスせずwp-cron.phpが起動されないため、実行されません

信頼性のある解決策:サーバーサイドcron

WordPress cronを、サイトへのアクセスに依存しない実際のサーバーcronに置き換えます。

ステップ1:WordPress cronを無効化

wp-config.php に追加(/* That's all, stop editing! */ の前に):

/**
 * Disable WordPress cron - we'll use server cron instead
 */
define('DISABLE_WP_CRON', true);

ステップ2:サーバーcrontabエントリを追加

オプションA:PHP CLIを使用(推奨)

# Open crontab editor
crontab -e

# Add this line (runs daily at 3 AM)
0 3 * * * php /var/www/html/yoursite/wp-cron.php >/dev/null 2>&1

オプションB:wgetを使用

# Add this line to crontab
0 3 * * * wget -q -O - https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

オプションC:curlを使用

# Add this line to crontab
0 3 * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

/var/www/html/yoursite を実際のWordPressインストールパスに置き換えてください。

ステップ3:PHP実行制限を引き上げ

wp-config.php に追加:

/**
 * Increase limits for cron tasks (turbo file generation)
 */
@ini_set('max_execution_time', 300); // 5 minutes
@ini_set('memory_limit', '512M');    // 512 MB RAM

または、WordPressルートに .user.ini を作成:

max_execution_time = 300
memory_limit = 512M

まとめ

ターボcron失敗の根本原因:

  1. WordPress cronは信頼性が低い(アクセス依存)
  2. PHP実行時間制限により長時間タスクが強制終了される

 

推奨対応:

  1. ✅ WP_CRONを無効化
  2. ✅ サーバーサイドcronを使用
  3. ✅ PHP制限値を引き上げ
  4. ✅ アクセスが少ない時間帯にスケジュール

結果: 信頼性のある自動ターボファイル再生成により、お客様に正確な商品件数が提供されます。

参照https://pluginus.net/support/topic/woof_turbo_do_recreate_file-cron-job-is-missing/