优先用 get_category() 获取单个栏目信息,需传入整型 ID 并判空;非 WordPress 项目用 PDO 预处理查询;get_term() 更通用,get_categories() 不适用于单条查询。

用 get_category() 获取单个栏目信息(WordPress 场景)
如果你在 WordPress 主题或插件里开发,get_category() 是最直接的方式。它接收一个整数 ID,返回一个 WP_Term 对象(WordPress 4.4+)或 stdClass 对象(旧版),包含名称、别名、描述、父级等字段。
常见错误是传入字符串 ID 或未检查返回值是否为空——ID 不存在时函数返回 false,不加判断直接取 $cat->name 会触发 PHP Notice。
- 确保传入的是整型:
(int) $cat_id,避免 SQL 注入风险(虽然该函数不拼 SQL,但 ID 类型校验仍是好习惯) - 必须判空:
if ( $cat = get_category(123) ) { echo $cat->name; } - 注意:该函数默认不缓存结果,高频调用建议配合
wp_cache_get()手动缓存
原生 PHP + MySQL 查询栏目(非 WordPress)
若你用的是自定义 CMS 或纯 PHP 项目,直接查数据库即可。假设栏目表叫 categories,主键为 id,推荐用 PDO 预处理防止注入:
$stmt = $pdo->prepare("SELECT * FROM categories WHERE id = ?");
$stmt->execute([$cat_id]);
$cat = $stmt->fetch(PDO::FETCH_ASSOC);
容易踩的坑:
立即学习“PHP免费学习笔记(深入)”;
- 没设
$cat_id类型约束,用户传'1 OR 1=1'会出问题 —— 预处理能防,但变量本身也建议先filter_var($cat_id, FILTER_VALIDATE_INT) - 查不到时返回
false或空数组,别直接访问$cat['name'],先用isset($cat['id'])判断 - 如果栏目有层级(如 parent_id 字段),且需要获取完整路径(如 “新闻 > 国内 > 北京”),不能只查一行,得递归或 JOIN 向上查父级
get_term() 和 get_categories() 的区别与选型
WordPress 中常有人混淆这三个函数:
-
get_category(123):专用于分类目录(category taxonomy),ID 是 term_id,返回单个对象 -
get_term(123, 'category'):更通用,支持任意自定义分类法(如product_cat),同样返回单个 term,但需显式指定 taxonomy -
get_categories(['include' => 123]):返回数组,即使只 include 一个 ID,结果也是[0] => object,多此一举且性能略差
结论:要单条记录,优先用 get_category() 或 get_term();别用 get_categories() 去“模拟单查”,它本质是列表接口。
ID 不存在或栏目被删除后的表现
无论用哪种方式,ID 无效时行为一致:返回 false 或空结果。但容易被忽略的是「栏目被禁用但未删」的情况 —— 比如某些 CMS 用 status 字段标记启用状态('publish' / 'draft'),此时 SQL 查询必须加上 AND status = 'publish',否则可能返回已下线的栏目信息。
另一个隐藏点:缓存失效。如果栏目信息被更新(比如名称改了),但代码层用了文件缓存或 APCu 缓存且没主动清理,get_category() 可能仍返回旧数据 —— 这类问题往往排查半天才发现不是逻辑错,是缓存没刷新。











