讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

WordPress 教程:从搜索结果中排除特定分类的专业方法

落浩酱_9756

落浩酱_9756

发布时间:2025-08-29 14:54:01

|

943人浏览过

|

来源于php中文网

原创

WordPress 教程:从搜索结果中排除特定分类的专业方法

本教程详细指导如何在 WordPress 网站的搜索结果中排除特定分类的文章。文章将介绍使用 pre_get_posts 钩子结合 tax_query 参数的专业方法,避免手动排除文章ID或不奏效的旧有方法,确保搜索结果的精准性和相关性,提升用户体验。

理解需求:为何排除特定分类?

在运营 wordpress 网站时,有时我们不希望某些特定分类下的文章出现在站内搜索结果中。例如,可能有一些内部管理、归档性质的分类,或是一些仅用于特定页面展示而非搜索发现的内容。通过排除这些分类,可以有效提升搜索结果的相关性和用户体验,避免用户在搜索时看到不必要或不相关的内容。

常见误区与低效方案

在尝试实现这一功能时,开发者可能会遇到一些常见的误区或采用低效的解决方案:

  1. 使用 $query->set( 'cat','-ID' ): 这种方法在某些旧版 WordPress 或特定配置下可能有效,但并非总是可靠。它的主要问题在于,当 pre_get_posts 钩子执行时,'cat' 参数可能已经被其他查询条件覆盖或处理,导致排除操作不生效。

  2. 手动排除文章 ID: 另一种临时解决方案是获取需要排除分类下的所有文章 ID,然后使用 post__not_in 参数手动将其排除。

    add_action('pre_get_posts','exclude_posts_from_search');
    function exclude_posts_from_search( $query ){
        if( $query->is_main_query() && is_search() ){
            // 示例:手动排除文章ID
            $post_ids = array(52384, 52366, 52058, 52392, 52374);
            $query->set('post__not_in', $post_ids);
        }
    }

    这种方法虽然能实现效果,但效率极低且难以维护。每当分类下新增或删除文章时,都需要手动更新 post_ids 数组,这在内容频繁更新的网站中是不可持续的。

专业解决方案:使用 pre_get_posts 和 tax_query

WordPress 提供了一个强大且灵活的钩子 pre_get_posts,它允许我们在主查询执行之前修改查询参数。结合 tax_query 参数,我们可以精确地控制分类(或其他自定义分类法)的包含或排除。

tax_query 是一个用于构建复杂分类法查询的数组,它允许我们指定分类法名称、字段(如 ID、slug)、术语(term)以及操作符(如 IN、NOT IN)。

HISUI 前端框架开发指南(IRIS版)
HISUI 前端框架开发指南(IRIS版)

HISUI 前端框架基础开发指南。HISUI 是基于 easyui 二次开发的 jQuery UI 组件库,专为医疗信息系统设计。当涉及 HISUI 组件开发、jQuery easyui 表格/表单/布局/窗口、医疗系统前端页面编写时使用此 skill。 涵盖 40 个组件的官方文档参考,支持声明式与编程式两种初始化方式,提供 $cm/$m 数据访问方法。

下载

以下是实现从搜索结果中排除特定分类的专业代码:

/**
 * 从WordPress搜索结果中排除特定分类
 *
 * @param WP_Query $query 当前的WP_Query对象
 */
function exclude_categories_from_search($query) {
    // 确保只在搜索页面且非后台管理时修改查询
    // $query->is_search 检查当前是否为搜索查询
    // !is_admin() 确保代码只在前端执行
    if ( !$query->is_search || is_admin() ) {
        return $query;
    }

    // 定义要排除的分类ID数组
    // 请将这里的示例ID替换为您实际需要排除的分类ID
    $term_ids_to_exclude = array( 19, 18, 214, 226, 20 ); 

    // 构建 tax_query 数组
    $taxquery = array(
        array(
            'taxonomy' => 'category', // 指定要查询的分类法,默认为 'category'
            'field'    => 'id',      // 指定查询字段,这里是分类ID
            'terms'    => $term_ids_to_exclude, // 要排除的分类ID数组
            'operator' => 'NOT IN'   // 操作符:'NOT IN' 表示排除这些ID
        )
    );

    // 将构建好的 tax_query 设置到当前查询对象中
    $query->set( 'tax_query', $taxquery );

    // 返回修改后的查询对象
    return $query;
}
add_action( 'pre_get_posts', 'exclude_categories_from_search' );

代码详解:

  1. function exclude_categories_from_search($query): 定义一个函数,接收当前的 WP_Query 对象作为参数。
  2. if ( !$query->is_search || is_admin() ): 这是一个关键的条件判断。它确保我们的代码只在以下两种情况下执行:
    • 当前查询是一个搜索查询 ($query->is_search 为真)。
    • 当前请求不是在 WordPress 后台 (!is_admin() 为真)。 这样可以避免不必要的查询修改,确保代码只在需要时生效。
  3. $term_ids_to_exclude = array( 19, 18, 214, 226, 20 );: 定义一个数组,其中包含您希望从搜索结果中排除的所有分类的 ID。请务必将这些示例 ID 替换为您网站中实际的分类 ID。
  4. $taxquery = array(...): 构建 tax_query 数组。
    • 'taxonomy' => 'category':指定我们要操作的分类法是 WordPress 内置的 category。如果您要排除自定义分类法(例如 product_cat),请在此处更改其名称。
    • 'field' => 'id':表示我们将根据分类的 ID 进行查询。您也可以使用 'slug' 根据分类的别名进行查询。
    • 'terms' => $term_ids_to_exclude:传入要排除的分类 ID 数组。
    • 'operator' => 'NOT IN':这是核心部分,它告诉 WordPress 排除所有属于 $term_ids_to_exclude 数组中 ID 的分类。
  5. $query->set( 'tax_query', $taxquery );: 将构建好的 tax_query 应用到当前的 WP_Query 对象中。
  6. add_action( 'pre_get_posts', 'exclude_categories_from_search' );: 将我们的函数挂载到 pre_get_posts 钩子上,确保在 WordPress 生成查询之前执行我们的修改。

如何获取分类ID

要找到您网站中分类的 ID,您可以:

  1. 登录 WordPress 后台。
  2. 导航到 文章 > 分类。
  3. 将鼠标悬停在您想要排除的分类名称上,浏览器左下角会显示链接,其中包含 tag_ID= 后面的数字,这就是分类的 ID。
  4. 或者,点击进入该分类的编辑页面,浏览器地址栏中的 URL 会显示 tag_ID= 后面的数字。

注意事项

  • 代码放置位置:这段代码应放置在您当前活动主题的 functions.php 文件中。更推荐的做法是将其放入一个自定义插件中,以确保在主题切换时功能不会丢失。
  • 多分类法排除:如果需要排除多个分类法中的术语,可以在 $taxquery 数组中添加更多的子数组。
  • 性能考量:对于小型到中型网站,此方法对性能影响微乎其微。对于超大型网站,如果需要排除的分类数量非常庞大,可能需要进行性能测试。
  • 测试:在将代码部署到生产环境之前,务必在开发或测试环境中进行充分测试,确保功能按预期工作且没有引入新的问题。
  • 与其他插件的兼容性:某些SEO插件或自定义搜索插件可能会修改 pre_get_posts 钩子。如果出现冲突,可能需要调整代码的优先级(通过 add_action 的第三个参数)。

总结

通过利用 pre_get_posts 钩子和 tax_query 参数,我们可以以一种高效、灵活且易于维护的方式,精确控制 WordPress 搜索结果中分类的显示。这种方法避免了手动排除文章 ID 的繁琐,也解决了旧版 $query->set('cat', '-ID') 可能存在的兼容性问题,是实现这一功能的最佳实践。正确实施后,将显著提升网站搜索功能的专业性和用户体验。

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

3700

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

614

2023.10.07

wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

6875

2023.09.18

wordpress下载后怎么安装
wordpress下载后怎么安装

安装前准备:确保服务器满足要求、获取安装文件、创建数据库。上传 wordpress 文件。创建数据库和用户。运行安装程序:选择语言、输入数据库信息、网站标题和管理员信息。安装 wordpress。安装后配置:设置永久链接、安装主题、安装插件、创建内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6939

2024.04.15

WordPress插件教程
WordPress插件教程

本专题整理热门WordPress插件资源,涵盖SEO优化、缓存加速、安全防护、表单管理、电商扩展等插件推荐与使用教程。

338

2026.06.16

WordPress建站教程大全
WordPress建站教程大全

本专题汇总WordPress教程相关内容,包括WordPress安装教程、建站教程、使用技巧、网站管理经验和实战案例,帮助用户快速掌握WordPress建站与运营方法。

920

2026.06.16

WordPress开发教程
WordPress开发教程

本专题提供WordPress开发技术资料,包括主题开发、插件开发、自定义功能开发、API调用及性能优化等内容。

1058

2026.06.16

seo页面描述
seo页面描述

一个好的SEO页面描述应该包含关键词、简明扼要地概括网页的主题和内容、具有吸引力、与网页内容相符,并且是独特的。它不仅可以帮助搜索引擎了解网页的内容,还可以吸引用户点击进入网页。因此,编写一个优秀的SEO页面描述对于网页的排名和点击率都非常重要。

5221

2023.08.31

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn