使WP查询搜索与搜索词完全匹配

时间:2015-02-05 作者:Andrew Welch

我正在使用WP查询,使用搜索词时返回的结果并没有如我所愿工作。例如,搜索“art”还会返回包含“art”的单词(如“part”)的结果。我如何避免这种情况?只需返回包含确切单词“art”的“art”的结果。

2 个回复
最合适的回答,由SO网友:David Gard 整理而成

这实际上是一个棘手的问题exact 有两种方法可以解释你的问题-

只查找标题或内容完全匹配的帖子。例如,如果您搜索My post is super 您不会返回带有标题的帖子My post is super awesome.his house 您不会返回带有标题的帖子I love this house, 但你会写一篇标题为I\'m going to his house (鲁莽的例子,但希望你能抓住要点)functions.php 文件-

<小时>一零

add_action(\'pre_get_posts\', \'my_make_search_exact\', 10);
function my_make_search_exact($query){

    if(!is_admin() && $query->is_main_query() && $query->is_search) :
        $query->set(\'exact\', true);
    endif;

}
 Themy_make_search_exact() 函数将在每次进行查询时调用,使用pre_get_posts 行动挂钩。

为了确保在不需要时不干扰查询,我们在函数中检查我们是否没有查看管理区域,是否正在构造主查询以及是否正在进行搜索。

<小时>

Method 2

add_filter(\'posts_search\', \'my_search_is_exact\', 20, 2);
function my_search_is_exact($search, $wp_query){

    global $wpdb;

    if(empty($search))
        return $search;

    $q = $wp_query->query_vars;
    $n = !empty($q[\'exact\']) ? \'\' : \'%\';

    $search = $searchand = \'\';

    foreach((array)$q[\'search_terms\'] as $term) :

        $term = esc_sql(like_escape($term));

        $search.= "{$searchand}($wpdb->posts.post_title REGEXP \'[[:<:]]{$term}[[:>:]]\') OR ($wpdb->posts.post_content REGEXP \'[[:<:]]{$term}[[:>:]]\')";

        $searchand = \' AND \';

    endforeach;

    if(!empty($search)) :
        $search = " AND ({$search}) ";
        if(!is_user_logged_in())
            $search .= " AND ($wpdb->posts.post_password = \'\') ";
    endif;

    return $search;

}
贷记至tinyGod 对于此答案-http://tinygod.pt/make-wordpress-search-exact/

SO网友:Renato Gomes

我想以前有人回答过这个问题:Check this answer, 来自@Sunyatasattva

但显然WP\\U查询支持一些额外的搜索参数:

\'s\'=>$s,//(string)-通过搜索传递查询字符串变量。

“exact”=>true,//(bool)-标记使其仅与整个标题/帖子匹配-默认值为false。

“句子”=>true,//(bool)-标志使其进行短语搜索-默认值为false。

更多信息,请访问:https://gist.github.com/luetkemj/2023628

希望有帮助,

结束

相关推荐

JQuery UI插件在IE7中不起作用?

我想从中使用对话框this plugin, 但它与IE7不兼容。当我在Internet Explorer的IE7模拟器中运行它时,对话框呈现出奇怪的效果。部分透明,可拖动/可调整大小不起作用,标题消失。据我所知,问题似乎与以下其中一个(或两者)有关:控制台显示IE7不支持“querySelectorAll”。是否有解决方法</如果我以怪癖文档模式呈现页面,一切正常。有没有办法强制IE7以怪癖模式呈现页面?我遇到过this, 这建议在doctype之前添加一条注释——但我不知道如何在WordPress