
本文详解如何在 wordpress 中通过 get_term_children() 函数分别获取两个(或多个)指定父分类 id 的子分类,并合并结果,解决直接传入数组导致函数失效的问题。
本文详解如何在 wordpress 中通过 get_term_children() 函数分别获取两个(或多个)指定父分类 id 的子分类,并合并结果,解决直接传入数组导致函数失效的问题。
WordPress 的 get_term_children() 函数设计为仅接受单个整数型父分类 ID作为第一个参数,不支持数组输入。因此,当尝试传入 array(37, 36) 时,函数会因类型不匹配而返回空结果或触发警告,无法正常工作。
要获取多个父分类(如 ID 为 36 和 37)下的全部子分类,需对每个父 ID 单独调用该函数,再合并结果。推荐做法如下:
// 分别获取两个父分类的子分类 ID 数组
$children_36 = get_term_children(36, 'product_cat');
$children_37 = get_term_children(37, 'product_cat');
// 合并并去重(避免重复 ID,如某子分类同时属于多个父类——虽在标准层级中不常见,但健壮性考虑)
$all_children = array_unique(array_merge($children_36, $children_37));
// 可选:转换为 WP_Term 对象以便进一步使用(如显示名称、链接等)
if (!empty($all_children)) {
$terms = get_terms([
'taxonomy' => 'product_cat',
'include' => $all_children,
'hide_empty' => false,
]);
if (!is_wp_error($terms)) {
foreach ($terms as $term) {
echo '<a href="'%20.%20get_term_link(%24term)%20.%20'">' . esc_html($term->name) . '</a><br>';
}
}
}
⚠️ 注意事项:
- get_term_children() 返回的是子分类的 ID 数组(整数),而非 WP_Term 对象,如需展示名称、链接等,务必配合 get_terms() 或 get_term() 使用;
- 确保父分类 ID 确实存在且属于 product_cat 分类法,否则返回空数组;
- 若需排除空分类,可在 get_terms() 中设置 'hide_empty' => true;
- 如需扩展至 N 个父分类,建议使用循环封装逻辑,提升可维护性:
$parent_ids = [36, 37, 42]; // 可动态扩展
$all_child_ids = [];
foreach ($parent_ids as $parent_id) {
$child_ids = get_term_children($parent_id, 'product_cat');
$all_child_ids = array_merge($all_child_ids, $child_ids);
}
$all_child_ids = array_unique($all_child_ids);
此方法简洁、可靠,符合 WordPress 官方函数的设计规范,是处理多父级子分类查询的标准实践。











