有人知道在执行搜索查询之前(不在主循环中)是否有一个钩子来更改“s”参数以避免Wordpress的短语分裂吗?欢迎使用示例。。。谢谢
P、 S:我也尝试了以下方法,但sql查询的第一部分似乎表明WP已经完成了搜索,然后重新运行一个由首先找到的post\\u ID过滤的查询:
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\' );
这是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
如您所见,原始搜索已经完成,我的更改只影响第二个查询。。。我不知道为什么WP核心开发人员会这样做,但这是一场噩梦。。。
我的意思是,我如何钩住第一个查询,即与原始搜索相关的查询?