
本文详解如何使用 WordPress 的 get_terms() 函数正确获取某父分类(如 product_cat)下的子分类,并通过 exclude 参数灵活排除指定 ID 的分类,避免常见语法错误。
本文详解如何使用 wordpress 的 `get_terms()` 函数正确获取某父分类(如 product_cat)下的子分类,并通过 `exclude` 参数灵活排除指定 id 的分类,避免常见语法错误。
在 WordPress 开发中,常需动态获取某个产品分类(如 product_cat)下的一级子分类,同时排除某些不希望展示的分类项(例如“默认分类”或“未启用分类”)。原始代码中直接以字符串 'parent=175' 传参的方式已过时且无法支持 exclude 等高级参数——get_terms() 自 WordPress 4.5+ 起强制要求传入关联数组形式的参数,否则将触发警告或返回空结果。
✅ 正确写法如下(以父分类 ID 为 175、需排除 ID 为 201 和 305 的两个分类为例):
<?php
$args = array(
'taxonomy' => 'product_cat',
'parent' => 175,
'hide_empty' => false, // 可选:是否隐藏无文章的分类
'exclude' => array(201, 305), // 支持整数数组,多个 ID 用逗号分隔
'orderby' => 'name',
'order' => 'ASC'
);
$terms = get_terms($args);
// 注意:get_terms() 在出错时返回 WP_Error 对象,务必检查
if (is_wp_error($terms)) {
error_log('获取分类失败:' . $terms->get_error_message());
return;
}
if (!empty($terms) && !is_wp_error($terms)) {
echo '<ul class="product-subcats">';
foreach ($terms as $term) {
$term_link = get_term_link($term);
if (is_wp_error($term_link)) continue; // 跳过无效链接
echo '<li><a href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a></li>';
}
echo '</ul>';
} else {
echo '<p>暂无可用子分类。</p>';
}
?>? 关键注意事项:
- exclude 参数必须为整数数组(如 array(123, 456)),不可传入字符串或逗号分隔的字符串;
- parent 值应为具体整数(如 175),而非字符串 '175'(虽部分场景自动转换,但建议显式使用整型);
- 始终检查 get_terms() 返回值:成功时为 WP_Term 对象数组,失败时为 WP_Error,直接遍历错误对象会导致 PHP 警告;
- 使用 esc_url() 和 esc_html() 对输出内容进行安全转义,防止 XSS 风险;
- 若需排除的是当前分类自身或其子树,可结合 exclude_tree 参数(支持单个 ID 或数组),它会递归排除目标分类及其所有后代。
? 小技巧:可通过 wp_list_pluck($terms, 'term_id') 快速提取所有 ID,便于调试或二次过滤。掌握这一模式,即可灵活构建多层级分类导航、筛选器或面包屑路径。


















