HUSKY - Product Filter for WooCommerce

HUSKY Turbo Mode: Dlaczego automatyczne aktualizacje cron zawodzą (i jak to naprawić)

Problem

Użytkownicy zgłaszają, że automatyczna regeneracja plików Trybu Turbo WOOF’a nie działa niezawodnie:

Objawy:

  • Tryb Turbo włączony z harmonogramem „Codzienny cron”
  • Zadanie crona WordPress woof_turbo_do_recreate_file nie jest tworzone
  • Ręczne generowanie plików działa bez zarzutu
  • Aktualizacje automatyczne generują częściowe/puste pliki
  • Regeneracja plików wydaje się nigdy nie kończyć

Wpływ:

  • Nieaktualne liczniki filtrów wyświetlane klientom
  • Słabe doświadczenia użytkownika (widząc produkty, które nie istnieją)
  • Codzienna konieczność ręcznej interwencji

Dlaczego tak się dzieje: Dwie przyczyny źródłowe

1. Wyścig warunków przy czyszczeniu pliku

Gdy WOOF regeneruje plik turbo, wykonuje następujący proces:

// 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);
}

Problem:
Jeśli Twoja witryna ma wiele produktów (1000+), krok 2 może zająć 60-120 sekund. Jeśli max_execution_time PHP (zwykle 30-60 sekund) zostanie przekroczony, skrypt kończy działanie w trakcie zapisu, pozostawiając plik pusty lub częściowy.

2. Cron WordPress nie jest prawdziwym cronem

Cron WordPress (wp-cron.php) ma krytyczne ograniczenia:

Nie jest gwarantowany – uruchamia się tylko, gdy ktoś odwiedzi witrynę
Może być blokowany – wtyczki buforujące mogą uniemożliwić wykonanie
Nie obsługuje długotrwałych zadań – zabijany przez limity wykonania PHP
Niezawodne działanie czasowe – może się spóźniać lub w ogóle nie działać

Scenariusz z życia wzięty:
Twoja witryna ma ruch głównie w godzinach pracy (9:00 – 18:00). Planujesz regenerację turbo na 3:00 nad ranem. Wynik: Nigdy się nie uruchamia, ponieważ nikt nie odwiedza witryny o 3:00, aby wywołać wp-cron.php.

Niezawodne rozwiązanie: Cron po stronie serwera

Zastąp cron WordPress rzeczywistym cronem serwerowym, który działa niezależnie od ruchu na stronie.

Krok 1: Wyłącz cron WordPress

Dodaj do wp-config.php (przed /* That's all, stop editing! */):

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

Krok 2: Dodaj wpis crontab na serwerze

Opcja A: Używając PHP CLI (zalecane)

# 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

Opcja B: Używając wget

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

Opcja C: Używając curl

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

Zastąp /var/www/html/yoursite rzeczywistą ścieżką instalacji WordPress.

Krok 3: Zwiększ limity wykonania PHP

Dodaj do 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

Lub utwórz .user.ini w katalogu głównym WordPress:

max_execution_time = 300
memory_limit = 512M

Podsumowanie

Przyczyny źródłowe niepowodzeń crona turbo:

  1. Cron WordPress jest zawodny (zależny od ruchu)
  2. Limity czasu wykonania PHP zabijają długotrwałe zadania

 

Zalecane rozwiązanie:

  1. ✅ Wyłącz WP_CRON
  2. ✅ Użyj crona po stronie serwera
  3. ✅ Zwiększ limity PHP
  4. ✅ Zaplanuj na godziny o niskim ruchu

Wynik: Niezawodna, automatyczna regeneracja plików turbo z dokładnymi licznikami produktów dla Twoich klientów.

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