Maison >Tutoriel CMS >WordPresse >Comment ajouter une recherche avancée à votre site WordPress

Comment ajouter une recherche avancée à votre site WordPress

Lisa Kudrow
Lisa Kudroworiginal
2025-02-20 12:07:08266parcourir

How to Add an Advanced Search to Your WordPress Site

Comment ajouter une recherche avancée à votre site WordPress

Les plats clés

  • Les formulaires de recherche WordPress peuvent être améliorés au-delà du paramètre de requête de base «S» en utilisant d'autres paramètres au plus profond du noyau WordPress, permettant des résultats de recherche plus ciblés.
  • Les résultats de recherche peuvent être affinés par catégorie ou balise en passant leurs limaces respectives aux paramètres «catégories_name» ou «tag», respectivement. Cela peut être fait sans avoir besoin de plugins.
  • Les recherches avancées peuvent être affinées par plusieurs valeurs à l'aide de paramètres de tableau PHP, qui peuvent être interceptés et définis dans le fichier Functions.PHP du thème WordPress. Cela permet aux utilisateurs de choisir plusieurs balises pour une recherche plus ciblée.
La majorité des formulaires de recherche WordPress définissent un seul paramètre de requête nommé «S»:
<span><span><span><form</span> method<span>="get"</span> action<span>="<?php bloginfo('url'); ?>"</span>></span>
</span><span><span><span><fieldset</span>></span>
</span><span><span><span><input</span> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search&hellip;"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span>
</span><span><span><span><button</span> type<span>="submit"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></fieldset</span>></span>
</span><span><span><span></form</span>></span></span>
Il n'y a rien de mal à cela et je pensais que c'était la seule option pour de nombreuses années. Cependant, des requêtes plus avancées sont possibles sans l'aide de plugins (bien que beaucoup soient disponibles). Au fond du noyau WordPress, l'application analyse plusieurs autres paramètres de requête et les utilise pour renvoyer un ensemble plus ciblé de résultats de recherche. Il existe une documentation rudimentaire qui répertorie les noms de paramètres:
  • pièce jointe
  • Pièces actions_id
  • Auteur
  • AUTOR_NAME
  • Cat
  • catégorie_name
  • commentaires_popup
  • jour
  • Erreur
  • Feed
  • heure
  • m
  • minute
  • Montsnum
  • nom
  • p
  • page_id
  • PAGED
  • pagename
  • post_parent
  • post_type
  • Aperçu
  • seconde
  • statique
  • sous-poste
  • subpost_id
  • tag
  • tag_id
  • TB
  • w
  • année
Je ne suis pas convaincu de tous ces travaux comme prévu et certains sont un peu inutiles, mais ils correspondent aux paramètres que vous pouvez transmettre à WP_Query. Nous pouvons donc créer un formulaire de recherche avancé à l'aide de HTML avec un Smidgen de PHP pour automatiser les options.

Affiner la recherche par catégorie

Vous pouvez limiter les résultats à une catégorie en transmettant sa limace au paramètre catégories_name, par ex.
<span><span><span><form</span> method<span>="get"</span> action<span>="<?php bloginfo('url'); ?>"</span>></span>
</span><span><span><span><fieldset</span>></span>
</span><span><span><span><input</span> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search&hellip;"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span>
</span><span><span><span><button</span> type<span>="submit"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></fieldset</span>></span>
</span><span><span><span></form</span>></span></span>
Notre formulaire de recherche peut permettre à l'utilisateur d'affiner sa recherche vers des catégories spécifiques:
http://yoursite.com/?s=search+term&category_name=kittens
Si vous préférez répertorier toutes les catégories, ajoutez le code suivant entre le et Tags:
<span><span><span><form</span> method<span>="get"</span> action<span>="<?php bloginfo('url'); ?>"</span>></span>
</span><span><span><span><fieldset</span>></span>
</span><span><span><span><input</span> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search&hellip;"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span>
</span><span><span><span><select</span> name<span>="category_name"</span>></span>
</span><span><span><span><option</span> value<span>=""</span>></span>all categories<span><span></option</span>></span>
</span><span><span><span><option</span> value<span>="kittens"</span>></span>cute kittens<span><span></option</span>></span>
</span><span><span><span><option</span> value<span>="puppies"</span>></span>adorable puppies<span><span></option</span>></span>
</span><span><span><span></select</span>></span>
</span><span><span><span><button</span> type<span>="submit"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></fieldset</span>></span>
</span><span><span><span></form</span>></span></span>

Affiner la recherche par tag

Les résultats de la recherche peuvent être limités à une balise en passant sa limace au paramètre de balise, par ex.
<span><span><?php
</span></span><span><span>// generate list of categories
</span></span><span><span>$categories = get_categories();
</span></span><span><span>foreach ($categories as $category) {
</span></span><span>	<span>echo '<option value="', $category->slug, '">', $category->name, "</option>\n";
</span></span><span><span>}
</span></span><span><span>?></span></span>
Votre recherche pourrait donc limiter les résultats à certaines balises, par exemple
http://yoursite.com/?s=search+term&tag=cockroach
De même, vous pouvez générer une liste de toutes les balises pour le champ Select:
<span><span><span><form</span> method<span>="get"</span> action<span>="<?php bloginfo('url'); ?>"</span>></span>
</span><span><span><span><fieldset</span>></span>
</span><span><span><span><input</span> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search&hellip;"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span>
</span><span><span><span><select</span> name<span>="tag"</span>></span>
</span><span><span><span><option</span> value<span>=""</span>></span>any tag<span><span></option</span>></span>
</span><span><span><span><option</span> value<span>="cockroach"</span>></span>cockroaches<span><span></option</span>></span>
</span><span><span><span><option</span> value<span>="snake"</span>></span>snakes<span><span></option</span>></span>
</span><span><span><span></select</span>></span>
</span><span><span><span><button</span> type<span>="submit"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></fieldset</span>></span>
</span><span><span><span></form</span>></span></span>

Advance Advanced Search

Et si vous souhaitez affiner la recherche par plusieurs valeurs? Par exemple, l'utilisateur peut choisir deux ou plusieurs balises et les pages résultantes doivent les avoir tous définis. Nous ne pouvons pas y parvenir en utilisant les paramètres URL seuls, mais commençons par définir un formulaire de recherche HTML:
<span><span><?php
</span></span><span><span>// generate list of tags
</span></span><span><span>$tags = get_tags();
</span></span><span><span>foreach ($tags as $tag) {
</span></span><span>	<span>echo '<option value="', $tag->slug, '">', $tag->name, "</option>\n";
</span></span><span><span>}
</span></span><span><span>?></span></span>
Notez que j'ai utilisé un paramètre de tableau PHP nommé TagList . Vous pouvez utiliser n'importe quel nom autre que ceux déjà réservés par WordPress (voir la liste ci-dessus). Nous pouvons désormais intercepter une soumission de recherche dans le fichier fonctions.php de notre thème WordPress. La fonction Advanced_Search_Query détecte si une recherche est active alors définit le paramètre WP_Query Tag_Slug__ et en conséquence.
<span><span><span><form</span> method<span>="get"</span> action<span>="<span><?php bloginfo('url'); ?></span>"</span>></span>
</span><span><span><span><fieldset</span>></span>
</span><span><span><span><input</span> type<span>="text"</span> name<span>="s"</span> value<span>=""</span> placeholder<span>="search&hellip;"</span> maxlength<span>="50"</span> required<span>="required"</span> /></span>
</span><span><span><span><p</span>></span>Refine search to posts containing chosen tags:<span><span></p</span>></span>
</span><span><span><?php
</span></span><span><span>// generate list of tags
</span></span><span><span>$tags = get_tags();
</span></span><span><span>foreach ($tags as $tag) {
</span></span><span>	<span>echo 
</span></span><span>		<span>'<label>',
</span></span><span>		<span>'<input type="checkbox" name="taglist[]" value="',  $tag->slug, '" /> ',
</span></span><span>		<span>$tag->name,
</span></span><span>		<span>"</label>\n";
</span></span><span><span>}
</span></span><span><span>?></span>
</span><span><span><span><button</span> type<span>="submit"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></fieldset</span>></span>
</span><span><span><span></form</span>></span></span>
Enfin, nous utilisons le Hook Action Pre_get_Posts pour exécuter notre fonction Advanced_Search_Query avant l'exécution d'une requête:
<span>// advanced search functionality
</span><span>function advanced_search_query($query) {
</span>
	<span>if($query->is_search()) {
</span>		
		<span>// tag search
</span>		<span>if (isset($_GET['taglist']) && is_array($_GET['taglist'])) {
</span>			<span>$query->set('tag_slug__and', $_GET['taglist']);
</span>		<span>}
</span>	
		<span>return $query;
</span>	<span>}
</span>
<span>}</span>
L'ajout d'installations de recherche avancées à WordPress est remarquablement facile, mais peu de développeurs se rendent compte que c'est possible… peut-être parce que la documentation et les exemples sont un peu clairsemés . Je l'ai découvert par accident, j'espère donc que vous trouverez ce code utile dans votre prochain projet WordPress.

Des questions fréquemment posées sur la recherche avancée dans WordPress

Comment puis-je personnaliser les résultats de recherche dans WordPress?

La personnalisation des résultats de recherche dans WordPress peut être obtenue en utilisant la classe WP_Query. Cette classe vous permet de définir des paramètres spécifiques pour adapter vos résultats de recherche. Par exemple, vous pouvez définir des paramètres pour rechercher uniquement dans les titres de publication, exclure certains types de publication ou même rechercher dans des champs personnalisés. Vous pouvez également utiliser des plugins comme SearchWP qui offrent des options de personnalisation de recherche avancées.

Puis-je utiliser des balises pour améliorer les résultats de recherche dans WordPress?

Oui, les balises peuvent considérablement améliorer les résultats de recherche dans WordPress. En utilisant la fonction get_the_tags (), vous pouvez récupérer les balises associées à un post particulier. Cela peut être utilisé pour créer une expérience de recherche plus raffinée, permettant aux utilisateurs de rechercher des publications avec des balises spécifiques.

Comment puis-je modifier le paramètre de requête de recherche dans WordPress?

Le paramètre de requête de recherche dans WordPress peut être modifié à l'aide du filtre "Query_Vars". Cela vous permet de modifier le paramètre «S» par défaut en quelque chose de plus spécifique à vos besoins. Par exemple, vous pouvez le modifier en 'search_term' pour rendre vos URL plus conviviales.

Qu'est-ce que WP_Query dans WordPress?

WP_Query est une classe dans WordPress qui vous permet de créer personnalisé requêtes et boucles. Il fournit de nombreux paramètres que vous pouvez utiliser pour personnaliser vos requêtes, telles que le type de poste, la catégorie, la balise, l'auteur, etc. Cela en fait un outil puissant pour créer des fonctionnalités de recherche avancées.

Comment puis-je exclure certains types de publication à partir des résultats de recherche dans WordPress?

L'exclusion de certains types de post à partir des résultats de recherche peut être effectué en utilisant le ' PRE_GET_POSTS Action Hook en conjonction avec la classe WP_Query. Vous pouvez définir le paramètre 'Post_Type' sur un tableau des types de publication que vous souhaitez inclure dans les résultats de recherche, excluant efficacement tous les autres.

Puis-je rechercher dans des champs personnalisés dans WordPress?

Oui, vous pouvez rechercher dans des champs personnalisés dans WordPress en utilisant le paramètre 'meta_query' dans WP_Query. Cela vous permet de spécifier une touche et une valeur de champ personnalisées, et de retourner les publications qui correspondent à ces critères.

Comment puis-je améliorer la fonctionnalité de recherche dans WordPress?

Améliorer la fonctionnalité de recherche dans WordPress peut être réalisée En utilisant des plugins comme SearchWP, Re pertinentssi ou Ajax Search Pro. Ces plugins offrent des fonctionnalités de recherche avancées telles que la correspondance partielle, les mots clés engendrés et la pondération de recherche, offrant une meilleure expérience utilisateur.

Puis-je créer un formulaire de recherche dans WordPress sans plugin?

Oui, vous Peut créer un formulaire de recherche dans WordPress sans plugin en utilisant la fonction get_search_form (). Cette fonction génère le HTML pour un formulaire de recherche, que vous pouvez personnaliser en fonction de vos besoins.

Comment puis-je afficher la requête de recherche dans WordPress?

La requête de recherche peut être affichée dans WordPress en utilisant La fonction get_search_query (). Cette fonction récupère la chaîne de requête de recherche et peut être utilisée pour afficher le terme de recherche sur votre page de résultats de recherche.

Puis-je limiter le nombre de résultats de recherche dans WordPress?

Oui, vous pouvez limiter Le nombre de résultats de recherche dans WordPress en utilisant le paramètre 'Posts_per_page' dans WP_Query. Cela vous permet de spécifier le nombre de messages à afficher par page, limitant efficacement le nombre de résultats de recherche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn