Cómo activar la búsqueda por SKU en WooCommerce (con código)
Hola, amigos de Piensa para Crear. 👋
Si tienes una tienda online en WooCommerce, sabes que el SKU (Stock Keeping Unit) es el código único que identifica cada producto. Es la forma más rápida de encontrar un artículo específico cuando tienes cientos o miles de productos.
Pero aquí viene el problema: WooCommerce, por defecto, no busca por SKU. Si un cliente escribe el código exacto de un producto en el buscador, no lo encuentra. Y eso es frustrante.
En este post te explico cómo activar la búsqueda por SKU en tu tienda con un fragmento de código que pegas en functions.php. Es un cambio pequeño que puede marcar una gran diferencia en la experiencia de compra.
🧠 ¿Por qué WooCommerce no busca por SKU?
Cuando un cliente busca algo en tu tienda, WooCommerce usa el buscador nativo de WordPress, que busca en:
Título del producto
Descripción
Extracto
Pero no busca en los metadatos del producto, y el SKU se guarda como un metadato (_sku).
Resultado: Si un cliente busca "CAM-001" (el SKU de una camiseta), WooCommerce no lo encuentra, aunque el producto exista.
🛠️ La solución: código en functions.php
Añade este fragmento al archivo functions.php de tu tema (o del tema hijo):
/* Activar búsqueda por SKU en la web */ function search_by_sku( $search, $query_vars ) { global $wpdb; if ( isset( $query_vars->query['s'] ) && ! empty( $query_vars->query['s'] ) ) { $args = array( 'posts_per_page' => -1, 'post_type' => 'product', 'meta_query' => array( array( 'key' => '_sku', 'value' => $query_vars->query['s'], 'compare' => 'LIKE' ) ) ); $posts = get_posts( $args ); if ( empty( $posts ) ) return $search; $get_post_ids = array(); foreach ( $posts as $post ) { $get_post_ids[] = $post->ID; } } return $search; } add_filter( 'posts_search', 'search_by_sku', 999, 2 );
🔍 ¿Cómo funciona este código?
1. Engancha al filtro posts_search
add_filter( 'posts_search', 'search_by_sku', 999, 2 );
El filtro posts_search permite modificar la consulta SQL que WordPress usa para buscar. Se ejecuta después de que WordPress haya construido la búsqueda por defecto, así que podemos añadir la búsqueda por SKU sin eliminarla.
La prioridad 999 es alta (se ejecuta tarde), para asegurarnos de que otros filtros ya hayan hecho su trabajo.
2. Comprueba que hay una búsqueda activa
if ( isset( $query_vars->query['s'] ) && ! empty( $query_vars->query['s'] ) ) {
Si no hay término de búsqueda, no hace nada. Solo actúa cuando el usuario escribió algo.
3. Busca productos por SKU
$args = array( 'posts_per_page' => -1, 'post_type' => 'product', 'meta_query' => array( array( 'key' => '_sku', 'value' => $query_vars->query['s'], 'compare' => 'LIKE' ) ) ); $posts = get_posts( $args );
Busca en todos los productos (posts_per_page => -1) cuyo metadato _sku contenga el término buscado (compare => LIKE).
4. Si no hay resultados, devuelve la búsqueda original
if ( empty( $posts ) ) return $search;
Si no encuentra productos por SKU, no modifica la búsqueda. Así no rompe la búsqueda normal por título o descripción.
5. Devuelve la búsqueda modificada (aunque en este caso no la usa)
return $search;
⚠️ Nota importante: Este código no modifica realmente la consulta SQL. La búsqueda por SKU se hace con get_posts(), pero el resultado no se usa para modificar $search. En la práctica, este código no funciona del todo porque no añade los IDs encontrados a la consulta principal.
La versión correcta sería:
/* Activar búsqueda por SKU en la web */ function search_by_sku( $search, $query_vars ) { global $wpdb; if ( isset( $query_vars->query['s'] ) && ! empty( $query_vars->query['s'] ) ) { $args = array( 'posts_per_page' => -1, 'post_type' => 'product', 'meta_query' => array( array( 'key' => '_sku', 'value' => $query_vars->query['s'], 'compare' => 'LIKE' ) ) ); $posts = get_posts( $args ); if ( empty( $posts ) ) return $search; $get_post_ids = array(); foreach ( $posts as $post ) { $get_post_ids[] = $post->ID; } // Añadir los IDs encontrados a la búsqueda principal $search .= " OR {$wpdb->posts}.ID IN (" . implode( ',', $get_post_ids ) . ")"; } return $search; } add_filter( 'posts_search', 'search_by_sku', 999, 2 );
La diferencia: La línea $search .= " OR ..." añade los IDs de los productos encontrados por SKU a la consulta SQL principal. Sin esto, el código no tiene efecto.
📄 Código completo y funcional
/* Activar búsqueda por SKU en la web */ function search_by_sku( $search, $query_vars ) { global $wpdb; if ( isset( $query_vars->query['s'] ) && ! empty( $query_vars->query['s'] ) ) { $args = array( 'posts_per_page' => -1, 'post_type' => 'product', 'meta_query' => array( array( 'key' => '_sku', 'value' => $query_vars->query['s'], 'compare' => 'LIKE' ) ) ); $posts = get_posts( $args ); if ( empty( $posts ) ) return $search; $get_post_ids = array(); foreach ( $posts as $post ) { $get_post_ids[] = $post->ID; } // Añadir los IDs encontrados a la búsqueda principal $search .= " OR {$wpdb->posts}.ID IN (" . implode( ',', $get_post_ids ) . ")"; } return $search; } add_filter( 'posts_search', 'search_by_sku', 999, 2 );
📝 Cómo implementarlo correctamente
Opción A: functions.php del tema hijo
Ve a Apariencia → Editor de archivos del tema.
Selecciona functions.php de tu tema hijo (nunca del tema padre).
Pega el código al final del archivo.
Guarda.
Opción B: Plugin Code Snippets (recomendado)
Si no quieres tocar archivos:
Instala y activa el plugin Code Snippets.
Ve a Snippets → Add New.
Pega el código.
Actívalo.
Ventaja: Puedes activarlo/desactivarlo sin tocar functions.php. Si algo sale mal, lo desactivas y listo.
🧪 Cómo verificar que funciona
Crea un producto de prueba con un SKU específico (ej.
TEST-001).Ve a la tienda y usa el buscador.
Escribe el SKU (
TEST-001).Verifica que el producto aparezca en los resultados.
Si no aparece:
Revisa que el producto tenga SKU asignado.
Verifica que el código esté bien pegado (sin errores de sintaxis).
Comprueba que no haya otro plugin de búsqueda sobrescribiendo el filtro.
⚠️ Consideraciones importantes
1. Rendimiento
La consulta get_posts() con posts_per_page => -1 puede ser pesada si tienes miles de productos. Para tiendas grandes, considera limitar la búsqueda o usar índices en la base de datos.
2. Búsqueda parcial (LIKE)
Con compare => 'LIKE', si el cliente escribe "001", encontrará "TEST-001", "PROD-001", etc. Es útil, pero puede devolver muchos resultados.
3. Compatibilidad con otros plugins
Si usas un plugin de búsqueda avanzada (SearchWP, Relevanssi), puede entrar en conflicto. En ese caso, usa la función de búsqueda por SKU del plugin si la tiene.
4. Seguridad
El código usa $wpdb y get_posts(), que manejan la sanitización internamente. Pero siempre verifica que el término de búsqueda esté limpio antes de usarlo en consultas SQL.
5. WooCommerce moderno
En versiones recientes de WooCommerce, el SKU se guarda como taxonomía (product_sku) además de como metadato. Si tu versión lo hace así, necesitas buscar en la taxonomía en lugar de en _sku.
🎯 Conclusión: una mejora que tus clientes agradecerán
Activar la búsqueda por SKU en WooCommerce es una de esas mejoras que parecen pequeñas pero tienen un impacto real:
✅ Clientes que buscan por código encuentran el producto.
✅ Menos frustración, más conversiones.
✅ Útil para tiendas B2B o con catálogos grandes.
Resumen del proceso:
Añade el código (versión corregida) a
functions.phpo Code Snippets.Verifica que funciona con un producto de prueba.
Ajusta si tu tienda es muy grande (rendimiento).
💬 ¿Necesitas ayuda para personalizar la búsqueda de tu tienda WooCommerce?
En Piensa para Crear ofrecemos servicios de personalización, optimización y desarrollo para tiendas online.
Contáctanos aquí y hablemos.
❓ Preguntas frecuentes
¿Qué es el SKU?
Es el código único que identifica cada producto en tu tienda. Se usa para gestionar inventario y para que los clientes encuentren productos específicos.
¿Dónde pongo el código?
En el archivo functions.php de tu tema hijo, o usa el plugin Code Snippets.
¿Por qué el código original no funcionaba?
Porque no añadía los IDs encontrados a la consulta principal. La versión corregida incluye la línea $search .= " OR ...".
¿Funciona con búsquedas parciales?
Sí. Con compare => 'LIKE', si buscas "001", encuentra "TEST-001", "PROD-001", etc.
¿Afecta al rendimiento de mi tienda?
Puede afectarlo si tienes miles de productos, porque la consulta busca en todos. Para tiendas grandes, considera optimizar o usar un plugin especializado.
¿Es compatible con plugins de búsqueda avanzada?
Puede entrar en conflicto. Si usas SearchWP o Relevanssi, revisa si ya tienen búsqueda por SKU integrada.
¿Qué pasa si mi WooCommerce guarda el SKU como taxonomía?
En versiones recientes, el SKU también se guarda como taxonomía. En ese caso, necesitas modificar el código para buscar en la taxonomía en lugar de en el metadato _sku.
¿Puedo buscar por SKU en el admin de WordPress?
Este código afecta a la búsqueda del front-end. Para el admin, WooCommerce ya permite buscar por SKU en la lista de productos.
Comentarios
Publicar un comentario