Crear formulario de búsqueda por categoría de producto y palabras clave en WooCommerce

14 abr 2015, 13:45:38
Vistas: 24.3K
Votos: 3

Quiero construir un formulario de búsqueda basado en categorías y palabras clave. Tengo el siguiente formulario:

<form role="search" method="get" id="searchform_special" action="<?php echo esc_url( home_url( '/'  ) ); ?>">
                      <div>
                        <label class="screen-reader-text" for="s"><?php _e( 'Buscar por:', 'woocommerce' ); ?></label>
                        <input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="<?php _e( 'Buscar productos', 'woocommerce' ); ?>" />
                       <input type="submit" id="searchsubmit" value="<?php echo esc_attr__( 'Buscar' ); ?>" />
                       <input type="hidden" name="post_type" value="product" />
                       <input type="hidden" id="home_url" value="<?php echo esc_url( home_url( '/'  ) ); ?>" />
                       <input type="hidden" id="categ_base_lang" value="<?php echo _x('product-category', 'slug', 'woocommerce') ?>" />
                      </div>
                    </form>

Solo funciona para palabras clave. Cuando lo actualizo para búsqueda por categoría no funciona. La captura de pantalla de mi página se muestra a continuación.

Captura de pantalla del formulario de búsqueda en WooCommerce

Quiero hacer este tipo de búsqueda en el encabezado. Por favor, ¿alguien puede ayudarme?

0
Todas las respuestas a la pregunta 1
2

Acabo de implementarlo para un cliente, tendrás que hacerlo en la acción pre_get_posts. Esto significa que agregarás parámetros a la consulta de WordPress antes de que devuelva las publicaciones.

Añade esto a functions.php:

// funcionalidad de búsqueda avanzada
function advanced_search_query($query) {

    if($query->is_search()) {
        // búsqueda por términos de categoría.
        if (isset($_GET['category']) && !empty($_GET['category'])) {
            $query->set('tax_query', array(array(
                'taxonomy' => '***el_slug_de_taxonomía_de_tu_categoría***',
                'field' => 'slug',
                'terms' => array($_GET['category']) )
            ));
        }    
    }
    return $query;
}
add_action('pre_get_posts', 'advanced_search_query', 1000);

El código anterior funciona asumiendo que pasaste una variable category. Puedes hacerlo creando una etiqueta select con 'category' como nombre:

<select name="category">
    <option value="***cat_slug***">Nombre de categoría</option>
    <option value="***cat_slug***">Nombre de categoría</option>
    <option value="***cat_slug***">Nombre de categoría</option>
</select>

El formulario completo:

<form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <!-- Con este campo oculto puedes definir un tipo de publicación específico. -->
    <input type="hidden" name="post_type" value="your_post_type" />
    <input name="s" type="text" />
    <select name="category">
        <!-- Inserta aquí todas las etiquetas option que desees, con el slug de categoría como valor -->
    </select>
    <button type="submit">Enviar</button>
</form>

Una vez enviado, $_GET[] contendrá s, post_type y category. s y post_type son usados por la búsqueda predeterminada de WP, y category se usará en pre_get_posts() para agregar parámetros a la consulta de WP.

Finalmente, la consulta de WP considerará:

  • s : tus palabras clave.
  • post_type : evita mezclar resultados si varios tipos de publicación tienen la misma taxonomía.
  • category : la taxonomía en la que estás buscando.

Para WooCommerce

Reemplaza el atributo action de tu etiqueta <form> por:

<?php echo get_permalink( wc_get_page_id( 'shop' ) ); ?>

También puedes dejarlo vacío si estás seguro de que tu formulario solo está en la página de la tienda.

Establece el valor del campo oculto como product, el slug del tipo de publicación personalizado para productos de WC.

14 abr 2015 17:54:27
Comentarios

quiero buscar también por palabra clave de producto..

Padmanathan J Padmanathan J
15 abr 2015 07:14:20

Sí, por supuesto. ¡Editaré mi publicación para que puedas ver el formulario completo!

Sebastien Sebastien
15 abr 2015 10:28:03