Le Search Post Type : Faire une bonne requête

7 mars 2016 | Tutoriels | 0 | Modifié le : 17 mars 2016

Le Search Post Type :

Dans un précédent tutoriel (Le Search WordPress), nous avions vu comment inclure où disons filtrer les Posts Types dans les résultats de recherche WordPress.
Ce tutoriel va plus personnaliser notre recherche, donc nous allons créer un Search Post type séparé avec les articles.

Nous allons dans un premier temps créé notre formulaire Post Type. L’astuce c’est que la value recherchée soit le nom du Post Type. Dans notre exemple le Post Type est viavideos.

Le Search Post Type

1
2
3
4
5
6
7
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
<label>
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Rechercher …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Rechercher :', 'label' ) ?>" />
<input type="hidden" name="post_type" value="viavideos" />
</label>
<input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Rechercher', 'submit button' ) ?>" />
</form>

Ensuite nous allons créér le pre_get_post qui va permettre d’afficher les résultats du Post Type et de lui donner la condition que si tu search et que tu n’est pas l’admin. (Remplacer viavideos par votre Post Type)

1
2
3
4
5
6
7
8
9
10
11
12
function searchfilterquery($query) {
    if ($query->is_search && !is_admin() ) {
        if(isset($_GET['post_type'])) {
            $type = $_GET['post_type'];
                if($type == 'viavideos') {
                    $query->set('post_type',array('viavideos'));
                }
        }       
    }
return $query;
}
add_filter('pre_get_posts','searchfilterquery');

Nous allons dans notre search.php et nous allons quelque peu ajouter une condition. Déposer cette condition dans votre contenu (dans votre boucle) search.php.

Remarquez bien la forme des résultats. On conditionne dans le search.php que si on a une requête concernant le Post Type viavideos, alors appelle le template Vidéos content-videos.php, sinon si c’est une requête articles, alors le template content Post content-posts.php, sinon aucun résultat.

1
2
3
4
5
6
7
8
9
10
11
12
<?php if(isset($_GET['post_type'])) {
$type = $_GET['post_type'];
if($type == 'viavideos') {?>
<?php get_template_part( 'content', 'videos' ); ?>
 
<?php } else { ?>
<?php get_template_part( 'content', 'posts' ); ?>
<?php } ?>
 
<?php } else { ?>
<?php _e( 'Pas de résultats' ); ?>
<?php } ?>

Il suffit de le mettre en pratique et de faire des tests pour s’apercevoir des résultats.

#Custom Post Type, #Search WordPress