You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress搜索结果中排除指定分类ID的内容?

失效原因说明

你第一段代码未生效的核心问题是缺少is_main_query()主查询判断,仅校验前台和搜索页两个条件,无法保证修改的是搜索页面的官方主查询,很容易被主题、插件自带的自定义查询干扰,所以会出现配置后不生效的问题。

解决方案1:直接调整第一段代码即可使用

只需要补充主查询判断,和你目前生效的代码判断逻辑对齐就能正常运行,修改后代码如下:

function my_search_filter( $query ) {
    // 同时满足前台、搜索页、主查询三个条件才执行修改,避免误改其他查询
    if ( !is_admin() && $query->is_search && $query->is_main_query() ) {
        // 此处-21替换为你要排除的分类ID,排除多个分类用英文逗号分隔即可,示例:'-21,-22,-23'
        $query->set( 'cat','-21' );
    }
    return $query;
}
add_filter( 'pre_get_posts', 'my_search_filter' );

提示:该写法兼容全版本WordPress,会自动排除所有归属于对应分类的文章、以及关联了该分类的自定义文章类型内容。

解决方案2:在你当前可用的代码基础上修改

如果你更习惯用已经验证过生效的代码框架,可以直接修改为按分类排除的版本,代码如下:

add_action('pre_get_posts','exclude_posts_from_search');
function exclude_posts_from_search( $query ){
    if( !is_admin() && $query->is_main_query() && is_search() ){
        // 此处填写要排除的分类ID数组,支持同时添加多个,示例:array(21,22,23)
        $exclude_category_ids = array(21);
        $query->set( 'category__not_in', $exclude_category_ids );
    }
}

提示:该写法分类ID不需要加负号,多分类配置更直观,不容易出现语法错误。

两种方案任选一种即可,都可以实现按分类ID排除搜索结果的需求。

内容的提问来源于stack exchange,提问作者VanDerPrygel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:45:03