Cómo acelerar la búsqueda de productos de WooCommerce (Filtro de texto de HUSKY)
Si tu sitio tiene un gran número de productos (3000+) y la búsqueda de productos de WooCommerce a través de [woof_text_filter] es lenta, esta guía te ayudará a optimizarla.
El problema
Por defecto, HUSKY utiliza el método SQL JOIN para las búsquedas, lo cual puede volverse lento en bases de datos grandes. Las búsquedas de texto que tardan 10+ segundos y el filtrado por categorías que causa retrasos son síntomas comunes.
Solución 1: Activar el método de búsqueda rápida (post__in)
El plugin tiene un método de búsqueda más rápido incorporado que usa post__in en lugar de SQL JOINs. Esto es mucho más eficiente para catálogos de productos grandes.
Implementación
Añade esta única línea al archivo functions.php de tu tema:
add_filter('woof_husky_query_post__in', '__return_true');
Resultados esperados
- Velocidad de búsqueda de texto: De 10+ segundos a 1-3 segundos
- Funciona inmediatamente después de añadir el código
- No se requieren cambios en la base de datos
Solución 2: Optimizar el filtrado por categorías
Si el filtrado por categorías sigue siendo lento después de activar la búsqueda rápida, tienes dos opciones:
Opción A: Añadir índices de base de datos (Recomendado)
Los índices de base de datos aceleran drásticamente las consultas de categorías al optimizar las tablas term_relationships y term_taxonomy.
Añade este código a tu functions.php:
add_action('admin_init', 'add_woof_category_indexes', 999);
function add_woof_category_indexes() {
global $wpdb;
// Run only once
if (get_option('woof_category_indexes_added')) {
return;
}
// Add index to term_relationships table
$wpdb->query("
ALTER TABLE {$wpdb->term_relationships}
ADD INDEX woof_cat_idx (object_id, term_taxonomy_id)
");
// Add index to term_taxonomy table
$wpdb->query("
ALTER TABLE {$wpdb->term_taxonomy}
ADD INDEX woof_tax_idx (taxonomy, term_id)
");
// Mark as completed
update_option('woof_category_indexes_added', true);
}
Cómo funciona:
- Se ejecuta una vez en la primera carga de la página de administración
- Crea índices de base de datos optimizados
- Almacena un indicador de finalización para evitar volver a ejecutarse
Resultados esperados:
- Filtrado por categorías: De varios segundos a < 1 segundo
- Solución permanente (los índices permanecen después de eliminar el código)
Opción B: Almacenar en caché las consultas de categorías
Si no puedes modificar la estructura de la base de datos o prefieres un enfoque diferente, el almacenamiento en caché proporciona una buena mejora de rendimiento.
Añade este código a tu functions.php:
add_filter('woof_get_query_args', 'cache_woof_category_queries', 10, 1);
function cache_woof_category_queries($args) {
// Only cache when category filter is used
if (empty($_GET['product_cat'])) {
return $args;
}
// Generate cache key based on current filters
$cache_key = 'woof_cat_' . md5(serialize($_GET));
$cached_ids = get_transient($cache_key);
// Return cached results if available
if ($cached_ids !== false) {
$args['post__in'] = $cached_ids;
return $args;
}
return $args;
}
add_action('pre_get_posts', 'store_woof_category_cache', 999);
function store_woof_category_cache($query) {
// Store query results in cache
if (!empty($_GET['product_cat']) && !empty($query->posts)) {
$cache_key = 'woof_cat_' . md5(serialize($_GET));
$post_ids = wp_list_pluck($query->posts, 'ID');
set_transient($cache_key, $post_ids, HOUR_IN_SECONDS);
}
}
Cómo funciona:
- Almacena en caché los resultados del filtro de categorías durante 1 hora
- Genera una clave de caché única por combinación de filtros
- Devuelve los IDs de productos almacenados en caché en búsquedas idénticas posteriores
Resultados esperados:
- Primera búsqueda: Velocidad normal
- Búsquedas idénticas posteriores: Resultados casi instantáneos
- La caché caduca automáticamente después de 1 hora
¿Qué solución usar?
Para problemas de velocidad de búsqueda de texto:
Usa la Solución 1 (filtro post__in) – esta es la solución más fácil y efectiva.
Para problemas de velocidad de filtrado por categorías:
Usa la Solución 2A (Índices de base de datos) si:
- Tienes acceso a la base de datos
- Quieres una optimización permanente
- Necesitas velocidad constante para todas las consultas
Usa la Solución 2B (Almacenamiento en caché) si:
- No puedes modificar la estructura de la base de datos
- Tus usuarios a menudo repiten las mismas búsquedas
- Tienes patrones de búsqueda variables
Combinar soluciones:
Puedes usar todas las soluciones juntas de forma segura para lograr el máximo rendimiento:
- Activar el método
post__in(Solución 1) - Añadir índices de base de datos (Solución 2A)
- Añadir almacenamiento en caché (Solución 2B) – opcional para un impulso extra
Notas importantes
- Se requiere un tema hijo: Añade siempre el código al
functions.phpde un tema hijo para evitar pérdidas durante las actualizaciones del tema - Haz una copia de seguridad primero: Antes de añadir índices de base de datos, haz una copia de seguridad de tu base de datos
- Entorno de pruebas: Prueba las soluciones en un sitio de pruebas primero si es posible
- Limpiar la caché: Si usas la solución de almacenamiento en caché, recuerda que los resultados en caché se actualizan cada hora
Probar tus cambios
- Añade el código a tu
functions.php - Limpia todas las cachés (navegador, WordPress, servidor)
- Prueba una búsqueda que antes era lenta
- Supervisa la mejora en el tiempo de búsqueda
Optimización del lado del servidor
Si estas soluciones no proporcionan suficiente mejora, considera:
- Actualizar a un alojamiento más rápido
- Activar el almacenamiento en caché de objetos (Redis/Memcached)
- Optimizar la configuración de tu servidor de base de datos
- Reducir el número de plugins activos
Fuente: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/