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>

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

Si vous avez aimé cet extrait de code, n'hésitez pas à consulter nos autres articles sur le site tels que : 43 meilleurs thèmes de photographie pour WordPress et comment créer un formulaire de contact dans WordPress.

Commentaires   Laisser une réponse

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

  2. 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.

  3. 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

  4. 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

  5. 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 !

  6. Brillant. Merci. Tu déchires !

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

  7. Brillant. Merci. Tu déchires !

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

  9. Merci pour le conseil ! Fonctionne parfaitement…

  10. 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); ?>

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

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

    Bien joué Monsieur. Excellent conseil.

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

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

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

    Merci beaucoup ! 🙂

  16. 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 ?

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

    1. Quelle est l'erreur que vous obtenez ?

  18. 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.

     

  19. function custom_search_template() {

    $search_refer = $_GET["post_type"];

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

    }

  20. 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); ?>

  21. Vadim Goncharov March 7, 2012 at 10:18 pm

    Comment mettre en place quelque chose où les messages « rien trouvé » apparaissent s'il n'y a pas d'enregistrements dans la base de données ? 

  22. Oh, super ! Qu'en est-il des champs de formulaire basés sur des taxonomies ou des champs personnalisés, comme pour un champ de recherche immobilière ? En lisant l'extrait, il semble s'agir d'une boîte de recherche normale en texte libre qui recherche le type de publication du message que vous consultez actuellement. Et s'il s'agit d'une boîte de recherche sur la page d'accueil ou d'un autre CPT ? Il ne semble pas y avoir de solution de repli vers une recherche WordPress normale. Veuillez corriger si je me trompe.

    1. Non non mon ami, tu sembles un peu confus
       Vérifie cette ligne :

      Vous pourriez le changer en un sélecteur de publication personnalisé :

      Affaires
      Nouvelles LIBELLÉ

      et ainsi de suite..

      Notez que :
        name=”post_type” —-> $_GET[“post_type”]; —> = $search_refer.ce qui signifie que la recherche n'est pas basée sur le type de publication que vous consultez actuellement. Elle est basée sur : name=”post_type” valeur.

  23. Flávio Leonard Vargas January 30, 2012 at 4:30 am

    Ça marche super ! Merci beaucoup !

  24. Cela fonctionne (brillamment ! merci Kevin) le seul problème est qu'il y a une } mal placée dans la section
    Afficher les résultats de recherche. C'est peut-être la source du problème de Lin D.

    1. @toomanyairmiles:disqus  content de savoir que vous aimez l'extrait et merci pour l'information concernant ce } supplémentaire. J'ai mis à jour l'extrait.

  25. Cela n'a pas fonctionné sur le mien

    1. Salut Lin D., cela fonctionne, je l'ai en cours d'exécution avec un certain nombre de clients. Si vous souhaitiez m'envoyer un e-mail avec le formulaire ci-dessous, je peux vous aider davantage par e-mail pour que les choses fonctionnent et même examiner vos modèles si vous le souhaitez.

      http://wpsnipp.com/contact/

Ajouter un commentaire

Nous sommes heureux que vous ayez choisi de laisser un commentaire. N'oubliez pas 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 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 !