Cómo acelerar las búsquedas del filtro de texto de WOOF
Si tu sitio tiene un gran número de productos (más de 3000) y experimentas un rendimiento de búsqueda lento con [woof_text_filter], esta guía te ayudará a optimizarlo.
El Problema
Por defecto, HUSKY utiliza el método SQL JOIN para las búsquedas, lo que puede volverse lento en bases de datos grandes. Las búsquedas de texto que tardan más de 10 segundos y los filtros de categoría que causan retrasos son síntomas comunes.
Solución 1: Habilitar Método de Búsqueda Rápida (post__in)
El plugin tiene un método de búsqueda más rápido incorporado que utiliza post__in en lugar de SQL JOINs. Esto es mucho más eficiente para catálogos de productos grandes.
Implementación
Agrega esta única línea a tu tema’s functions.php archivo:
add_filter('woof_husky_query_post__in', '__return_true');
Resultados Esperados
- Velocidad de búsqueda de texto: de más 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 de Categorías
Si el filtrado de categorías sigue siendo lento después de habilitar la búsqueda rápida, tiene 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 optimizando la term_relationships y term_taxonomy tablas.
Agrega 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 el indicador de finalización para evitar re-ejecuciones
Resultados Esperados:
- Filtrado de categorías: De varios segundos a < 1 segundo
- Solución permanente (los índices permanecen después de la eliminación del código)
Opción B: Consultas de caché de categorías
Si no puedes modificar la estructura de la base de datos o quieres un enfoque diferente, el almacenamiento en caché proporciona una buena mejora del rendimiento.
Agrega 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ía durante 1 hora
- Genera una clave de caché única por combinación de filtros
- Devuelve IDs de productos cacheados en búsquedas idénticas posteriores
Resultados Esperados:
- Primera búsqueda: Velocidad normal
- Búsquedas idénticas subsiguientes: 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 (post__in filter) – esta es la solución más fácil y efectiva.
Para problemas de velocidad de filtrado de categorías:
Usa la Solución 2A (Índices de base de datos) si:
- Tienes acceso a la base de datos
- Quieres optimización permanente
- Necesitas una velocidad constante para todas las consultas
Usa la Solución 2B (Caché) si:
- No puedes modificar la estructura de la base de datos
- Tus usuarios repiten búsquedas con frecuencia
- Tienes patrones de búsqueda variables
Combinando Soluciones:
Puedes usar todas las soluciones juntas de forma segura para un máximo rendimiento:
- Habilitar
post__inmétodo (Solución 1) - Añadir índices a la base de datos (Solución 2A)
- Añadir caché (Solución 2B) – opcional para un impulso extra
Notas importantes
- Requiere Tema Hijo: Añade siempre el código a un child theme’s
functions.phppara evitar pérdidas durante las actualizaciones del tema - Haz una copia de seguridad primero: Antes de añadir índices a la base de datos, haz una copia de seguridad de tu base de datos
- Entorno de Pruebas: Prueba las soluciones en un sitio de staging primero si es posible
- Limpieza de caché: Si usas una solución de caché, recuerda que los resultados cacheados se actualizan cada hora
Probando tus cambios
- Agrega el código a tu
functions.php - Limpiar todas las cachés (navegador, WordPress, servidor)
- Probar una búsqueda que antes era lenta.
- Monitoriza la mejora del tiempo de búsqueda
Optimización del Lado del Servidor
Si estas soluciones no proporcionan una mejora suficiente, considera:
- Actualización a un hosting más rápido
- Habilitar el almacenamiento en caché de objetos (Redis/Memcached)
- Optimización de la configuración de tu servidor de base de datos
- Reducción del número de plugins activos
Fuente: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/