BEAR - WooCommerce Bulk Editor and Products Manager Professional

Programar precios de oferta en WooCommerce en masa: fechas, horas y zona horaria

Para programar un precio de oferta en WooCommerce de forma masiva no necesitas un planificador: cada producto ya tiene dos campos de fecha de oferta, y es el propio WooCommerce quien activa y desactiva el precio en esos días. Lo que confunde es cómo funcionan esas fechas: son días completos, siguen la zona horaria de WordPress, y el cambio depende de una tarea en segundo plano. A continuación: una oferta con fechas en cientos de productos en una sola ejecución de BEAR, por qué no se pueden fijar horas, por qué una oferta empieza un día antes o parece no terminar nunca, y qué hacer cuando el cambio no es una oferta.

Programar un precio de oferta para muchos productos en una sola ejecución

Una oferta de Black Friday del 25 % del 27 al 30 de noviembre es una sola ejecución de la pestaña Edición en masa (Bulk Edit):

  1. Selecciona los productos en la pestaña Filtros (Filters) (una categoría, una etiqueta, una marca) y comprueba la línea La edición en masa se aplicará a (Bulk editing will be applied to) en la parte superior de la pestaña Edición en masa.
  2. En la sección Básico (Basic) marca Precio rebajado (Sale price), introduce 25 y elige precio normal menos % (regular price minus %).
  3. Abre la sección Adicional (Additional), marca Inicio del periodo de oferta (Sale time from) y elige el 27 de noviembre, marca Fin del periodo de oferta (Sale time to) y elige el 30 de noviembre.
  4. Pulsa Realizar edición en masa (Do Bulk Edit).

Hasta el día 27 la tienda sigue mostrando los precios normales; desde el comienzo del 27 los productos están en oferta, y al terminar el 30 vuelve el precio normal. No hay que acordarse de ninguna ejecución para cerrar la oferta.

Hacen falta las dos partes. Las fechas solo limitan en el tiempo un precio de oferta: unas fechas sin precio de oferta no hacen nada, y un precio de oferta sin fechas está activo de inmediato y hasta que lo quites. Los productos variables guardan los precios y las fechas de oferta en sus variaciones, así que necesitan el interruptor variaciones (variations) y su propia ejecución; cómo elegir los productos, el interruptor y la operación de precio correcta se explica en poner todos los productos en oferta.

Cuando BEAR guarda las fechas, también establece el precio activo para el momento actual, de modo que una oferta que empieza hoy está activa al instante, y una posterior mantiene el precio normal hasta su día.

Las fechas de oferta son días completos: por qué no se puede fijar una hora

WooCommerce guarda el inicio y el fin de una oferta como dos momentos, pero su pantalla de producto solo permite elegir fechas, y BEAR sigue la misma regla. Inicio del periodo de oferta (Sale time from) se guarda como las 00:00:00 del día elegido y Fin del periodo de oferta (Sale time to) como las 23:59:59 de su día, ambos en la zona horaria del sitio. La fecha final está incluida: una oferta hasta el 30 de noviembre dura todo el día 30. Por eso el calendario de BEAR muestra solo fechas; cualquier hora escrita en él se descartaría al guardar.

Dos filtros deciden con qué extremo del día trabaja BEAR. woobe_on_sale_from_set_day (por defecto false, el comienzo del día) y woobe_on_sale_to_set_day (por defecto true, el final del día). Por ejemplo, para que una oferta termine al comienzo de la fecha final elegida, de modo que el día anterior sea el último día de la oferta:

/*
 * BEAR: save "Sale time to" as 00:00:00 of the chosen day instead of 23:59:59.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('woobe_on_sale_to_set_day', '__return_false');

Estos filtros solo eligen entre los dos extremos de un día; no pueden programar una oferta para las 18:00. El editor de productos de WooCommerce guarda siempre el final del día, así que un producto guardado allí después vuelve a esa regla. Una oferta que empiece a una hora concreta solo es posible mediante código o la API REST de WooCommerce, que aceptan fecha y hora completas.

Las horas también parecen desplazadas donde se muestran sin procesar: WooCommerce guarda los momentos en UTC, así que una oferta que termina a las 23:59:59 en Nueva York aparece en la base de datos como las 03:59 o las 04:59 del día siguiente. Es el mismo momento.

Oferta programada con un día de diferencia: la zona horaria de WordPress

Todo «comienzo del día» y «final del día» de arriba se calcula en la zona horaria configurada en Ajustes → Generales → Zona horaria (Timezone). Si el sitio sigue con UTC+0 mientras la tienda está en Hong Kong, una oferta desde el 18 de noviembre empieza a las 08:00 hora local; para una tienda en Hawái, la misma oferta empieza a las 14:00 del día 17, lo que parece un día antes. La oferta en sí funciona; sigue el reloj equivocado.

  • Elige una ciudad en la lista Zona horaria (Timezone) en lugar de un desfase fijo UTC+X. Una ciudad sigue el horario de verano; un desfase fijo se queda una hora desfasado durante medio año. Consulta la pantalla de Ajustes generales en la documentación de WordPress.
  • Tras cambiar la zona horaria, vuelve a fijar las fechas en los productos de la siguiente oferta: las fechas ya guardadas conservan los momentos calculados con el ajuste anterior.
  • Comprueba un producto de la ejecución en el editor de productos de WooCommerce. Sus Fechas del precio rebajado (Sale price dates) deben mostrar los días que elegiste.

Ofertas que cruzan un cambio de horario de verano

BEAR convierte el día elegido con el desfase que WordPress indica en el momento de guardar. Si el reloj cambia entre ese día y la oferta, como en una oferta de Black Friday preparada en octubre, la oferta empieza y termina con una hora de diferencia: desde las 23:00 de la tarde anterior hasta las 22:59 del último día, o desde las 01:00 del primer día hasta las 00:59 posterior al último cuando el reloj cambia en sentido contrario. El editor de productos de WooCommerce convierte con el desfase del día de la oferta, por lo que muestra una de las dos fechas con un día de diferencia, y al pulsar Actualizar (Update) allí se guarda la fecha que muestra. Cuando la hora exacta importa, fija las fechas después del cambio de reloj y no vuelvas a guardar esos productos en el editor de WooCommerce antes de la oferta.

Cómo inicia y termina WooCommerce una oferta programada

BEAR solo escribe el precio de oferta y las dos fechas; cambiar el precio en el momento justo es tarea de WooCommerce, y funciona igual para los productos editados en BEAR, en el editor de productos o mediante una importación. Desde WooCommerce 10.5, al guardar las fechas de oferta se crean dos acciones en segundo plano por producto, wc_product_start_scheduled_sale y wc_product_end_scheduled_sale, fijadas al inicio y al final exactos. Una tarea diaria, woocommerce_scheduled_sales, recoge lo que se les haya escapado. Las versiones anteriores dependían solo de esa tarea diaria, por lo que allí las ofertas podían cambiar con horas o incluso un día de retraso.

Cuando una oferta termina, el WooCommerce actual solo vuelve a poner como precio activo el precio normal. El precio de oferta y las dos fechas permanecen en el producto: la tienda muestra el precio normal y ninguna insignia de oferta, mientras que el editor de productos y la tabla de BEAR siguen mostrando el antiguo precio de oferta y sus fechas. Es el estado normal de una oferta terminada, no una oferta que no terminó. Las versiones anteriores borraban el precio de oferta y las fechas al terminar.

Cuando una oferta realmente no empezó o no terminó en la tienda:

  1. Comprueba las acciones. Abre WooCommerce → Estado → Acciones programadas (Scheduled Actions) y busca el ID del producto o wc_product_end_scheduled_sale. Una acción Pendiente (Pending) cuya hora ya pasó significa que las tareas en segundo plano no se están ejecutando. Falló (Failed) muestra un error en su registro.
  2. Comprueba WP-Cron. Estas acciones las procesa WP-Cron, que solo se ejecuta cuando el sitio recibe visitas. Si DISABLE_WP_CRON está definido en wp-config.php, una tarea cron real del servidor debe llamar a wp-cron.php cada pocos minutos; la guía de WordPress sobre conectar WP-Cron al planificador de tareas del sistema explica cómo. En un sitio con poco tráfico, una acción puede esperar a la primera visita posterior a su hora.
  3. Vacía la caché de páginas. Una página de producto o de categoría en caché sigue mostrando el precio antiguo hasta que se purga la caché o caduca.
  4. Prueba sin plugins de descuentos. Los plugins de precios y descuentos como Woo Discount Rules calculan ellos mismos el precio mostrado, así que una oferta programada de WooCommerce puede quedar oculta o duplicada por sus reglas. Desactívalos en una copia de pruebas, o revisa sus reglas para los mismos productos.
  5. Compara con el propio WooCommerce. Da a un producto de prueba las mismas fechas en el editor de productos de WooCommerce. Si tampoco cambia, la causa es el servidor u otro plugin, no la forma en que se escribieron las fechas.

Una oferta nueva en un producto que ya tuvo una

Como una oferta terminada conserva sus fechas, un nuevo precio de oferta escrito por sí solo las hereda. Con una fecha final ya pasada nunca se muestra; con una fecha final antigua que aún esté en el futuro, termina ese día. Cuando empieces una oferta nueva, escribe el precio de oferta y las dos fechas en la misma ejecución, o borra antes las fechas antiguas.

Un cambio de precio futuro que no es una oferta

BEAR aplica una operación masiva al pulsar el botón; no puede retenerla y ejecutarla en una fecha. Si el cambio es temporal, escríbelo como una oferta con fechas, como se ha explicado. Si no lo es:

  • Un nuevo precio normal a partir de una fecha. Prepara el filtro y la operación con antelación y ejecútala en el momento del cambio. Una ejecución sobre miles de productos tarda minutos; consulta edición masiva de miles de productos para catálogos grandes. Los plugins de precios que admiten reglas programadas son la otra vía.
  • Dos ofertas seguidas, por ejemplo un 15 % hasta el 31 de agosto y un 20 % desde el 1 de septiembre. Un producto tiene un solo precio de oferta, así que la segunda oferta no se puede guardar mientras la primera está en marcha: sobrescribir el precio de oferta cambia la oferta actual al instante. Ejecuta la segunda oferta, con sus fechas, cuando termine la primera.
  • No es la fecha de publicación. Una Fecha de publicación (Date Published) futura no programa un precio. WordPress convierte esos productos en entradas programadas, y desaparecen de la tienda hasta esa fecha.

Quitar las fechas de oferta en masa o deshacer la ejecución

Para borrar fechas antiguas de muchos productos, selecciónalos con las casillas, activa la edición vinculada (binded editing) y borra la celda de fecha de uno de ellos; la FAQ sobre quitar fechas de oferta muestra los pasos. Para encontrar los productos cuya oferta ha terminado, muestra la columna Fin del periodo de oferta (Sale time to) y ordena por ella. El propio precio de oferta se elimina con -1 y establecer nuevo (set new), como se describe en la FAQ sobre quitar precios de oferta.

Una fecha equivocada en una ejecución grande no requiere corrección manual: cada ejecución masiva es una entrada en la pestaña Historial (History), y al revertirla se restauran las fechas y los precios anteriores de todos los productos que cambió.

Lista de comprobación antes de que empiece la oferta

  • Ajustes → Generales → Zona horaria (Timezone) es tu ciudad.
  • El precio de oferta y las dos fechas se escribieron en la misma ejecución; los productos variables tuvieron su propia ejecución con el interruptor variaciones (variations) activado.
  • Un producto abierto en el editor de WooCommerce muestra las Fechas del precio rebajado (Sale price dates) esperadas.
  • En WooCommerce 10.5 o posterior, Acciones programadas lista las acciones pendientes para el inicio y el fin de ese producto, y ninguna acción pendiente está vencida.
  • Las reglas de caché de páginas y los plugins de descuentos no ocultarán los nuevos precios.

Si las fechas son correctas, las acciones se ejecutan y el precio aun así no cambia, describe el producto, las fechas y el estado de sus acciones programadas en el foro de soporte de BEAR.