Wo WooCommerce Intermedio

Dynamic Pricing Engine — Guía completa

Guía completa: instalación, 4 tipos de reglas, segmentos, scraping de competencia, A/B testing, protecciones 3 niveles.

Actualizado Versión del módulo 1.0.0

Bienvenido a la documentación completa de Dynamic Pricing Engine, el motor de precios dinámicos para WooCommerce de DataFirefly. Esta guía cubre la instalación, la configuración inicial, cada tipo de regla, la segmentación de clientes, el scraping de la competencia, el A/B testing, el registro, las protecciones y la desinstalación.

Requisitos: WordPress 6.0+, WooCommerce 8.0+, PHP 7.4+. Compatible con HPOS y bloques de Checkout.

Instalación

Subida del plugin

  1. Desde el back-office de WordPress, ve a Plugins → Añadir nuevo → Subir plugin.
  2. Selecciona el archivo dfdynamicpricing.zip y haz clic en Instalar ahora.
  3. Una vez completada la instalación, haz clic en Activar plugin.

Qué ocurre al activar

El plugin crea 6 tablas personalizadas (prefijadas con wp_dfdpe_):

  • wp_dfdpe_rules — las reglas de precios
  • wp_dfdpe_logs — el registro de ajustes
  • wp_dfdpe_segments — los segmentos de clientes (3 sembrados automáticamente)
  • wp_dfdpe_competitors — el seguimiento de la competencia
  • wp_dfdpe_ab_tests — los tests A/B
  • wp_dfdpe_ab_events — los eventos de exposición, ATC y conversión

También se programan dos tareas cron: el scraping de la competencia (horario por defecto) y la purga del registro (diaria).

Aparece un nuevo menú Dynamic Pricing en la barra lateral con 7 submenús: Panel, Reglas, Segmentos, Competencia, A/B Testing, Registro, Ajustes. Todas las acciones requieren la capacidad de WordPress manage_woocommerce.

Configuración inicial (Ajustes)

Antes de crear tu primera regla, da un vistazo rápido en Dynamic Pricing → Ajustes para ajustar los parámetros globales.

Registro

  • Activar registro: marcado por defecto. Cada ajuste se registra con producto, regla, cliente, contexto.
  • Retención (días): 60 días por defecto. La purga automática se ejecuta a diario.

El registro está limitado a 1 entrada por sesión, producto y hora para evitar el flood. Puedes desactivarlo completamente si no lo usas.

Protecciones globales

  • Precio suelo (% del precio original): por ejemplo, 70 = nunca bajar del 70 % del precio original. 0 = desactivado.
  • Precio techo (% del precio original): por ejemplo, 130 = nunca superar el 130 %. 0 = desactivado.
  • Nunca vender por debajo del coste de compra: activar si guardas el coste en un meta del producto.
  • Clave meta del coste de compra: _cost por defecto (compatible con WooCommerce Cost of Goods).

Scraper de la competencia

  • Frecuencia de ejecución: horaria, dos veces al día o diaria. El scraper procesa 25 URLs por lote.

Visualización en front

  • Mostrar precio original tachado: útil para un efecto promo visible. Desactivar para tests A/B confidenciales.

Crea tu primera regla

Ve a Dynamic Pricing → Reglas → Añadir. Cada regla tiene los mismos campos base, cualquiera que sea su tipo.

Campos comunes

  • Nombre: etiqueta interna, útil en el registro (ej.: «Happy hour 18h-20h»).
  • Tipo: Hora, Stock, Segmento de cliente o Competencia.
  • Estado: Activa o Inactiva. Una regla inactiva nunca se evalúa.
  • Prioridad: las reglas se ejecutan en orden ascendente de prioridad. Cada regla trabaja sobre el resultado de la anterior.
  • Alcance: Global, Categoría, Etiqueta o Producto específico.
  • Ajuste: Porcentaje, Importe fijo, Valor definido o Match competidor (solo con tipo Competencia).
  • Suelo / Techo: protecciones opcionales a nivel de regla.
  • Ventana de fechas: fechas de inicio y fin para activar la regla solo durante un periodo dado.
  • Test A/B: enlace opcional a un test A/B y su variante (ver sección A/B Testing).

Consejo de priorización: empieza por las reglas más amplias (globales) con prioridad baja, y luego refina con reglas específicas de prioridad más alta. Las protecciones globales configuradas en Ajustes siempre se aplican al final.

Tipo 1 — Regla por hora

Ajusta el precio según la hora y el día de la semana. Ideal para el efecto happy hour, promos de fin de semana o tarifas nocturnas.

Condiciones disponibles

  • Días de la semana: selecciona uno o varios días (lunes a domingo, formato ISO).
  • Hora de inicio / Hora de fin: formato 24h. Los rangos que cruzan la medianoche se gestionan automáticamente (ej.: 22h-02h).
  • Zona horaria: sitio (por defecto, usa la zona horaria de WordPress) o una zona específica (ej.: Europe/Madrid).

Ejemplos concretos

  • Happy hour: −15 %, jueves-viernes, 18h-20h, zona Europe/Madrid.
  • Promo de fin de semana: −10 %, sábado-domingo, 00h-23h59.
  • Precio nocturno: +5 %, todos los días, 22h-06h (cruza la medianoche, gestionado automáticamente).

Tipo 2 — Regla por stock

Ajusta el precio según el nivel de stock del producto. Útil para liquidar rápidamente productos con sobrestock o valorizar los que se están agotando.

Condiciones disponibles

  • Operador: <, <=, ==, >=, >.
  • Umbral: número entero.
  • Modo: Absoluto (número de unidades) o Porcentaje del stock inicial (requiere el meta _initial_stock definido en el producto).

Ejemplos concretos

  • Liquidación: stock >= 50 (sobrestock) → −20 %.
  • Escasez: stock < 5 → +10 %.
  • Porcentaje del stock inicial: modo porcentaje, stock < 20 % del stock inicial → −5 %.

Para usar el modo Porcentaje, añade un campo meta _initial_stock a tus productos (vía WP All Import, ACF o un simple update_post_meta). Sin este meta, el modo porcentaje se ignora.

Tipo 3 — Regla por segmento de cliente

Aplica un ajuste solo a los clientes que pertenecen a uno o varios segmentos definidos.

Condiciones disponibles

  • Segmentos: uno o varios segmentos existentes (ver sección Segmentos).
  • Correspondencia: Any (el cliente pertenece al menos a un segmento) o All (pertenece a todos).

Ejemplos concretos

  • Fidelidad: segmento loyal-customers, ajuste −10 %.
  • Recuperación: segmento dormant (a crear), ajuste −20 % durante 7 días.
  • B2B: segmento b2b (rol wholesale), ajuste −25 %.

Tipo 4 — Regla por precio de la competencia

Alinea tu precio con el de un competidor que hayas configurado en la sección Competencia. Tres estrategias disponibles.

Estrategias

  • Match: tu precio se convierte exactamente en el precio del competidor.
  • Undercut: tu precio baja del competidor, en porcentaje o importe fijo.
  • Overprice: tu precio sube por encima del competidor (posicionamiento premium).

Condiciones disponibles

  • Modo: Porcentaje o Importe fijo.
  • Importe: porcentaje (ej.: 5 para 5 %) o importe en la divisa.
  • Antigüedad máxima de los datos (horas): más allá, los datos de scraping se consideran demasiado antiguos y la regla pasa al comportamiento de fallback.
  • Fallback: comportamiento si los datos de la competencia no están disponibles (por ejemplo, aplicar un ajuste neutro o saltar la regla).

Ejemplo concreto

Undercut del 3 % del competidor A, con antigüedad máxima de 6 horas. Si el competidor A no ha sido scrapeado desde hace 6 horas, la regla se ignora y el precio queda sin cambios.

Segmentos de clientes

Un segmento es una combinación de criterios que define un grupo de clientes. Una vez creado, un segmento puede ser objetivo de una regla de tipo Segmento de cliente.

Segmentos sembrados al activar

  • new-customers: clientes con 0 o 1 pedido.
  • loyal-customers: clientes con 5 pedidos o más.
  • vip: clientes que han gastado al menos 500 €.

Crear un segmento

Desde Dynamic Pricing → Segmentos → Añadir, define:

  • Nombre y Slug (auto-generado si está vacío).
  • Descripción (opcional, para tu equipo).
  • Criterios: añade tantas líneas como sea necesario. Todos los criterios deben cumplirse (lógica AND).
  • Estado: activo o inactivo.

Campos disponibles para los criterios

  • order_count — número de pedidos del cliente.
  • total_spent — total gastado (en la divisa del sitio).
  • is_guest — 1 si el visitante no está conectado, 0 en caso contrario.
  • user_roles — roles de WordPress del cliente (ej.: customer, subscriber, wholesale).
  • days_since_last_order — días desde el último pedido.

Operadores disponibles

Diez operadores: ==, !=, >, >=, <, <=, in, not_in, contains, not_contains.

Para in y not_in, separa los valores por comas en el campo Valor (ej.: customer,subscriber).

Ejemplo avanzado — segmento «Recuperación»: order_count >= 2 + days_since_last_order >= 60. Apunta a los antiguos clientes que no han pedido en 2 meses.

Competencia (scraping)

El scraper recupera automáticamente el precio mostrado en una página de producto de un competidor, según una frecuencia configurable. Los precios recuperados los usan las reglas de tipo Competencia.

Añadir un competidor

Desde Dynamic Pricing → Competencia → Añadir:

  1. Producto WooCommerce (ID): el ID del producto local al que asociar el seguimiento.
  2. Nombre del competidor: etiqueta libre (ej.: «Amazon», «El Corte Inglés»).
  3. URL: la página de producto del competidor a scrapear.
  4. Tipo de selector: CSS, XPath, Regex o JSON-LD.
  5. Selector: el selector que apunta al precio (ver ejemplos abajo).
  6. Divisa: por defecto la divisa WooCommerce del sitio.
  7. Estado: seguimiento activo o en pausa.

Tipos de selectores

  • CSS: selector CSS clásico. Ejemplos: .price .amount, #product-price, span[itemprop=price].
  • XPath: expresión XPath. Ejemplo: //span[@class="price"].
  • Regex: expresión regular PHP. Ejemplo: /€s*([d,.]+)/ — se usa el primer grupo capturado.
  • JSON-LD: auto-detección Schema.org. Busca price, offers.price, offers.lowPrice en las etiquetas JSON-LD. Deja el campo Selector vacío.

Parsing de precios

El scraper gestiona los formatos europeos (1 299,90) y americanos (1,299.90) automáticamente. Los símbolos de divisa y espacios se limpian.

Ejecución manual

El botón Scrapear ahora junto a cada competidor fuerza una actualización inmediata en AJAX. Útil para probar un selector nuevo.

Estados posibles

  • pending — nunca scrapeado, esperando el próximo cron.
  • ok — última ejecución exitosa.
  • error — última ejecución fallida (mensaje almacenado en el campo last_error).

Respeto a los T&C de la competencia: el scraper realiza una petición HTTP simple con timeout corto, pero te corresponde verificar que el scraping esté autorizado por los Términos y Condiciones de los sitios objetivo. Algunas jurisdicciones regulan esta práctica.

A/B Testing

El módulo A/B integrado permite comparar varias estrategias de precio en un mismo producto y medir su impacto en tiempo real (exposiciones, añadidos al carrito, conversiones, RPV).

Crear un test

Desde Dynamic Pricing → A/B Testing → Nuevo test:

  1. Nombre y slug.
  2. Variantes: lista de etiquetas separadas por comas. Por defecto A,B.
  3. Reparto del tráfico: peso relativo por variante (normalizado automáticamente). Por ejemplo 50/50, 70/30 o 1/1/1 para tres variantes equiparadas.
  4. Estado: Borrador, En curso, En pausa o Terminado. Solo un test En curso asigna visitantes.
  5. Ventana: fechas opcionales de inicio y fin.

Enlazar una regla con una variante

En el formulario de una regla, selecciona el test A/B y la variante objetivo. La regla solo se aplicará a los visitantes asignados a esa variante concreta.

Cómo funciona la asignación

En la primera exposición, el plugin asigna al visitante a una variante según los pesos configurados, y luego almacena esta elección en una cookie dfdpe_ab. Una cookie de sesión aparte dfdpe_sid permite seguir al mismo visitante a lo largo de su sesión, conectado o no.

Eventos rastreados

  • exposure — primera vez que el visitante ve un precio afectado por el test.
  • atc — añadido al carrito (hook woocommerce_add_to_cart).
  • conversion — pedido finalizado (hook woocommerce_thankyou). Se registra el importe total del pedido.

Métricas calculadas (página Resultados)

  • Exposiciones y Sesiones únicas.
  • CR ATC — tasa de añadido al carrito (ATC / exposiciones).
  • CR Conv. — tasa de conversión (conversiones / exposiciones).
  • Ingresos — total de conversiones.
  • RPV — ingresos por visitante (ingresos / exposiciones). Es la métrica clave de decisión: la variante con el RPV más alto se destaca automáticamente (badge Ganador).

Buena práctica: deja correr un test al menos 2 semanas antes de concluir. Un test A/B fiable requiere varios miles de exposiciones para alcanzar significancia estadística.

Registro de ajustes

Cada ajuste de precio aplicado en el front-office puede registrarse. El registro es accesible vía Dynamic Pricing → Registro.

Información registrada

  • Fecha y hora.
  • Producto y variación.
  • Regla activada (ID).
  • Cliente (ID) o sesión anónima.
  • Precio original, precio final, importe del ajuste.
  • Test A/B y variante (si aplica).
  • Contexto: frontend, cart, checkout.

Filtros disponibles

Puedes filtrar por ID de producto, ID de regla o ID de test A/B. La paginación muestra 50 entradas por página.

Rate-limiting

Para evitar el flood, el plugin limita el registro a 1 entrada por sesión, producto y hora. Una sesión que consulta 100 veces la misma ficha de producto en una hora solo genera una línea.

Purga automática

Una tarea cron diaria (dfdpe_cron_purge_logs) elimina las entradas más antiguas que la retención configurada (60 días por defecto).

Protecciones: cómo funcionan

Tres niveles de protección sucesivos impiden que tu precio final alcance un nivel peligroso.

Nivel 1 — Protecciones por regla

Cada regla puede definir su propio suelo y techo. Se aplican inmediatamente después del ajuste de esa regla. Útil para topar los efectos de una regla concreta (ej.: «la happy hour nunca puede bajar de 30 €, sea cual sea el precio original»).

Nivel 2 — Protecciones globales

Definidas en Ajustes, como porcentaje del precio original:

  • Precio suelo: el precio final no puede bajar de este porcentaje.
  • Precio techo: el precio final no puede superar este porcentaje.

Ejemplo: suelo al 70 % y techo al 130 %. Un producto de 100 € nunca podrá bajar de 70 € ni superar los 130 €, sean cuales sean las reglas aplicadas.

Nivel 3 — Protección coste de compra

Si está activada en Ajustes, esta protección impide que el precio final baje del valor del meta _cost (o de la clave personalizada que configures). Es la garantía última para no vender nunca con pérdidas.

Los tres niveles son acumulativos y se aplican en este orden: regla → global → coste. El precio final siempre es el resultado más «protegido» de los tres.

Compatibilidad HPOS y caché

HPOS (High-Performance Order Storage)

El plugin declara compatibilidad con custom_order_tables y cart_checkout_blocks desde la inicialización. No se requiere ninguna acción adicional si has activado HPOS en WooCommerce.

Caché de precios de variaciones

WooCommerce almacena en caché los precios mínimo y máximo de los productos variables mediante un hash. El plugin inyecta un seed dinámico (usuario + sesión + bucket de 5 minutos) en este hash vía el filtro woocommerce_get_variation_prices_hash, lo que fuerza a WooCommerce a recalcular los precios en el momento adecuado sin romper la caché para los demás visitantes.

FAQ

¿Puedo combinar varias reglas en el mismo producto?

Sí. Las reglas se ejecutan en orden de prioridad, cada una trabajando sobre el resultado de la anterior. Puedes encadenar «−10 % VIP» y luego «tope al 130 % del coste».

¿Se aplican también las reglas al carrito y checkout?

Sí. Un hook sobre woocommerce_before_calculate_totals recalcula los precios de las líneas del carrito en cada visualización.

¿Es el plugin compatible con cachés de servidor (Redis, Varnish)?

Sí, pero si tu caché es muy agresiva a nivel de página completa, los precios mostrados pueden ser los cacheados. Para una visualización dinámica fiable, excluye las páginas de producto del caché full-page, o usa fragmentos ESI.

¿Puedo desactivar el plugin sin perder mis reglas?

Sí. La desactivación no elimina ningún dato. Solo la desinstalación vía Plugins → Eliminar dispara el script uninstall.php.

¿Cómo exporto mis datos?

Todos los datos se almacenan en las 6 tablas wp_dfdpe_*. Puedes exportarlas vía phpMyAdmin, WP-CLI (wp db export) o cualquier herramienta de copia de seguridad WordPress.

Desinstalación

Para desinstalar completamente:

  1. Desactiva el plugin desde Plugins.
  2. Haz clic en Eliminar.

El script uninstall.php elimina entonces:

  • Las 6 tablas wp_dfdpe_*.
  • Las 9 opciones WordPress creadas.
  • Las tareas cron programadas.

La desinstalación es definitiva e irreversible. Haz una copia de seguridad de tus reglas, segmentos y registro antes si quieres poder revertir.

Soporte

Tu licencia incluye 12 meses de soporte y actualizaciones. Para cualquier pregunta, contacta con nosotros vía datafirefly.com/contact.

¿Te ha resultado útil esta página?

¿Sigues atascado? Contacta con soporte