Creare un modulo di ricerca per categorie di prodotti e parole chiave in WooCommerce

14 apr 2015, 13:45:38
Visualizzazioni: 24.3K
Voti: 3

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.

Screenshot del modulo di ricerca WooCommerce

Voglio realizzare questo tipo di ricerca nell'header. Qualcuno può aiutarmi?

0
Tutte le risposte alla domanda 1
2

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.

14 apr 2015 17:54:27
Commenti

voglio cercare anche la parola chiave del prodotto...

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

Sì, certo. Modificherò il mio post per farti vedere l'intero modulo!

Sebastien Sebastien
15 apr 2015 10:28:03