Hook WP_query prima di eseguire una query di ricerca
Qualcuno sa se esiste un hook prima dell'esecuzione di una query di ricerca (non nel main loop) per modificare il parametro 's' ed evitare la divisione delle frasi in WordPress? Esempi sono benvenuti... grazie
P.S.: Ho già provato in questo modo, ma la prima parte della query SQL sembra indicare che WP ha già effettuato la ricerca e poi riesegue una query filtrata dai post_ids trovati inizialmente:
function alter_the_query( $where = '' ) {
global $wpdb, $table_prefix, $wp_query;
$tmpQobj = $wp_query->queried_object;
$tmpTitle = $wp_query->queried_object->post_title;
$where .= $wpdb->prepare( " AND ({$table_prefix}posts.post_title like %s OR {$table_prefix}posts.post_content like %s )", "%{$tmpTitle}%", "%{$tmpTitle}%" );
debug($where);
return $where;
}
add_filter( 'posts_where', 'alter_the_query' );
E questo è il contenuto del valore request (* rappresenta il prefisso della tabella) restituito da debug:
[request] => SELECT SQL_CALC_FOUND_ROWS ***_posts.ID FROM ***_posts WHERE 1=1 AND ***_posts.ID IN (534,868,911,917) AND ***_posts.post_type IN ('multimedia', 'news', 'social_project', 'publication') AND ((***_posts.post_status = 'publish')) AND (***_posts.post_title like '%stringa da cercare%' OR ***_posts.post_content like '%stringa da cercare%' ) ORDER BY FIELD( ***_posts.ID, 534,868,911,917 ) LIMIT 0, 3
Come puoi vedere, la ricerca originale è già stata effettuata e le mie modifiche influiscono solo sulla seconda query... Non so perché gli sviluppatori del core di WP l'abbiano implementato in questo modo, ma è un vero incubo...
Come posso agganciare la prima query, quella relativa alla ricerca originale?

Per evitare la divisione delle frasi di ricerca, utilizza la variabile di query sentence
nell'hook pre_get_posts:
function only_search_for_full_phrase( $query ) {
if ( $query->is_search() && $query->is_main_query() ) {
$query->set( 'sentence', true );
}
}
add_action( 'pre_get_posts', 'only_search_for_full_phrase' );
Non l'ho testato, ma dovrebbe funzionare.
Buona programmazione!

Stai cercando l'hook pre_get_posts
.

Ho già provato in questo modo, ma sembra che potessi modificare solo i parametri, non la query sql. Quindi la frase nel parametro 's', con cui farei un match esatto, verrà nuovamente divisa... È un caso piuttosto complicato... L'unica alternativa sembra essere fare una query sql diretta, ma devo anche cercare in molti campi acf... ed è un vero incubo...
