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.
Je veux faire ce type de recherche en-tête. alors aidez moi n'importe qui
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>
<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:
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.