Búsqueda de filtro de WooCommerce por categoría y campo personalizado

3 minutos de lectura

avatar de usuario
mokalovesoulmate

Quiero preguntar cómo crear un formulario de búsqueda personalizado de woocommerce.

Mi formulario de búsqueda y filtro tiene 3 campos:

Categoría: Me las arreglé para llevar la categoría de productos de woocommerce a mi formulario html de búsqueda personalizada con <select> etiqueta:

<?php 
$catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'exclude' => '17,77'));
foreach($catTerms as $catTerm) : ?>
    <option value="<?php echo $catTerm->slug; ?>"><?php echo $catTerm->name; ?></option>
<?php endforeach; ?>

Filtrado por: (menú desplegable) por autor:

Agregué un campo adicional a woocommerce usando woo_add_custom_general_fields_save() función en el tema functions.php, trabaja apropiadamente.

Nota: este no es un ‘campo personalizado’ que solemos usar en wordpress para agregar más metadatos, pero este código a continuación es para agregar más campos en Datos del producto> General (en woocommerce).

function woo_add_custom_general_fields_save($post_id)
{
    $woocommerce_textinput = $_POST['_book_author'];
    if( !empty( $woocommerce_textinput ) )
    update_post_meta( $post_id, '_book_author', esc_html( $woocommerce_textinput ) );
}

Por titulo:

Me las arreglé para usar este filtro usando http://www.example.com/wp-root/woocommerce-product-page/?s=searchproducttitle

Campo de texto de entrada:

Esto es para que el usuario busque por palabra clave.

Así que este es mi formulario de búsqueda html personalizado completo:

<form action="<?php echo site_url(); ?>/pm-bookstore/" method="GET">

<select name="">
    <?php $catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'exclude' => '17,77')); ?>
        <?php foreach($catTerms as $catTerm) : ?>
        <option value="<?php echo $catTerm->slug; ?>"><?php echo $catTerm->name; ?></option>
    <?php endforeach; ?>                                            
</select>

<select name="">
    <option value="">By author</option>
    <option value="">By title</option>
</select>

<input type="text" placeholder="Search Book by Title, Author, ISBN..." name="s">
<button class="fa fa-search" type="submit"></button>

</form>

Para el parámetro de búsqueda, espero poder extraerlos todos. Pero solo puedo usar el parámetro ?s (que es solo el título del producto).

Intenté usar otro parámetro, como, product_cat, tag_IDpero sin éxito.

Por el momento solo puedo usar

http://www.example.com/wp-root/woocommerce-product-page/?s=searchproducttitle

Mi resultado esperado es:

http://www.example.com/wp-root/woocommerce-product-page/?s=searchproducttitle&category=categoryslug&author=nombre del autor

o

http://www.example.com/wp-root/woocommerce-product-page/?s=searchproducttitle&category=categoryslug

¿Cómo hacer que este parámetro de búsqueda funcione en la búsqueda de woocommerce?

Gracias.

  • ¿Alguna vez conseguiste una solución a esto?

    – thorne51

    28 de enero de 2015 a las 8:08

En su página ‘pm-bookstore’ use WP_Query para obtener el resultado.

// WP_Query arguments
$args = array (
    'name'                   => 'your title',
    'post_type'              => array( 'product' ),
    'post_status'            => array( 'publish' ),
    'tax_query'              => array(
             'taxonomy' => 'categories',
             'field'    => 'slug',
             'term'     =>  'your category slug'
     ),
    'meta_query'             => array(
        array(
            'key'       => '_book_author',
            'value'     => 'your author name',
            'compare'   => '=',
            'type'      => 'CHAR',
        ),
    ),
);

// The Query
$query = new WP_Query( $args );

No lo he probado pero debería funcionar.

¿Ha sido útil esta solución?