Retrouver un article dont on ne se souvient que d’un bout de titre, ou un utilisateur dont on connaît seulement le prénom : le champ de recherche présent en haut de chaque tableau d’administration rend ce genre de recherche possible sans avoir à parcourir des pages de pagination.
Une simple façade sur WP_Query
Côté articles, cette recherche repose sur le paramètre s transmis à WP_Query, exactement comme la recherche publique du site : elle interroge par défaut les colonnes post_title, post_content et post_excerpt via une clause LIKE construite par la méthode privée WP_Query::parse_search(). Le filtre posts_search permet d’étendre cette logique à d’autres colonnes ou d’y intégrer une métadonnée personnalisée.
Exemple : chercher aussi dans une métadonnée
<?php
add_filter( 'posts_search', function ( $search, $query ) {
global $wpdb;
if ( is_admin() && $query->is_main_query() && $query->get( 's' ) ) {
$terme = $wpdb->esc_like( $query->get( 's' ) );
$search .= $wpdb->prepare( " OR {$wpdb->posts}.ID IN (
SELECT post_id FROM {$wpdb->postmeta}
WHERE meta_key='reference' AND meta_value LIKE %s
)", '%' . $terme . '%' );
}
return $search;
}, 10, 2 );
Bon à savoir
- Cette recherche par défaut ne couvre pas les métadonnées personnalisées : sans filtre additionnel, une référence produit stockée en champ personnalisé restera introuvable.
- La recherche d’utilisateurs, d’un autre côté, s’appuie sur
WP_User_Queryet interroge par défaut le login, l’e-mail et le nom affiché, pas les métadonnées utilisateur. - Sur une base volumineuse, une recherche non indexée sur des colonnes de type texte long peut devenir lente : envisagez une extension de recherche dédiée si le catalogue est important.