如何在搜索中排除匹配的单词“class”?

时间:2013-04-25 作者:Jodi Warren

我想排除“class”这个词与搜索词“lass”的匹配。

在我帮助管理的一个网站上,搜索词“lass”非常突出。不幸的是,这与许多WP帖子内容中“class”的常见用法相匹配,返回了大量不相关的结果。然而,我仍然希望帖子中有“class”一词可以匹配,我只是不希望它匹配“lass”和“class”。

以下是三个可能的帖子:

1.
<a href="http://path/to/image-large.jpg"><img class="aligncenter size-full wp-image-1234" alt="Image" src="http://path/to/image.jpg"" width="600" height="300" /></a>

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam.

2.
<a href="http://path/to/image-large.jpg"><img class="aligncenter size-full wp-image-1234" alt="Image" src="http://path/to/image.jpg"" width="600" height="300" /></a>

Lass is lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam.

3.
Lass is lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam.
如果要搜索“lass”,我希望返回结果2和3,而不是结果1。

我在these two 问题,但它们并没有完全满足我的要求。如有任何建议,将不胜感激。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

您可以尝试使用posts_search 按照@Kaiser在您提供的第一个链接中的优雅建议进行筛选。这里有一个想法:

function filter_search($sql){
    global $wpdb;
    if( strpos(get_query_var("s"),"lass") !== false AND strpos(get_query_var("s"),"class") === false ){
        $sql .= " AND {$wpdb->posts}.post_title NOT LIKE \'%class%\'";
        $sql .= " AND {$wpdb->posts}.post_content NOT LIKE \'%class%\'"; 
    }
    return $sql;
}
add_filter( \'posts_search\', \'filter_search\');
检查搜索词是否包含lass 而不是class 然后修改搜索查询以排除class.

SQL中的更改如下所示:

Before:

AND (((wp_posts.post_title LIKE \'%lass%\') OR (wp_posts.post_content LIKE \'%lass%\'))) 

After:

AND (((wp_posts.post_title LIKE \'%lass%\') OR (wp_posts.post_content LIKE \'%lass%\'))) 
AND wp_posts.post_title NOT LIKE \'%class%\' AND wp_posts.post_content NOT LIKE \'%class%\'
更新:您可以尝试

   function filter_search($sql){
        global $wpdb;
        if( strpos(get_query_var("s"),"lass") !== false AND strpos(get_query_var("s"),"class") === false ){
            $sql .= " AND ( {$wpdb->posts}.post_content LIKE \'lass %\'"; 
            $sql .= " OR {$wpdb->posts}.post_content LIKE \'% lass %\'"; 
            $sql .= " OR {$wpdb->posts}.post_content LIKE \'% lass\' )"; 
        }
        return $sql;
    }
    add_filter( \'posts_search\', \'filter_search\');
如果你想准确定位单词lass 在帖子内容中。

结束

相关推荐

Get_Posts()中的Tax_Query是否不起作用?

我正试图打印出每个分类法中的所有帖子,其中包含一个名为product (jigoshop产品)。所以我用$cats = get_terms(\'product_cat\');, 然后我循环遍历它们,并获得分类法中的所有帖子。问题是,它不起作用。它只是返回空白!$uposts = get_posts(array( \'post_type\' => \'product\', \'numberposts\' => -1, \'tax_query\' =