Se stai cercando una soluzione di ricerca per i tuoi contenuti, devi sapere che qualsiasi plugin che esegua il FILTRAGGIO in base alla tassonomia o ai campi personalizzati funzionerà.
È possibile utilizzare WP_Query con il parametro query[‘s’] e funzionerà out-of-the-box per fornire post pertinenti per quel termine chiave. Il termine chiave deve essere nella stessa lingua della lingua corrente visualizzata durante il caricamento di quella pagina. Nel codice, i post restituiti saranno nella lingua predefinita (ID, titolo del post, contenuto del post, ecc.), ma il contenuto ecoato viene tradotto in un hook successivo, quindi verrà visualizzato nella lingua tradotta nel front-end.
Solo il titolo e il contenuto del post sono ricercabili nelle lingue tradotte, i campi personalizzati esterni come ACF non lo sono. A seconda della tua configurazione, se puoi includere il contenuto dei campi personalizzati all'interno del gancio `the_content`, anche i campi personalizzati saranno ricercabili.
Affinché la ricerca funzioni su un post specifico in una lingua specifica, la traduzione del contenuto e del titolo di quel post nella stessa lingua deve esistere prima della ricerca. Se la traduzione automatica è attiva, un post deve essere visitato almeno una volta in quella lingua specifica per essere indicizzato da TP.
Tuttavia, qualsiasi plugin che utilizzi un indice, non funzionerà correttamente con il nostro plugin.
Se desideri rendere TranslatePress compatibile con una funzionalità di ricerca personalizzata che non funziona immediatamente, ecco alcune cose che dovresti sapere.
TranslatePress associa una funzione al filtro ‘pre_get_posts’ per adattare la query alla funzionalità di ricerca in una lingua tradotta.
Se la query[‘s’] è impostata e la pagina attualmente visualizzata è in una lingua tradotta, TP esegue una ricerca e restituisce gli ID dei post nella lingua predefinita in cui quel termine chiave viene trovato nei post tradotti equivalenti.
C'è un filtro che puoi usare per applicare questo hook indipendentemente dallo stato per:
!is_admin() && $query->is_main_query() && $query->is_search()
Il codice TranslatePress è il seguente:
if ( ( !is_admin() && $query->is_main_query() && $query->is_search() ) || apply_filters( 'trp_force_search', false ) )
Puoi quindi agganciarti a ‘trp_force_search’ per abilitare la ricerca in diverse condizioni. Per abilitare la ricerca sempre, usa il codice:
add_filter('trp_force_search', '__return_true');
Ecco un esempio su come creare compatibilità con una funzionalità di ricerca che non utilizza il sistema di ricerca predefinito di WordPress tramite WP_Query. Nel codice seguente, la funzione restituisce gli ID dei post per una particolare chiave di ricerca in una lingua tradotta.
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;
}
A volte potrebbe capitare di non ottenere alcun risultato di ricerca per una determinata query in una lingua secondaria. In questi casi non è chiaro se TranslatePress sia riuscito a indicizzare quel particolare post o quella pagina (a causa di vari motivi, come l’utilizzo di page builder privi di un ciclo di query classico) oppure se il problema sia dovuto a qualcos’altro.
Per vedere se un particolare ID di post ha delle stringhe indicizzate per una particolare lingua, puoi installare questo piccolo plugin.
Poi visita WordPress Admin -> Strumenti -> Debug ricerca TRP

Caratteristiche: