Creare un modulo di ricerca per categorie di prodotti e parole chiave in WooCommerce
Voglio costruire un modulo di ricerca basato su categorie e parole chiave. Ho ottenuto il seguente form
<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( 'Cerca per:', 'woocommerce' ); ?></label>
<input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="<?php _e( 'Cerca prodotti', 'woocommerce' ); ?>" />
<input type="submit" id="searchsubmit" value="<?php echo esc_attr__( 'Cerca' ); ?>" />
<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>
Funziona solo per le parole chiave. Quando lo aggiorno per la ricerca per categorie non funziona. Lo screenshot della mia pagina è mostrato qui sotto.
Voglio realizzare questo tipo di ricerca nell'header. Qualcuno può aiutarmi?

L'ho appena realizzato per un cliente, dovrai farlo sull'azione pre_get_posts
. Ciò significa che aggiungerai parametri alla query di WordPress prima che restituisca i post.
Aggiungi questo a functions.php:
// funzionalità di ricerca avanzata
function advanced_search_query($query) {
if($query->is_search()) {
// ricerca per termini di categoria.
if (isset($_GET['category']) && !empty($_GET['category'])) {
$query->set('tax_query', array(array(
'taxonomy' => '***il_slug_della_tassonomia_della_tua_categoria***',
'field' => 'slug',
'terms' => array($_GET['category']) )
));
}
}
return $query;
}
add_action('pre_get_posts', 'advanced_search_query', 1000);
Il codice sopra funziona assumendo che tu abbia passato una variabile category
. Puoi farlo creando un tag select
con 'category' come name:
<select name="category">
<option value="***cat_slug***">Nome categoria</option>
<option value="***cat_slug***">Nome categoria</option>
<option value="***cat_slug***">Nome categoria</option>
</select>
Il modulo completo:
<form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<!-- Con questo input nascosto puoi definire un tipo di post specifico. -->
<input type="hidden" name="post_type" value="your_post_type" />
<input name="s" type="text" />
<select name="category">
<!-- Inserisci qui tutti i tag option che desideri, con lo slug della categoria come valore -->
</select>
<button type="submit">Invia</button>
</form>
Una volta inviato, $_GET[] conterrà s
, post_type
e category
. s
e post_type
sono utilizzati di default dalla ricerca di WP, e category
verrà utilizzato in pre_get_posts()
per aggiungere parametri alla query di WP.
Quindi alla fine la query di WP considererà:
- s : le tue parole chiave.
- post_type : evita di mischiare risultati se diversi tipi di post hanno la stessa tassonomia.
- category : la tassonomia su cui stai cercando.
Per WooCommerce
Sostituisci l'attributo action
del tuo tag <form>
con:
<?php echo get_permalink( wc_get_page_id( 'shop' ) ); ?>
Puoi anche lasciarlo vuoto se sei sicuro che il tuo modulo sia solo nella pagina del negozio.
Imposta il valore del campo nascosto su product
, lo slug del custom post type per i prodotti WC.
