WordPress Hosting

Directiva Ómnibus en tiendas WordPress con WooCommerce

Si tu tienda creada con WordPress y WooCommerce se limita a tachar el precio normal y mostrar el de oferta al lado, es muy probable que no estés cumpliendo la directiva Ómnibus de precios.

Esta ley no pide enseñar el precio habitual, pide enseñar el precio más bajo que ese producto haya tenido en los últimos 30 días, y esa diferencia lleva aplicándose desde hace tiempo sin que casi nadie repare en ella.

No es una norma nueva ni un borrador pendiente, está muy vigente, así que vamos a ver exactamente qué exige, qué te juegas si no la cumples y cómo resolverlo sin volverte loco con el catálogo.

Lo que exige la directiva Ómnibus en cada rebaja de precios

La norma viene de la Directiva (UE) 2019/2161, conocida como directiva Ómnibus, que añadió el artículo 6 bis a la Directiva 98/6/CE de indicación de precios.

España la transpuso a través del artículo 20.1 de la Ley de Ordenación del Comercio Minorista, redactado por el Real Decreto-ley 24/2021, en vigor desde el 28 de mayo de 2022.

La regla en sí se explica en una frase y se cumple mal en la mayoría de tiendas:

Toda reducción de precio debe mostrar, junto al precio rebajado, el precio anterior.

Y ojo, porque «precio anterior» no es lo que la mayoría cree. No es el precio habitual del producto, es el precio más bajo que haya tenido en los 30 días previos a la rebaja, sea cual sea el motivo por el que estuvo a ese precio.

Aquí tienes los requisitos por la vía rápida, para que no digas que me hago esperar:

Requisito Qué exige la norma
Precio anterior visible Mostrar el precio más bajo de los 30 días previos junto al precio rebajado
Cálculo del precio anterior El más bajo aplicado en los 30 días precedentes, sea cual sea el motivo de ese precio
Productos nuevos Exentos solo si es la primera vez que se ponen a la venta, no por llevar menos de 30 días
Perecederos próximos a caducar Los precios de liquidación por desperdicio alimentario no cuentan en el cálculo de los 30 días
Descuento mínimo o máximo No se puede condicionar una promoción a un porcentaje de reducción fijo

A qué te arriesgas si no cumples la directiva Ómnibus

Esto no es una recomendación de buenas prácticas, es una infracción tipificada, un delito, no es broma y las multas son tremendas.

El artículo 49 del texto refundido de la Ley General para la Defensa de los Consumidores y Usuarios clasifica las sanciones en tres niveles.

  • Leves, que van de 150 a 10.000 €.
  • Graves de 10.001 a 100.000 € (con posibilidad de superar esa cifra hasta 4 o 6 veces el beneficio ilícito obtenido).
  • Muy graves llegan de 100.001 € hasta 1.000.000 €.

Y no es solo sobre el papel, ni de lejos, ya se han estrenado y con honores, el Ministerio de Derechos Sociales, Consumo y Agenda 2030 sancionó a siete empresas por subir el precio de varios productos justo antes del Black Friday para bajarlo después a su valor original y presentarlo como oferta.

El conjunto de las multas rondó los 350.000 € y una de las empresas recurrentes tuvo que depositar un aval de 110.000 € mientras se resuelve su recurso. Imagino que no te sobra el dinero ¿verdad?

Para detectarlo, la Dirección General de Consumo usó la Price Reduction Tool, una herramienta de la propia Comisión Europea que monitoriza precios en tiempo real durante campañas como esta.

Por si te lo estás planteando, la propia Comisión Europea ya avisó de que subir el precio antes de bajarlo no cuela, ni presentándolo como «precio futuro».

El precio anterior sigue siendo el más bajo real de los últimos 30 días, ponga lo que ponga en el cartel de la oferta.

Y ya que estamos una aclaración rápida, porque el nombre podría llevar a confusión, y es que esto no tiene nada que ver con el Digital Omnibus del que tanto se oye hablar últimamente, ese paquete que tiene que ver con el RGPD y las cookies. Ese otro Omnibus sigue paseándose por Bruselas, aún sin texto definitivo. La directiva Ómnibus de precios de la que te hablo aquí lleva aplicándose desde hace tiempo y no tiene nada pendiente de aprobar, está de un vigente que asusta.

Por qué el precio tachado de WooCommerce no te libra de nada

Siento decirlo, pero no, eso de los precios tachados no sirve de nada, ni de lejos, te lo explico.

Como sabes, WooCommerce tacha el precio habitual del producto y muestra al lado el precio de oferta, así que parece que ya cumples, per va a ser que no.

La realidad es que el precio habitual solo coincide con el precio anterior legal si no has tocado ese precio ni hecho ninguna promoción en los últimos 30 días. Si encadenas rebajas, el tachado de WooCommerce deja de servir como prueba de nada.

Es exactamente el truco que le costó el expediente a esas siete empresas del punto anterior, subir el precio unos días antes para que el descuento posterior parezca mayor de lo que es en realidad.

WooCommerce te deja hacerlo sin ningún aviso, porque el plugin no sabe nada de la directiva Ómnibus, solo compara el precio habitual con el de oferta rebajado que tú le pongas.

Plugins que ayudan con a cumplir la directiva Ómnibus de precios

Aquí no hace falta reinventar nada, hay opciones ya disponibles, solo te queda elegir con cabeza:

  • Omnibus — show the lowest price, de iWorks (gratuito): Con más de 10.000 instalaciones activas, aunque sin cambios funcionales desde marzo de 2024 (la actualización de 2025 solo tocó el módulo de valoraciones), probado hasta WordPress 6.8.5 y sin traducción al español. Ojo con esto, pues varias reseñas señalan que en el primer descuento de un producto sin histórico previo, el plugin muestra el propio precio rebajado como si fuera el anterior, justo el fallo que no te puedes permitir, pruébalo antes de dejarlo activo pensando que cumple.
  • WP Desk Omnibus for WooCommerce (de pago): Actualizado el 28 de mayo de 2026, con interpretación configurable según el país y soporte activo, buena opción si prefieres pagar por tranquilidad.
  • FleekCode Omnibus Price Tracker (gratuito): Con tabla propia en base de datos en lugar de postmeta y base de instalación todavía pequeña. Pruébalo antes de pagar por el anterior, igual sin necesidad.

Con cualquiera de los tres cumples suficientemente, salvo que se confirme lo de WP Desk, en cuyo caso habría que descartar ese. Revísalos en una tienda de pruebas que tenga de todo antes de instalar nada definitivamente, porque el panorama de plugins cambia con el tiempo y lo que te cuento aquí tiene fecha de caducidad.

Un apaño con código si tu caso es de los sencillos

Si vendes solamente productos simples, nada de variables, y no te apetece meter un plugin enorme más para esto, aquí tienes un código que hace lo imprescindible.

Además, para que no creas que es una birria, tiene una salvaguarda que muchos plugins comerciales no tienen, y es que nunca inventa un precio anterior, si no hay 30 días reales de histórico no muestra nada:

<?php

/***
 * Plugin Name: Registro de precios mínimos según la Directiva Ómnibus de la UE
 * Plugin URI: https://servicios.ayudawp.com/
 * Description: Muestra un precio anterior solo si hay un historial real de al menos 30 días. Nunca inventa ni calcula un precio anterior. Solo para productos simples.
 * Version: 1.0
 * Author: Fernando Tellado
 * Author URI: https://ayudawp.com/
 * License: GPL2
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: registro-precios-omnibus
 * Domain Path: /languages
*/

/**
 * Registro de precios mínimos previsto en la Directiva Ómnibus de la UE (Directiva (UE) 2019/2161)
 * Solo muestra un precio anterior cuando hay un historial real registrado de al menos 30 días
 * Nunca inventa ni calcula un precio anterior. Solo para productos simples
 */

// Registra el precio cada vez que se guarde un producto, solo si ha cambiado
add_action( 'woocommerce_update_product', 'ayudawp_omnibus_log_price', 20, 2 );
function ayudawp_omnibus_log_price( $product_id, $product ) {

if ( ! $product || ! $product->is_type( 'simple' ) ) {
return; // Variable products need a dedicated plugin, not this snippet.
}

$current_price = $product->get_regular_price();

if ( '' === $current_price ) {
return;
}

$log        = get_post_meta( $product_id, '_ayudawp_omnibus_price_log', true );
$log        = is_array( $log ) ? $log : array();
$last_entry = end( $log );

if ( ! $last_entry || (float) $last_entry['price'] !== (float) $current_price ) {
$log[] = array(
'price' => (float) $current_price,
'date'  => current_time( 'timestamp' ),
);
}

// Eliminar las entradas con más de 45 días de antigüedad (el plazo legal de 30 días más un margen de seguridad)
$cutoff = current_time( 'timestamp' ) - ( 45 * DAY_IN_SECONDS );
$log    = array_values( array_filter( $log, function( $entry ) use ( $cutoff ) {
return $entry['date'] >= $cutoff;
} ) );

update_post_meta( $product_id, '_ayudawp_omnibus_price_log', $log );
}

// Mostrar únicamente el precio anterior con un historial acumulado de al menos 30 días reales
add_action( 'woocommerce_single_product_summary', 'ayudawp_omnibus_display_prior_price', 11 );
function ayudawp_omnibus_display_prior_price() {

global $product;

if ( ! $product || ! $product->is_type( 'simple' ) || ! $product->is_on_sale() ) {
return;
}

$log = get_post_meta( $product->get_id(), '_ayudawp_omnibus_price_log', true );
$log = is_array( $log ) ? $log : array();

if ( empty( $log ) ) {
return; // No history yet: show nothing rather than guessing.
}

$days_of_history = ( current_time( 'timestamp' ) - $log[0]['date'] ) / DAY_IN_SECONDS;

if ( $days_of_history < 30 ) {
return; // Core safeguard: never show a prior price without a real 30-day track record.
}

$window_start = current_time( 'timestamp' ) - ( 30 * DAY_IN_SECONDS );
$in_window    = array_filter( $log, function( $entry ) use ( $window_start ) {
return $entry['date'] >= $window_start;
} );

if ( empty( $in_window ) ) {
return;
}

$lowest_price = min( wp_list_pluck( $in_window, 'price' ) );

if ( $lowest_price <= (float) $product->get_sale_price() ) {
return; // Nunca muestra un precio anterior que no sea realmente inferior al precio rebajado
}

echo '<p class="ayudawp-omnibus-prior-price">' .
esc_html__( 'Precio anterior: ', 'ayudawp' ) .
wp_kses_post( wc_price( $lowest_price ) ) .
'</p>';
}

Este código registra el precio cada vez que guardas el producto, solo si ha cambiado, y purga las entradas de más de 45 días (30 de la ley más un margen de seguridad). En la parte visible de la web solo pinta el precio anterior cuando ya hay al menos 30 días reales de histórico acumulado, nunca antes.

Y para que no te lleves un susto, solo funciona con productos simples, no cuenta los cambios hechos por edición rápida, importación masiva o la API REST, y no sustituye a un plugin dedicado si tu catálogo es grande o vendes productos variables.

El código te lo dejo preparado como plugin, por si quieres subirlo como plugin o a mu-plugins, lo que prefieras. Si eres más de añadirlo como código quítale toda la cabecera que lo identifica como plugin, eso te sobra, y el <?php inicial, o no funcionará.

Si quieres más para eso están las opciones del punto anterior de los plugins.

Rebajas encadenadas, el caso donde más se la juegan las tiendas

Este es el escenario que más dudas genera, y por suerte la propia Comisión Europea lo aclaró bastante detallado en una comunicación publicada en el Diario Oficial de la UE en diciembre de 2021.

Hay dos situaciones muy distintas, y conviene no confundirlas:

  • Campañas separadas con el precio subiendo entre medias (Black Friday, luego Navidad, luego rebajas de enero): Se aplica la norma general sin excepciones. El precio anterior de cada nueva rebaja tiene que ser el más bajo de, como mínimo, los últimos 30 días, y eso incluye el precio de la promoción anterior. Si bajaste un producto a 80 € en el Black Friday, dos semanas después no puedes anunciarlo «rebajado» tomando como referencia los 100 € de precio normal: tu referencia sigue siendo 80 €.
  • Reducción progresiva dentro de una misma campaña, sin interrupción y sin que el precio suba en ningún momento: Aquí sí se puede mantener el precio previo a toda la campaña como referencia constante en cada escalón. Es la excepción que prevé el propio artículo 6 bis, aunque no he encontrado que España la haya transpuesto de forma explícita, así que el mensaje práctico y seguro es aplicar siempre la regla general de los 30 días, sin dar el atajo por hecho.

Si programas varias campañas con esa joya de plugin llamado Multiple Sale Prices Scheduler, ten en cuenta que el plugin programa los cambios de precio, no calcula el precio anterior legal por ti. Combínalo con alguna de las opciones de este artículo si vas a encadenar promociones.

Lo demás que trae la directiva Ómnibus y no tiene que ver con precios

El artículo 6 bis es la pieza que más te afecta si vendes con descuentos, pero la directiva Ómnibus trae más obligaciones que quizá también te toca cumplir.

Me refiero a cosas como verificar que las reseñas de tus productos vienen de compradores reales, dar una información mínima al consumidor antes de la compra, identificar con claridad la publicidad de influencers, y reconocer que los servicios «gratuitos» pagados con datos personales también generan derechos para el consumidor.

Cada una de estas otras cuestiones a tener en cuenta da para su propio artículo, así que aquí me quedo solo con el aviso, para que tengas en cuenta que esto es mucho más que solo precios.

Listado rápido para cumplir la directiva Ómnibus de precios

Si vendes con descuentos en WooCommerce, sí, y aquí te dejo el resumen para revisar tu tienda de un vistazo:

Requisito Qué exige la norma Cómo lo cubres
Precio anterior visible Precio más bajo de los 30 días previos junto al rebajado Plugin específico, o el código de este artículo en productos simples
Cálculo en campañas sucesivas Incluye siempre la rebaja anterior si cayó en los últimos 30 días Plugin específico con histórico real, el snippet de este artículo no cubre esto
Productos nuevos Exentos solo por ser primera venta, nunca por antigüedad Revisa que el plugin que elijas distinga bien este caso
Perecederos con desperdicio alimentario Esos precios no cuentan en el cálculo de los 30 días Revisa la configuración si vendes este tipo de producto
Descuento mínimo o máximo No se puede condicionar una promoción a un porcentaje fijo Revisión manual de tus propias campañas
Reseñas, información previa, publicidad de influencers Resto de obligaciones de la directiva Ómnibus Pendiente de artículo específico

Nada más por ahora, dale una vuelta a tu catálogo antes de la próxima campaña que actives, sea cual sea. Si te ha quedado alguna duda sobre tu caso concreto, ya sabes dónde encontrarme, en los comentarios aquí abajo.

Compártelo en tus redes
Resúmelo con tu IA

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en las estrellas para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 3

¡Todavía no hay votos! Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!



Sobre el autor

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio