Cârlige WP_query înainte de executarea unei interogări de căutare
Cineva știe dacă există un hook înainte de executarea unei interogări de căutare (nu în bucla principală) pentru a modifica parametrul 's' și a evita divizarea frazelor în WordPress? Exemple sunt binevenite... mulțumesc
P.S.: Am încercat și în acest fel, dar prima parte a interogării SQL pare să indice că WP a efectuat deja căutarea și apoi rulează din nou o interogare filtrată după post_ids găsite inițial:
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' );
Și acesta este conținutul valorii request returnat de debug (* reprezintă prefixul tabelului):
[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 '%string to search%' OR ***__posts.post_content like '%string to searchs%' ) ORDER BY FIELD( ***__posts.ID, 534,868,911,917 ) LIMIT 0, 3
După cum puteți vedea, căutarea originală este deja efectuată și modificările mele afectează doar a doua interogare... Nu știu de ce dezvoltatorii de WordPress au implementat-o în acest fel, dar este o adevărată coșmar...
Cum pot să modific prima interogare, cea legată de căutarea originală?

Pentru a evita împărțirea frazelor de căutare, folosește variabila de interogare sentence
în hook-ul 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' );
Nu am testat, dar ar trebui să funcționeze.
Programare plăcută!

Căutați hook-ul WordPress pre_get_posts
.

Am încercat deja în felul acesta, dar se pare că am putut modifica doar parametrii, nu interogarea SQL. Deci fraza din parametrul 's', cu care aș face o potrivire exactă, va trece prin divizare din nou... Este un caz destul de complicat... Singura alternativă pare a fi să fac o interogare SQL directă, dar trebuie să caut și în multe câmpuri ACF... și asta e destul de coșmar...
