Si manejas una tienda en WooCommerce con muchos productos, seguro en algún momento quisiste ver rápidamente cuáles tienen descuento sin tener que revisarlos uno por uno. Aunque WooCommerce no ofrece esta opción por defecto, con un pequeño ajuste podemos añadir un filtro en el panel de administración para facilitar esta tarea.
¿Por qué filtrar productos con rebaja?
Cuando tienes una tienda con muchas referencias, identificar qué productos tienen descuento te ayuda a gestionar mejor las promociones, ajustar precios o revisar el inventario sin perder tiempo. Afortunadamente, podemos agregar un filtro fácilmente con un poco de código.
Agregando el filtro de productos rebajados
- Para que este filtro funcione, puedes agregar el siguiente código en tu sitio de diferentes maneras:
- En un child theme: Una buena opción si sueles personalizar tu tema y quieres mantener los cambios organizados. Aquí te explico cómo crear un child theme en Elementor.
- Usando el plugin Code Snippets: Si prefieres no modificar archivos del tema, este plugin permite agregar código de manera fácil y segura. Aquí tienes una guía sobre cómo usarlo.
- En un plugin personalizado de funciones para WooCommerce: Ideal si prefieres centralizar este tipo de ajustes en un solo lugar. Te explico cómo crear uno aquí.
Ahora, agreguemos el filtro con este código:
/* Filtro productos por estado de oferta en el administrador de Woocommerce*/
add_action( 'restrict_manage_posts', 'sw_filtrar_productos_rebajados', 9999 );
function sw_filtrar_productos_rebajados() {
global $typenow;
if ( 'product' === $typenow ) {
$selected = isset( $_GET['sale_status'] ) ? $_GET['sale_status'] : '';
?>
<select name="sale_status">
<option value="">Filtrar rebajados</option>
<option value="on_sale" <?php selected( $selected, 'on_sale' ); ?>>Con descuento</option>
<option value="not_on_sale" <?php selected( $selected, 'not_on_sale' ); ?>>Sin descuento</option>
</select>
<?php
}
}
add_filter( 'request', 'sw_filtrar_productos_estado_oferta' );
function sw_filtrar_productos_estado_oferta( $query_vars ) {
global $typenow;
if ( 'product' === $typenow && isset( $_GET['sale_status'] ) && '' !== $_GET['sale_status'] ) {
$sale_status = sanitize_text_field( wp_unslash( $_GET['sale_status'] ) );
if ( 'on_sale' === $sale_status ) {
// Mostrar solo productos con precio en oferta
$query_vars['meta_query'][] = array(
'key' => '_sale_price',
'value' => '',
'compare' => '!=',
);
} elseif ( 'not_on_sale' === $sale_status ) {
// Mostrar solo productos sin rebaja
$query_vars['meta_query'][] = array(
'relation' => 'OR',
array(
'key' => '_sale_price',
'value' => '',
'compare' => '='
),
array(
'key' => '_sale_price',
'compare' => 'NOT EXISTS' // Para productos que nunca han tenido rebaja
)
);
}
}
return $query_vars;
}
¿Cómo funciona este código?
Básicamente, estamos añadiendo una opción de filtro en el panel de administración de productos:
- Creamos un selector desplegable: Con la función sw_filtrar_productos_rebajados(), añadimos un filtro en la parte superior de la lista de productos en WooCommerce. Este filtro se implementa utilizando el gancho restrict_manage_posts de WordPress, que permite insertar elementos personalizados en las tablas de administración antes del botón de «Filtrar». Puedes obtener más información sobre este gancho en la documentación oficial de WordPress.
- Aplicamos el filtro a la consulta de productos: La función sw_filtrar_productos_estado_oferta() modifica la consulta de productos para mostrar solo aquellos con o sin descuento, según la selección realizada en el filtro.
¿Qué resultado obtendrás?
Después de agregar este código, verás un nuevo filtro en la administración de productos de WooCommerce, con estas opciones:
Rebajados: Muestra solo los productos que tienen un precio en oferta.
Sin rebajar: Muestra solo los productos sin descuento activo.
Espero que te resulte útil y te permita ahorrar tanto tiempo como a mis clientes. Si tienes alguna duda, no dudes en dejarla en los comentarios. 🚀