HUSKY - Products Filter Professional for WooCommerce

Turbo Mode: почему автоматические обновления cron не работают (и как это исправить)

Проблема

Пользователи сообщают, что автоматическая регенерация файла Turbo Mode в WOOF работает ненадёжно:

Симптомы:

  • Turbo mode включён с расписанием “Daily cron”
  • Задача WordPress cron woof_turbo_do_recreate_file не создаётся
  • Ручная генерация файла работает отлично
  • Автоматические обновления создают частичные/пустые файлы
  • Регенерация файла, кажется, никогда не завершается

Влияние:

  • Покупателям показывается устаревшее количество товаров в фильтре
  • Плохой пользовательский опыт (покупатели видят товары, которых не существует)
  • Требуется ежедневное ручное вмешательство

Почему это происходит: две основные причины

1. Состояние гонки при очистке файла

Когда WOOF регенерирует turbo-файл, процесс выглядит так:

// 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 секунд. Если max_execution_time в PHP (обычно 30-60 секунд) превышен, скрипт завершается посреди записи, оставляя файл пустым или частичным.

2. WordPress cron — это не настоящий cron

WordPress cron (wp-cron.php) имеет критические ограничения:

Не гарантирован к запуску — срабатывает только когда кто-то заходит на сайт
Может быть блокирован — плагины кэширования могут препятствовать выполнению
Нет длительных задач — прерывается ограничениями выполнения PHP
Ненадёжное время выполнения — может запускаться с опозданием или не запускаться вовсе

Реальный сценарий:
На ваш сайт заходят в основном в рабочие часы (с 9 до 18). Вы запланировали регенерацию turbo на 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

Или создайте .user.ini в корне вашего WordPress:

max_execution_time = 300
memory_limit = 512M

Итог

Основные причины сбоев turbo cron:

  1. WordPress cron ненадёжен (зависит от трафика)
  2. Ограничения времени выполнения PHP прерывают длительные задачи

 

Рекомендуемое решение:

  1. ✅ Отключить WP_CRON
  2. ✅ Использовать серверный cron
  3. ✅ Увеличить ограничения PHP
  4. ✅ Запланировать на часы низкой посещаемости

Результат: Надёжная автоматическая регенерация turbo-файла с точным количеством товаров для ваших покупателей.

Ссылка: https://pluginus.net/support/topic/woof_turbo_do_recreate_file-cron-job-is-missing/