HUSKY - Product Filter for WooCommerce

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:

  1. Activar el método post__in (Solución 1)
  2. Añadir índices de base de datos (Solución 2A)
  3. 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.php de 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

  1. Añade el código a tu functions.php
  2. Limpia todas las cachés (navegador, WordPress, servidor)
  3. Prueba una búsqueda que antes era lenta
  4. 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/