Si vous cherchez une solution de recherche pour votre contenu, sachez que tout plugin qui effectue un FILTRAGE basé sur la taxonomie ou les champs personnalisés fonctionnera.
Vous pouvez utiliser WP_Query avec le paramètre query[‘s’] et cela fonctionnera directement pour fournir des articles pertinents pour ce terme clé. Le terme clé doit être dans la même langue que la langue actuellement affichée lors du chargement de cette page. Dans le code, les articles retournés seront dans la langue par défaut (IDs, titre de l'article, contenu de l'article, etc.) mais le contenu affiché est traduit via un hook ultérieur, il sera donc affiché dans la langue traduite sur le front-end.
Seuls le titre du message et le contenu du message sont consultables dans les langues traduites, les champs personnalisés externes tels que ACF ne le sont pas. Selon votre configuration, si vous pouvez inclure le contenu des champs personnalisés dans le hook `the_content`, alors les champs personnalisés sont également consultables.
Pour que la recherche fonctionne sur un article spécifique dans une langue spécifique, la traduction de ce contenu et de son titre dans cette même langue doit exister avant la recherche. Si la traduction automatique est activée, un article doit être visité au moins une fois dans cette langue spécifique afin d'être indexé par TP.
Cependant, tout plugin qui utilise un index ne fonctionnera pas correctement avec notre plugin.
Si vous souhaitez rendre TranslatePress compatible avec une fonctionnalité de recherche personnalisée pour laquelle il ne fonctionne pas « tel quel », voici quelques éléments que vous devriez connaître.
TranslatePress associe une fonction au filtre ‘ pre_get_posts ’ afin d'adapter la requête de la fonctionnalité de recherche à la langue traduite.
Si la requête[‘s’] est définie et que la page actuellement consultée est dans une langue traduite, TP effectue une recherche et renvoie les ID des publications dans la langue par défaut où ce terme clé est trouvé dans les publications traduites équivalentes.
Il existe un filtre que vous pouvez utiliser afin d'appliquer cet hook quel que soit le statut pour :
!is_admin() && $query->is_main_query() && $query->is_search()
Le code TranslatePress se présente comme suit :
if ( ( !is_admin() && $query->is_main_query() && $query->is_search() ) || apply_filters( 'trp_force_search', false ) )
Vous pouvez vous connecter à ‘trp_force_search’ pour activer la recherche dans différentes conditions. Pour activer la recherche tout le temps, utilisez le code :
add_filter('trp_force_search', '__return_true');
Voici un exemple sur la façon de créer une compatibilité avec une fonctionnalité de recherche qui n'utilise pas le système de recherche par défaut de WordPress via WP_Query. Dans le code suivant, la fonction renvoie les identifiants des articles pour une clé de recherche particulière dans une langue traduite.
add_filter( 'aws_search_results_products_ids', 'trp_aws_search_results_products_ids', 10, 2 );
function trp_aws_search_results_products_ids( $posts_ids, $s ){
global $TRP_LANGUAGE;
$trp = TRP_Translate_Press::get_trp_instance();
$trp_settings = $trp->get_component( 'settings' );
$settings = $trp_settings->get_settings();
if ( $TRP_LANGUAGE !== $settings['default-language'] ) {
$trp_search = $trp->get_component( 'search' );
$search_result_ids = $trp_search->get_post_ids_containing_search_term($s, null);
if (!empty ( $search_result_ids) ) {
return $search_result_ids;
}
}
return $posts_ids;
}
Il peut arriver que vous n'obteniez aucun résultat de recherche pour une requête spécifique dans une langue secondaire. Dans ce cas, il est difficile de déterminer si TranslatePress a pu indexer cet article ou cette page en question (pour diverses raisons, comme l'utilisation de constructeurs de pages ne disposant pas d'une boucle de requête classique) ou si un autre facteur est à l'origine de l'échec.
Pour voir si un identifiant de publication particulier a des chaînes indexées pour une langue donnée, vous pouvez installer ce petit plugin.
Puis, visitez WordPress Admin -> Outils -> TRP Search Debug

Caractéristiques :