Empezar
Cómo actualizar feeds de productos usando trabajos cron - AdTribes
  1. Inicio
  2. Base de conocimientos
  3. Consejos generales sobre feeds
  4. Cómo actualizar feeds de productos usando trabajos cron

Cómo actualizar feeds de productos usando trabajos cron

Si su entorno de alojamiento limita el programador de tareas integrado de WordPress, o si necesita que los feeds se actualicen a una hora precisa que los intervalos horarios, dos veces al día o diarios del plugin no cumplen, puede impulsar las actualizaciones de feeds desde un trabajo cron a nivel de servidor en su lugar. Esto le da un control exacto sobre el tiempo y evita depender del tráfico de visitantes para activar el programador de WordPress.

Síntomas comunes: feeds atascados en datos antiguos, tiempos de actualización que varían entre visitas, o entornos de alojamiento que deshabilitan wp-cron.

Product Feed Pro y Product Feed Elite admiten dos enfoques: un comando WP-CLI (recomendado) y un script PHP independiente para servidores sin WP-CLI.

Si tus feeds no se actualizaban en las ejecuciones programadas en un servidor sensible a mayúsculas y minúsculas (Linux, Kinsta o similar), este era un error conocido corregido en la versión 13.5.4. Actualizar el plugin resuelve el problema sin necesidad de una configuración cron personalizada.

Antes de empezar

  • Instalado y activo Product Feed Pro o Product Feed Elite
  • Al menos un feed de producto creado y configurado
  • Acceso SSH o cPanel a tu servidor para añadir trabajos cron
  • Tu ID de feed (ver Paso 1 en cualquiera de los métodos a continuación)
  • Versión 13.5.4 o posterior para soporte WP-CLI

WP-CLI está disponible en la mayoría de los hosts de WordPress gestionados. Es la forma más sencilla y fiable de activar una actualización de feed desde un trabajo cron del servidor. No hay ningún archivo PHP que gestionar, ni se requiere la inicialización de WordPress.

Paso 1: Encuentra tu ID de feed

  1. Ve a Feed de productos → Gestionar feeds en tu administrador de WordPress.
  2. Haz clic en el feed que deseas actualizar.
  3. Mira la barra de direcciones del navegador. El ID del feed es el valor del parámetro id; por ejemplo, admin.php?page=adt-edit-feed&id=123 significa que tu ID de feed es 123.
Barra de direcciones del navegador que muestra una URL de administración de WordPress con page=adt-edit-feed&id=13 resaltada.

Paso 2: Deshabilita el intervalo de actualización integrado

Para evitar que el programador del plugin ejecute una actualización duplicada junto con tu trabajo cron:

  1. Mientras editas el feed, ve a la pestaña General.
  2. Establece Intervalo de actualización en Sin actualización.
  3. Haz clic en Guardar Cambios.
Feed con "Sin actualización" como Intervalo de actualización

Paso 3: Añade el trabajo cron del servidor

En tu servidor, añade una entrada cron que ejecute wp adt-feed refresh en el horario que elijas. Reemplaza /ruta-a-wordpress con el directorio raíz real de tu sitio y 123 con tu ID de feed:

0 2 * * * cd /path-to-wordpress && wp adt-feed refresh 123 >> /tmp/feed-refresh-123.log 2>&1

Este ejemplo se ejecuta a las 2:00 AM todos los días. Ajusta la expresión de programación para que coincida con tus necesidades.

Si wp no está en el PATH predeterminado de tu servidor, usa la ruta completa al binario WP-CLI (por ejemplo, /usr/local/bin/wp) en lugar de solo wp.

Para actualizar varios feeds en un solo trabajo cron, enumera sus IDs separados por espacios:

0 2 * * * cd /path-to-wordpress && wp adt-feed refresh 123 456 789

Método 2: Script PHP

Usa este método si tu servidor no admite WP-CLI.

El script PHP inicia la generación del feed poniéndolo en cola a través de Action Scheduler. El procesamiento real ocurre en segundo plano; el feed no se actualizará en el mismo instante en que se ejecute el script. Asegúrate de que el cron de WordPress (o un cron de servidor separado que acceda a wp-cron.php) esté activo para que Action Scheduler pueda completar los lotes.

Paso 1: Encuentra tu ID de feed

Siga los mismos pasos que en el Método 1, Paso 1 anterior. Haga clic en su feed para editarlo y lea el valor id= de la URL.

Paso 2: Crea el script PHP

Crea un nuevo archivo llamado feed-refresh-123.php (reemplaza 123 con el ID de tu feed) y guárdalo en el directorio de tu tema hijo; por ejemplo, wp-content/themes/tu-tema-hijo/feed-refresh-123.php.

Añade este código al archivo, reemplazando 123 con el ID real de tu feed:

/**
 * Product Feed Generation Cron Script
 */

// Start timing
$start_time = microtime(true);

// Simple logging function
function log_message($message) {
    $timestamp = date('Y-m-d H:i:s');
    $log_entry = "[$timestamp] $message";
    
    error_log($log_entry);
    echo $log_entry . "\n";
}

log_message("Feed generation started");

try {
    // Load WordPress (3 levels up from wp-content/themes/your-child-theme/)
    require_once(__DIR__ . '/../../../wp-load.php');
    
    $feed_id = 123; // Change this to your actual feed ID
    
    $feed = \AdTribes\PFP\Helpers\Product_Feed_Helper::get_product_feed($feed_id);
    
    if ($feed) {
        $feed->generate();
        
        $execution_time = round(microtime(true) - $start_time, 2);
        log_message("Feed ID $feed_id generated successfully in {$execution_time}s");
        
    } else {
        log_message("ERROR: Failed to get feed ID $feed_id");
    }
    
} catch (Exception $e) {
    log_message("ERROR: " . $e->getMessage());
}

Paso 3: Desactivar el intervalo de actualización integrado

Siga los mismos pasos que en el Método 1, Paso 2 anterior: establezca el Intervalo de actualización en Sin actualización en la pestaña General.

Paso 4: Añadir el trabajo cron del servidor

Añada la siguiente entrada cron en su servidor, reemplazando las rutas con sus valores reales:

0 2 * * * php /path-to-wordpress/wp-content/themes/your-child-theme/feed-refresh-123.php >> /path-to-wordpress/wp-content/themes/your-child-theme/feed-refresh-123.log 2>&1

Esto se ejecuta a las 2:00 AM todos los días. La salida se escribe en un archivo de registro en el mismo directorio, por lo que puede comprobar si el script se ejecutó y si produjo algún error.

Para ejecutar varios feeds de forma independiente, cree un archivo PHP y una entrada cron separados para cada feed.

Solución de problemas

El feed no se actualiza después de que se ejecuta el cron
Primero, compruebe el archivo de registro al que escribe el trabajo cron. Si el registro está vacío, la entrada cron no se está ejecutando. Vuelva a comprobar la ruta del archivo y que el demonio cron esté activo en su servidor.

Si el registro muestra salida pero el feed sigue sin actualizarse, verifique que el ID del feed sea correcto: abra el feed en el administrador de WordPress y confirme que el valor id= en la URL coincide con el ID de su script o comando WP-CLI.
Los feeds programados no se actualizan en un servidor Linux o Kinsta
Este era un error conocido (corregido en la versión 13.5.4) donde el plugin escribía el feed actualizado a un nombre de archivo en minúsculas, mientras que la URL del feed utilizaba el nombre de archivo original en mayúsculas y minúsculas. En sistemas de archivos sensibles a mayúsculas y minúsculas, estos son dos archivos diferentes. Actualice el plugin a la versión 13.5.4 o posterior para resolverlo.
El comando WP-CLI devuelve "comando no encontrado"
Es posible que el binario wp no esté en el PATH de su servidor. Póngase en contacto con su host para confirmar que WP-CLI está disponible y solicite la ruta completa. Luego actualice su entrada cron para usar la ruta completa (por ejemplo, /usr/local/bin/wp adt-feed refresh 123).
El script PHP devuelve un error fatal sobre una clase faltante
La clase AdTribes\PFP\Helpers\Product_Feed_Helper solo está disponible después de que el plugin se haya cargado a través de wp-load.php. Asegúrese de que la línea require_once apunte a la ruta correcta de wp-load.php. La ruta debe coincidir con la raíz de su instalación de WordPress, no con un subdirectorio.

Preguntas frecuentes

¿Necesito "Product Feed Elite" para esto?
No. Ambos métodos funcionan con Product Feed Pro (gratuito) y Product Feed Elite.
¿Puedo mantener habilitado el intervalo de actualización integrado junto con un cron del servidor?
Puedes hacerlo, pero no se recomienda. Ejecutar ambos al mismo tiempo puede hacer que el feed se genere dos veces en rápida sucesión. Deshabilita el intervalo incorporado y deja que el cron del servidor controle la programación.
¿Cómo encuentro la expresión de programación cron correcta?
Utiliza un generador de expresiones cron (busca “generador de expresiones cron”) para crear la programación que necesitas. Los cinco campos son: minuto, hora, día del mes, mes, día de la semana.
¿El enfoque del script PHP funciona en hosting compartido?
Sí, siempre que tengas acceso a cPanel o SSH para agregar trabajos cron y el servidor pueda ejecutar PHP desde la línea de comandos. Si tu host no admite PHP desde la línea de comandos ni trabajos cron, utiliza en su lugar la configuración de Intervalo de actualización integrada del plugin.

¿Necesitas más ayuda?

Si estás en Product Feed Elite, abre un ticket de soporte y nuestro equipo te ayudará a configurar la configuración cron para tu entorno.

Si estás en Product Feed Pro, publica tu pregunta en el foro de soporte de WordPress.org.

¿Te ha resultado útil este artículo?

Artículos relacionados

Completa tu compra
Feed de productos de WooCommerce de AdTribes

El mejor plugin de feeds de productos de WooCommerce

  • AdTribes Pty Ltd
    ABN: 40 675 636 816
Producto
Recursos e información
Sitios asociados
Rymera