NB : Faire une sauvegarde de votre thème, de votre fichier et/ou votre base de données avant d’ajouter ces fonctions tutoriels.

Le Search Post Type : Faire une bonne requête
Facile
Hébergement Web Canada

Publié le : 07 mars 2016 - Modifié le : 17 janvier 2022

Temps de lecture : 2 minutes, 21 seconds - 206 mots

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

<form class="search-form" role="search" action="<?php echo home_url( '/' ); ?>" method="get">
<label> 
<input class="search-field" title="<?php echo esc_attr_x( 'Rechercher :', 'label' ) ?>" name="s" type="search" value="<?php echo get_search_query() ?>" placeholder="<?php echo esc_attr_x( 'Rechercher …', 'placeholder' ) ?>" /> 
<input name="post_type" type="hidden" value="viavideos" /> 
</label> 
<input class="search-submit" type="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).

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.

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

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>