Le template search.php d’un thème WordPress, destiné à afficher les résultats de recherche, est généralement conçu comme un template d’archive ou de taxonomie. On y trouve une liste d’articles, accompagnés de leurs métadonnées (habituellement affichées sous le titre) : la date de publication, l’auteur, les catégories, les tags et parfois le nombre de commentaires. Ces post meta data peuvent poser problème lorsqu’elles s’affichent pour les pages.
Les métadonnées d’une page WordPress
Par défaut, une recherche WordPress s’effectue sur les articles mais aussi sur les pages. Or, il n’est pas très pertinent de rendre visibles la date de publication et l’auteur d’une page puisqu’il s’agit par définition d’un élément statique du site (ces données ne sont en général pas affichées sur le template page.php).
De plus, à l’inverse des articles, les pages ne peuvent pas se voir attribuer des catégories ou des tags. Quant aux commentaires, ils sont désactivés par défaut sur les pages depuis WordPress 4.3 et ne sont habituellement utilisés que sur les articles.
Si le template de recherche de votre thème n’a pas été conçu pour différencier les pages et les articles, vous vous retrouverez donc avec quelque chose de ce genre :
Deux solutions se présentent à vous : masquer les post meta data pour les pages et ainsi obtenir un affichage légèrement différent par rapport aux articles, ou exclure complètement les pages des résultats de recherche. Selon le type de site, vous pourrez choisir l’une ou l’autre solution : à vous de voir si la recherche dans les pages présente un réel intérêt pour l’internaute.
Généralement, la première option est préférable pour un site vitrine dont la majorité du contenu est affiché sous forme de pages (avec parfois des articles dans une rubrique actualités). Pour un blog contenant quelques pages d’information et une majorité d’articles, il est plus pertinent d’exclure complètement les pages du template search.php.
Masquer les post meta deta des pages dans la boucle WordPress
Vous devez tout d’abord identifier les métadonnées dans le template search.php avant de pouvoir les masquer. Il vous faut pour cela trouver l’emplacement de la boucle WordPress. Il est possible que celle-ci se trouve dans un autre fichier (comme content-search.php ou loop.php par exemple).
Une fois la boucle localisée, cherchez une classe ressemblant à « post-meta », il s’agit en général des métadonnées. Vous pouvez aussi essayer de trouver les fonctions the_time(), the_author_posts_link() ou encore the_category() qui sont caractéristiques des post meta data.
Exemple sur le thème Nation Hotel :
<div class="blog-post-meta-wrap"> <div class="blog-category"><span class="icon-calendar"></span><?php _e('Date:','nation'); ?> <?php the_time(get_option('date_format')); ?></div> <div class="blog-author"><span class="icon-user"></span><?php _e('Author:','nation'); ?> <?php the_author_posts_link() ?></div> <div class="blog-category"><span class="icon-tag"></span><?php _e('Category:','nation'); ?> <?php the_category(', ') ?></div> <div class="clear"></div> </div>
Une fois les post meta data localisées, il vous suffit de les encadrer avec cette condition pour les faire disparaître lorsque le post affiché est une page :
<?php if ( $post->post_type != 'page' ) { ?> // post meta data ici <?php } ?>
Si le compteur de commentaires est affiché à un autre emplacement et que vous souhaitez aussi le masquer, vous pouvez l’englober dans une condition identique. Cela marche avec n’importe quel élément de la boucle que vous ne souhaitez pas afficher pour les pages.
Faites juste attention à englober uniquement les éléments à masquer. Si vous incluez dans votre condition une balise fermante qui s’ouvre en dehors de la condition, vous allez provoquer des bugs d’affichage quand la condition n’est pas remplie.
Enregistrez votre fichier et faites une recherche sur votre site : vous constaterez que les post meta ont disparu pour les pages.
Exclure les pages des résultats de recherche WordPress
Si vous préférez exclure complètement les pages du système de recherche de votre thème WordPress, ajoutez ce code à votre fichier functions.php :
function exclure_pages_recherche($query) { if ($query->is_search) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','exclure_pages_recherche');
Votre page de résultats de recherche ne devrait plus afficher que des articles, les pages étant exclues de la requête de recherche. Avec cette méthode, les post meta data ne sont évidemment plus un problème, il est donc inutile de conditionner leur affichage dans le template search.php.
Attention : si votre site contient des custom posts, il seront également masqués par cette fonction dont le rôle est de filtrer les résultats pour afficher uniquement les articles.
Source image : Flickr