web-dev-qa-db-fra.com

Créer une catégorie de produit et un formulaire de recherche par mot-clé dans woocommerce?

je veux construire un formulaire de recherche par catégorie et mot clé. donc j'ai ce formulaire suivant

<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( 'Search for:', 'woocommerce' ); ?></label>
                        <input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="<?php _e( 'Search for products', 'woocommerce' ); ?>" />
                       <input type="submit" id="searchsubmit" value="<?php echo esc_attr__( 'Search' ); ?>" />
                       <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>

Cela ne fonctionne que pour les mots-clés. Quand je mets à jour ceci à la recherche par catégorie signifie non travaillé ma page capture d'écran est donnée ci-dessous.

My screenshot

Je veux faire ce type de recherche en-tête. alors aidez moi n'importe qui

3
Nathan Srivi

Je viens de le faire pour un client, vous devrez le faire sur l'action pre_get_posts. Cela signifie que vous allez ajouter des paramètres à la requête WordPress avant il renvoie les articles.

Ajoutez ceci à functions.php:

// advanced search functionality
function advanced_search_query($query) {

    if($query->is_search()) {
        // category terms search.
        if (isset($_GET['category']) && !empty($_GET['category'])) {
            $query->set('tax_query', array(array(
                'taxonomy' => '***the_taxonomy_slug_of_your_category***',
                'field' => 'slug',
                'terms' => array($_GET['category']) )
            ));
        }    
    }
    return $query;
}
add_action('pre_get_posts', 'advanced_search_query', 1000);

Le code ci-dessus fonctionne en supposant que vous ayez passé une variable category. Vous pouvez le faire en créant une balise select avec le nom 'catégorie':

<select name="category">
    <option value="***cat_slug***">Cat. name</option>
    <option value="***cat_slug***">Cat. name</option>
    <option value="***cat_slug***">Cat. name</option>
</select>

Le formulaire complet:

<form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <!-- With this hidden input you can define a specific post type. -->
    <input type="hidden" name="post_type" value="your_post_type" />
    <input name="s" type="text" />
    <select name="category">
        <!-- Insert here all option tags you want, with category slug as value -->
    </select>
    <button type="submit">Submit</button>
</form>

Une fois soumis, $ _GET [] contiendra s, post_type et category. s et post_type sont utilisés par défaut par WP search, et category utilisera in pre_get_posts() pour ajouter des paramètres à la requête WP.

Donc, finalement, la requête WP prendra en compte:

  • s: vos mots-clés.
  • post_type : évite le mélange des résultats si plusieurs types de publication ont la même taxonomie.
  • catégorie : la taxonomie sur laquelle vous recherchez.

Pour WooCommerce

Remplacez l'attribut action de votre balise <form> par:

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

Vous pouvez également le laisser vide si vous êtes sûr que votre formulaire se trouve uniquement sur la page de la boutique.

Définissez la valeur du champ masqué sur product, le slug de type de publication personnalisé pour les produits WC.

3
Sebastien