X

Créer plusieurs modèles de recherche pour les types de publication personnalisés

Extraits par IsItWP

Vous cherchez un moyen de créer plusieurs modèles de recherche pour les types de publication personnalisés ? Bien qu'il existe probablement un plugin pour cela, nous avons créé un extrait de code rapide que vous pouvez utiliser pour créer plusieurs modèles de recherche pour les types de publication personnalisés dans WordPress.

Instructions :

Modèle de recherche

Créez un nouveau fichier appelé search.php et ajoutez le modèle de recherche suivant. Changez le $search_refer= CUSTOM_POST_TYPE par les noms de vos types de publication. Vous devrez également modifier le chemin du modèle pour le modèle correspondant que vous souhaitez afficher les résultats.

<?
/* Template Name: Search Results */

$search_refer = $_GET["post_type"];
if ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_one-name.php'); }
elseif ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_two-name.php'); };

?>

Afficher les résultats de recherche

Ajoutez cette query_post juste au-dessus de la boucle dans les modèles de recherche que vous créez. N'oubliez pas de changer le CUSTOM_POST_TYPE pour chacun de vos modèles.

<?php 
	$args = array(
		'post_type'=> 'CUSTOM_POST_TYPE',
                's'    => $s,
                'paged' => $paged,
                );
		query_posts($args);
?>

Formulaire de recherche

Ajoutez ce HTML au modèle que vous souhaitez afficher le formulaire de recherche. Vous devrez changer le nom CUSTOM_POST_TYPE pour le type de publication que vous souhaitez rechercher. Vous devrez créer un nouveau formulaire pour chaque type de publication personnalisé ou utiliser un menu déroulant pour définir le post_type.

<form id="searchform" action="<?php bloginfo('home'); ?>/" method="get">
	<input id="s" maxlength="150" name="s" size="20" type="text" value="" class="txt" />
	<input name="post_type" type="hidden" value="CUSTOM_POST_TYPE" />
	<input id="searchsubmit" class="btn" type="submit" value="Search" />
</form>

Note : Si c'est la première fois que vous ajoutez des extraits de code dans WordPress, veuillez consulter notre guide sur comment ajouter correctement des extraits de code dans WordPress, afin de ne pas casser accidentellement votre site.

Si vous avez aimé cet extrait de code, veuillez envisager de consulter nos autres articles sur le site comme : 43 meilleurs thèmes de photographie pour WordPress et comment créer un formulaire de contact dans WordPress.

Commentaires   Laisser une réponse

  1. Sally Pilkington January 7, 2019 at 3:09 pm

    Bonjour, merci pour ce tutoriel.
    J'essaie de créer un formulaire de recherche personnalisé à placer dans la barre latérale de la section blog de mon site web. Je veux que le formulaire de recherche ne recherche que dans les articles (articles de blog standard, pas un type d'article personnalisé) – et qu'il ignore tout autre contenu, par exemple les pages. Est-il possible d'adapter cette méthode à ce que j'essaie de faire ?
    J'ai essayé mais sans succès.
    Merci beaucoup

    1. Salut Sally,
      Essaie ce tutoriel sur comment filtrer les types de publication des résultats de recherche. J'espère que tu le trouveras utile 🙂

  2. Ronron ronron ronronronron parfait )

  3. Pitico Medtler July 3, 2015 at 2:16 pm

    Parfait. Merci !

  4. Désolé pour la question de débutant, mais y a-t-il un moyen d'aller plus loin et de ne rechercher que dans un meta_field personnalisé au sein du type de publication personnalisé ? J'ai cherché pendant des jours et c'est le script le plus proche que j'ai pu trouver. Actuellement, il recherche les titres et le contenu de la publication, mais j'ai une tonne de champs personnalisés pour le CPT et je veux seulement que l'utilisateur recherche un champ spécifique. Des idées ?

  5. est-il possible d'adapter ces instructions pour rechercher une taxonomie personnalisée au lieu d'une publication personnalisée ? J'essaie de retourner une recherche distincte pour chaque taxonomie personnalisée et je ne parviens pas tout à fait à comprendre. Merci !

  6. J'avais des erreurs de syntaxe, elseif sans point-virgule à la fin, après cela tout a bien fonctionné 🙂

  7. si la valeur de recherche est vide, par exemple : ?s=&post_type=products, cela me renvoie toujours des résultats dans le modèle par défaut, peu importe le post_type que j'ai dans la chaîne de recherche ? y a-t-il une solution pour cela ?

    Par exemple : ?s=+&post_type=products CECI FONCTIONNERA, ouvrir dans search-products.php
    Ceci : ?s=&post_type=products NE FONCTIONNERA PAS, ouvrir dans search-post.php

    1. Je pense que votre meilleure option serait d'utiliser javascript pour exiger quelque chose dans le champ avant qu'ils ne puissent rechercher.

    2. Je pense que votre meilleure option serait d'utiliser javascript pour exiger quelque chose dans le champ avant qu'ils ne puissent rechercher.

    3. Je pense que votre meilleure option serait d'utiliser javascript pour exiger quelque chose dans le champ avant qu'ils ne puissent rechercher.

  8. si la valeur de recherche est vide, par exemple : ?s=&post_type=products, cela me renvoie toujours des résultats dans le modèle par défaut, peu importe le post_type que j'ai dans la chaîne de recherche ? y a-t-il une solution pour cela ?

    Par exemple : ?s=+&post_type=products CECI FONCTIONNERA, ouvrir dans search-products.php
    Ceci : ?s=&post_type=products NE FONCTIONNERA PAS, ouvrir dans search-post.php

  9. si la valeur de recherche est vide, par exemple : ?s=&post_type=products, cela me renvoie toujours des résultats dans le modèle par défaut, peu importe le post_type que j'ai dans la chaîne de recherche ? y a-t-il une solution pour cela ?

    Par exemple : ?s=+&post_type=products CECI FONCTIONNERA, ouvrir dans search-products.php
    Ceci : ?s=&post_type=products NE FONCTIONNERA PAS, ouvrir dans search-post.php

  10. Article qui sauve des vies, merci, je luttais pour trouver une bonne solution, cela a beaucoup aidé

    1. Pas de problème, heureux que nous ayons pu aider !

  11. Brillant. Merci. Tu déchires !

    1. Pas de problème, heureux que vous aimiez le snippet !

  12. Brillant. Merci. Tu déchires !

  13. J'utilisais un thème enfant. J'ai dû utiliser { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }

  14. Merci pour le conseil ! Fonctionne parfaitement…

  15. J'adore l'idée derrière ça, tellement intelligent.
    J'ai un problème avec la pagination cependant. Donc ça le rend un peu inutile à moins que je n'affiche tous les résultats avec un 'showposts'=>999,

    1. OH SNAP… donc j'avais travaillé sur ça pendant une heure environ avant de renoncer et de commenter… et puis j'ai trouvé…
      J'ai changé l'argument query_posts pour ceci

      ‘bio’,
      ‘posts_per_page’ => 10,
      ‘paged’ => $paged,
      );
      query_posts($args);
      ?>

  16. Cela me renvoie une page blanche… Une aide ?

  17. Silver-monkey June 24, 2013 at 2:06 pm

    Bien joué Monsieur. Excellent conseil.

  18. Merci beaucoup ! vous venez d'égayer ma matinée.

  19. Est-ce seulement pour les types de publication personnalisés ?

  20. Le code fonctionne bien dans la version 3.4.2, mais j'ai dû changer "post_type" en "posttype".

    Merci beaucoup ! 🙂

  21. Ne fonctionne pas pour moi dans la version 3.3.1. La variable $s ne reçoit peut-être aucune valeur. Des suggestions ?

    1. Je vais tester les choses dans une version récente de wordpress juste pour être sûr, bien que vous ne devriez avoir aucun problème. Je suggérerais également de mettre à jour vers la version 3.4. Je posterai ici avec les résultats.

    2. J'ai testé les choses et cela semble fonctionner correctement. Avez-vous créé les fichiers de modèle personnalisés et tout configuré correctement ?

  22. J'obtiens une erreur de serveur en essayant d'implémenter cela 🙁

    1. Quelle est l'erreur que vous obtenez ?

  23. D'accord, voici ce que j'ai fait en guise de solution de repli :

    1. J'ai créé un dossier dans mes fichiers de modèle appelé « search ». –> TEMPLATEPATH .’/search/’

    2. puis créé des modèles de publication personnalisés en utilisant le code par défaut de Wordpress search.php.
    par ex. : search-xxxxx.php où xxxxx est le type de publication personnalisé.

    3. Placez tous les modèles de publication personnalisés search-xxxxx.php dans le dossier search nouvellement créé.

    4. Renommez le fichier search.php par défaut de Wordpress en –> default-search.php

    5. Créez un nouveau fichier search.php et insérez le code suivant :

     

    6. nous appelons essentiellement une fonction appelée custom_search_template().

    7. définissons cette fonction dans le fichier fuctions.php :

    function custom_search_template() {

    $search_refer = $_GET["post_type"];

    if ( isset($_GET["post_type"])) { if (file_exists(TEMPLATEPATH . '/search/search-' .$search_refer. '.php')) load_template(TEMPLATEPATH . '/search/search-' .$search_refer. '.php'); else { load_template(TEMPLATEPATH . '/search-default.php'); } } else { load_template(TEMPLATEPATH . '/search-default.php'); }

    8. Enfin, le formulaire de recherche :

           

          
     

                Sélectionner le type de publication

    Business News LABEL

    9. Fondamentalement, lorsque vous utilisez ce formulaire pour soumettre une requête de recherche, Wordpress récupère name=”post_type” –> c.-à-d. $_GET["post_type"];

    La fonction vérifie ensuite si $_GET["post_type"] a été défini, si c'est le cas, elle charge un fichier modèle basé sur $search_refer = $_GET["post_type"] du dossier /search/ que nous avons créé. C.-à-d. search-xxxxx.php —> search-$search_refer.php

    si aucun modèle appelé « search-$search_refer.php » n'existe, la fonction utilise default-search.php pour afficher les résultats de recherche.

    10. S'il vous plaît, commentez si je me trompe.

     

  24.  function custom_search_template() {

    $search_refer = $_GET["post_type"];

    load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);

    }

  25. J'ai un problème avec la pagination, lorsque le résultat de recherche de type de publication personnalisé est supérieur à 5.

    Des conseils ?

    1. J'ai essayé ceci sur le tableau arg

      ‘bio’,
      ‘posts_per_page’ => 10,
      ‘paged’ => $paged,
      );
      query_posts($args);
      ?>

Ajouter un commentaire

Nous sommes ravis que vous ayez choisi de laisser un commentaire. Veuillez garder à l'esprit que tous les commentaires sont modérés conformément à notre politique de confidentialité, et tous les liens sont nofollow. N'utilisez PAS de mots-clés dans le champ du nom. Ayons une conversation personnelle et significative.

Liste de contrôle de lancement WordPress

La checklist ultime pour lancer un WordPress

Nous avons compilé tous les éléments essentiels de la liste de contrôle pour le lancement de votre prochain site Web WordPress dans un ebook pratique.
Oui, envoyez-moi l'eBook gratuit !