[WordPress] Choisir les types de billets à rechercher (CPT)


Il y a quelques semaines j’ai écrit un billet dans lequel je décris une méthode permettant de filtrer la recherche selon un Custom Post Type choisi. Cette technique est suffisante si l’on souhaite placer des formulaires de recherche dédiés sur des pages particulières. Mais si on souhaite donner le choix à ses lecteurs, cela ne suffit pas.

Dans la suite de ce billet je propose d’ajouter des cases à cocher permettant de choisir les types de billets à inclure lors de la recherche.

 
Comme précédemment, il faut travailler avec le fichier searchform.php de votre thème.
On ajoute au formulaire de recherche les différents choix de types de billets proposés :

<form ...>
<input type="hidden" name="post_type[]" value="post" />
<input type="hidden" name="post_type[]" value="page" />
<input type="hidden" name="post_type[]" value="ontheweb" /> 
...
</form>

Dans mon cas je n’ai qu’un CPT nommé OnTheWeb, qui correspond aux liens que je fais vers d’autres sites.

 
Ensuite, il faut travailler dans le fichier search.php. Là on récupère les valeurs des cases cochés.

<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
<input type="text" name="s" id="s" value="<?php the_search_query(); ?>" />
<!-- ajout à partir d'ici -->	
<?php $query_types = get_query_var('post_type'); ?>

<input type="checkbox" name="post_type[]" value="post" <?php if (in_array('post', $query_types)) { echo 'checked="checked"'; } ?> /><label>Billets</label>
<input type="checkbox" name="post_type[]" value="page" <?php if (in_array('page', $query_types)) { echo 'checked="checked"'; } ?> /><label>Pages</label>
<input type="checkbox" name="post_type[]" value="ontheweb" <?php if (in_array('ontheweb', $query_types)) { echo 'checked="checked"'; } ?> /><label>Sur Le Web</label>
    
<input type="submit" id="searchsubmit" value="Search" />
</form>

Voila, c’est fini, vous obtiendrez un beau formulaire de recherche avec le choix des types de billets à inclure dans les résultats.