Ganchos de WP_query antes de ejecutar una consulta de búsqueda
¿Alguien sabe si existe un gancho antes de la ejecución de una consulta de búsqueda (no en el bucle principal) para cambiar el parámetro 's' y evitar la división de frases de WordPress? Se agradecen ejemplos... gracias
PD: También lo intenté de esta manera, pero la primera parte de la consulta SQL parece indicar que WP ya realizó la búsqueda y luego volvió a ejecutar una consulta filtrada por los post_ids encontrados primero:
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' );
Y este es el contenido del valor request (* representa el prefijo de tabla) devuelto por 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 '%string to search%' OR ***__posts.post_content like '%string to searchs%' ) ORDER BY FIELD( ***__posts.ID, 534,868,911,917 ) LIMIT 0, 3
Como puedes ver, la búsqueda original ya se realizó y mis cambios solo afectan la segunda consulta... No sé por qué los desarrolladores del núcleo de WP lo hicieron así, pero es bastante problemático...
¿Cómo puedo enganchar la primera consulta, la relacionada con la búsqueda original?

Para evitar la división de frases de búsqueda, utiliza la variable de consulta sentence
en el 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' );
No lo he probado, pero debería funcionar.
¡Feliz codificación!

Estás buscando el hook pre_get_posts
.

Ya intenté de esta manera, pero parece que solo pude cambiar los parámetros, no la consulta SQL. Así que la frase en el parámetro 's', con la que haría una coincidencia exacta, pasará dividiéndose de nuevo... Es un caso bastante complicado... La única alternativa parece ser hacer una consulta SQL directa, pero también necesito buscar en muchos campos ACF... y esto es toda una pesadilla...
