Créer une page de recherche personnalisée pour un custom post type avec WordPress

Posté par PUShAUNE le 1 avril 2023

0 commentaires :(

Créer une page de recherche personnalisée pour un custom post type avec Wordpress

Vous chercher à filtrer les recherches par custom post type et à créer une page de recherche différente en fonction des résultats ? Vous êtes au bon endroit :)

Problématique

Si votre site utilise des Custom Post Type, il y a de grandes chances que vous vouliez séparer les résultats de recherche par type de post.

Le problème, c’est que la recherche de WordPress englobe tous les types de contenu (post, page et custom post type). Quand vous effectuez une recherche dans la searchbar, vous allez avoir tout les type de contenu mélangés.

On va voir :

  1. comment filtrer les recherches par custom post type,
  2. puis créer des pages de recherche différentes par custom post type.

Filtrer une recherche WordPress par custom post type

Pour filtrer une recherche, il suffit d’ajouter un input caché à notre formulaire de recherche :

<form method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<input type="text" class="field" name="s" id="s" placeholder="<?php esc_attr_e( 'Search', 'pushaune_theme' ); ?>" />
<input type="hidden" name="post_type" value="YOUR_CTP" />
</form>

Remarquez sur la troisième ligne, nous avons ajouté un paramètre name= »post_type » qui nous permet de filtrer par custom post type, puis la valeur YOUR_CTP qu’il faudra remplacer par le slug de votre CTP.

Cela aura pour effet de filtrer la recherche par votre custom post type, sur la page search.php de votre thème.

On va maintenant voir comment personnaliser la page de résultat de recherche en fonction des custom post type affichés.

Personnaliser la page de résultat de recherche en fonction des custom post type

La première étape va être de modifier le ficher search.php qui est le template de résultat de recherche.

Supprimez tout son contenu pour le remplacer par ça :

<?
/* Template Name: Search Results */

$search_refer = $_GET["post_type"];
if ($search_refer == 'YOUR_CTP') {
load_template(TEMPLATEPATH . '/search-YOUR_CTP.php');
} elseif ($search_refer == 'YOUR_CTP_02') {
load_template(TEMPLATEPATH . '/search-YOUR_CTP_02.php');
} else {
load_template(TEMPLATEPATH . '/search-default.php');
};

?>

Dans cet exemple, j’ai deux custom post type que je nomme YOUR_CTP et YOUR_CTP_02.
Vous pouvez en ajouter ou en enlever, et les renommer avec les slugs de vos custom post type.

La logique est la suivante :

  1. Si la recherche comprend des custom post type YOUR_CTP, je charge la première page de recherche,
  2. si la recherche comprend des custom post type YOUR_CTP_02, je charge la seconde page de recherche,
  3. autrement, je charge la page de recherche par défaut.

Il nous reste donc à créer les trois pages de recherches.

Création des pages de recherches personnalisées

Il ne nous reste plus qu’à créer nos fichiers de résultat de recherche :

  • search-YOUR_CTP.php
  • search-YOUR_CTP_02.php
  • search-default.php

Chaque template sera chargé en fonction du custom post type affiché.

Voilà un exemple basique de ce que vous pouvez y mettre :

<?php get_header(); ?>

<main id="content" class="search_result search_result_CTP-TYPE" role="main">
<h1 class="page-title">
<?php printf( __( 'Search Results for: %s', 'pushaune_theme' ), '<span>' . get_search_query() . '</span>' ); ?>
</h1>
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', get_post_type() ); ?>
<?php endwhile; ?>
<?php else : ?>
<p>
<strong><?php _e( 'Nothing Found', 'pushaune_theme' ); ?></strong>
</p>
</div><!-- .container .center -->
<?php endif; ?>
</main><!-- #content -->

<?php get_footer(); ?>

Avec ce code, vous aurez :

  • un header,
  • un titre,
  • la boucle qui affiche les posts,
  • le footer.

À vous de la personnaliser en fonction de vos besoins :)

See ya’ space integrator

Tu kiffes ? Alors partage avec tes potes !

Sois pas timide, lâche tes com’ !

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.