HUSKY - Product Filter for WooCommerce

HUSKY Turbo Mode: por qué fallan las actualizaciones automáticas de cron y cómo solucionarlo

El problema

Los usuarios informan que la regeneración automática de archivos del Modo Turbo de WOOF no funciona de manera confiable:

Síntomas:

  • Modo Turbo habilitado con programación "Cron diario"
  • El trabajo de cron de WordPress woof_turbo_do_recreate_file no se está creando
  • La generación manual de archivos funciona perfectamente
  • Las actualizaciones automáticas generan archivos parciales/vacíos
  • La regeneración de archivos parece no completarse nunca

Impacto:

  • Recuentos de filtro desactualizados mostrados a los clientes
  • Mala experiencia de usuario (ver productos que no existen)
  • Intervención manual requerida diariamente

Por qué ocurre esto: Dos causas raíz

1. Condición de carrera en la limpieza de archivos

Cuando WOOF regenera el archivo turbo, sigue este proceso:

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

El problema:
Si tu sitio tiene muchos productos (1000+), el Paso 2 puede tomar 60-120 segundos. Si se supera el max_execution_time de PHP (generalmente 30-60 segundos), el script termina a mitad de escritura, dejando el archivo vacío o parcial.

2. WordPress Cron no es un cron real

WordPress cron (wp-cron.php) tiene limitaciones críticas:

No está garantizado que se ejecute – solo se activa cuando alguien visita tu sitio
Puede ser bloqueado – los plugins de caché pueden impedir la ejecución
Sin tareas de larga duración – interrumpido por los límites de ejecución de PHP
Temporización no confiable – puede ejecutarse tarde o no hacerlo en absoluto

Escenario real:
Tu sitio recibe tráfico principalmente durante el horario laboral (9 AM – 6 PM). Programas la regeneración turbo para las 3 AM. Resultado: Nunca se ejecuta porque nadie visita a las 3 AM para activar wp-cron.php.

La solución confiable: Cron del servidor

Reemplaza WordPress cron con un cron real del servidor que se ejecuta independientemente del tráfico del sitio.

Paso 1: Deshabilitar WordPress Cron

Añade en wp-config.php (antes de /* That's all, stop editing! */):

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

Paso 2: Añadir entrada de crontab del servidor

Opción A: Usando PHP CLI (Recomendado)

# 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

Opción B: Usando wget

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

Opción C: Usando curl

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

Reemplaza /var/www/html/yoursite con la ruta real de tu instalación de WordPress.

Paso 3: Aumentar los límites de ejecución de PHP

Añade en 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

O crea .user.ini en la raíz de WordPress:

max_execution_time = 300
memory_limit = 512M

Resumen

Causas raíz de los fallos del cron turbo:

  1. WordPress cron no es confiable (dependiente del tráfico)
  2. Los límites de tiempo de ejecución de PHP matan las tareas de larga duración

 

Solución recomendada:

  1. ✅ Deshabilitar WP_CRON
  2. ✅ Usar cron del servidor
  3. ✅ Aumentar los límites de PHP
  4. ✅ Programar durante horas de bajo tráfico

Resultado: Regeneración automática confiable del archivo turbo con recuentos precisos de productos para tus clientes.

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