get_term_children传入36、37父ID数组获取子术语无效如何解决
问题原因
WordPress原生get_term_children()函数的第一个参数仅支持传入单个整数类型的父术语ID,不接收数组格式的多ID入参,直接传入ID数组array(37,36)会触发参数类型校验错误,无法返回预期的子术语结果。
可行解决方案
方案1:循环遍历父ID合并结果(全版本兼容)
该方案无WordPress版本限制,兼容性最强,适合所有场景:
$parent_ids = [36, 37]; $all_child_cats = []; foreach ($parent_ids as $pid) { $res = get_term_children((int)$pid, 'product_cat'); if (!is_wp_error($res)) { $all_child_cats = array_merge($all_child_cats, $res); } } // 去除重复的子术语ID $categories = array_unique($all_child_cats);
方案2:直接用get_terms查询(性能更优,WordPress 4.6+支持)
该方案仅需一次数据库查询,性能高于循环调用,只要站点WordPress版本不低于4.6即可使用:
$categories = get_terms([ 'taxonomy' => 'product_cat', 'parent__in' => [36, 37], // 直接传入多父ID数组 'hide_empty' => false, // 可根据业务需求调整,设为true则只返回绑定了内容的子术语 'fields' => 'ids' // 若需要获取完整的术语对象,删除此行即可 ]);
注意事项
- 如果不确定线上站点的WordPress版本,优先选择方案1,避免出现兼容问题
- 两个父术语如果存在共同归属的子术语,记得加
array_unique()做去重处理,避免重复数据 - 如果需要递归获取所有层级的子术语(即孙级、曾孙级术语),方案1默认支持递归查询,方案2需要额外加
'hierarchical' => true参数并调整查询逻辑。
内容的提问来源于stack exchange,提问作者Squad_KF
相关产品推荐
相关产品推荐

