使用 Wordpress 的自带搜索功能,会遇到搜索结果中出现一些不想要的结果,需要进行优化。比如在搜索结果中排除一些分类的文章或者一些文章和页面。把下面的代码添加到主题的 functions.php 中即可。

如果需要排除特定 ID 的文章或页面,可以使用以下代码

function search_filter_id($query) {
    if ( !$query->is_admin && $query->is_search) {
        $query->set('post__not_in', array(11,222));//文章或者页面的 ID
    }
    return $query;
}
add_filter('pre_get_posts','search_filter_id');

注意:根据自己的情况修改文章或页面 ID

如果要排除一些分类的文章,可以使用以下代码

function search_filter_category( $query) {
    if ( !$query->is_admin && $query->is_search) {
        $query->set('cat','-11,-22'); //分类的 ID
    }
    return $query;
}
add_filter('pre_get_posts','search_filter_category');

注意:根据自己的情况修改分类 ID,前面有负号表示排除此分类,没有则表示只在此分类中搜索。

此外,如果你还使用了像 Simple Urls 类的插件,在搜索结果中还会出现 Simple Urls 的跳转链接,也是需要从搜索结果中排除的。针对此类情况可以使用以下代码

function search_filter_page($query) {
    if ($query->is_search) {
        $query->set('post_type', 'post');
    }
    return $query;
}
add_filter('pre_get_posts','search_filter_page');