Un client éditeur d’un site de documentation technique pour des équipements de chauffage, disponible en français, anglais et polonais sous WPML, utilisait Relevanssi pour améliorer sa recherche interne, la recherche native de WordPress étant jugée trop imprécise sur ce volume de contenu. Le problème remonté par les utilisateurs polonais : une recherche sur un terme technique renvoyait indistinctement des résultats en polonais, en français et en anglais, dans un ordre de pertinence qui ne tenait aucun compte de la langue de la page consultée par le visiteur.
Ce comportement n’est pas un bug de Relevanssi : par défaut, le plugin indexe l’ensemble du contenu publié sans distinction de langue, WPML et Relevanssi n’étant pas connectés l’un à l’autre sans configuration explicite.
Comprendre pourquoi le filtrage n’est pas automatique
Relevanssi construit son propre index de recherche, stocké dans des tables dédiées (wp_relevanssi et associées), indépendamment du système de langue de WPML. Une recherche exécutée via Relevanssi interroge cet index sans connaître, par défaut, la langue active de la page depuis laquelle la recherche a été lancée. WPML, de son côté, ne modifie pas nativement le comportement de plugins tiers de recherche : la connexion entre les deux doit être établie explicitement.
Mettre en place le filtrage par langue

Relevanssi propose un filtre dédié, relevanssi_modify_wp_query, qui permet d’intervenir sur la requête de recherche avant son exécution. Nous l’utilisons pour restreindre les résultats à la langue active récupérée via l’API WPML :
add_filter( 'relevanssi_modify_wp_query', function( $query ) {
if ( ! function_exists( 'apply_filters' ) ) {
return $query;
}
$langue_active = apply_filters( 'wpml_current_language', null );
if ( $langue_active ) {
$query->set( 'lang', $langue_active );
}
return $query;
});
Le paramètre lang est celui utilisé nativement par WPML pour restreindre une requête WordPress à une langue donnée ; Relevanssi le respecte correctement dès lors qu’il est présent dans l’objet WP_Query qu’il manipule en interne, à condition que l’indexation elle-même ait bien conservé l’information de langue pour chaque contenu indexé.
Vérifier que l’indexation elle-même respecte la langue
Un point souvent négligé : l’ajout du filtre ci-dessus ne suffit pas si l’index Relevanssi a été construit avant l’activation de WPML, ou si certains contenus ont été ajoutés en masse par un import qui contourne les hooks habituels de publication. Nous recommandons systématiquement une reconstruction complète de l’index après la mise en place de ce filtrage, depuis Relevanssi → Indexer, en cochant l’option de réindexation complète plutôt qu’incrémentale.
# Reconstruction de l'index en ligne de commande, utile sur un gros volume
wp relevanssi index --network
Le cas particulier des recherches transversales voulues par le client
Sur ce projet, le client souhaitait malgré tout qu’une recherche sur un code de référence produit (identique dans toutes les langues, par exemple une référence fabricant à six chiffres) retourne les résultats de toutes les langues, l’utilisateur cherchant alors une pièce précise plutôt qu’un contenu éditorial. Nous avons ajouté une exception au filtre, détectant un motif de référence produit dans la requête de recherche avant d’appliquer la restriction de langue :
add_filter( 'relevanssi_modify_wp_query', function( $query ) {
$terme_recherche = get_search_query();
// Une référence produit ressemble à six chiffres exactement
if ( preg_match( '/^\d{6}$/', trim( $terme_recherche ) ) ) {
return $query; // pas de restriction de langue sur une référence produit
}
$langue_active = apply_filters( 'wpml_current_language', null );
if ( $langue_active ) {
$query->set( 'lang', $langue_active );
}
return $query;
});
Points de vérification après mise en place
- Lancer une recherche identique depuis chacune des trois versions linguistiques du site et vérifier que seuls les résultats de la langue courante apparaissent, hors cas de référence produit.
- Vérifier le comportement sur un contenu qui n’existe que dans une seule langue (une page non encore traduite) pour s’assurer qu’elle n’apparaît pas indûment dans les résultats des autres langues.
- Contrôler les statistiques de recherche internes après une à deux semaines, pour confirmer que le taux de recherches sans résultat n’a pas augmenté anormalement suite au filtrage.
Un filtrage de recherche trop strict peut créer autant de frustration qu’un filtrage absent : toujours vérifier s’il existe, comme ici avec les références produit, un besoin légitime de recherche transversale à préserver.
Ce que cet article ne traite pas
La configuration générale de Relevanssi pour améliorer la pertinence de la recherche interne, indépendamment de tout enjeu multilingue, a été traitée séparément dans la rubrique consacrée à la performance et à l’expérience de recherche, et n’est pas reprise ici.
En résumé
Relevanssi n’exclut pas nativement les autres langues des résultats de recherche sur un site WPML : ce filtrage doit être ajouté explicitement via relevanssi_modify_wp_query combiné au filtre wpml_current_language, puis validé par une réindexation complète. Un besoin de recherche transversale légitime, comme une référence produit partagée entre langues, mérite d’être identifié et exclu spécifiquement de cette restriction plutôt que traité comme un simple oubli.