ACF分类法层级循环输出
在 WordPress 中,使用 get_terms()
获取 product-category
这个自定义分类法的所有分类,并按照层级关系输出,可以使用递归的方式来处理。以下是实现方法:
function display_product_categories_hierarchy($parent = 0, $taxonomy = 'product-category', $level = 0) {
$args = array(
'taxonomy' => $taxonomy,
'parent' => $parent,
'hide_empty' => false, // 是否隐藏没有文章的分类
);
$terms = get_terms($args);
if (!empty($terms) && !is_wp_error($terms)) {
echo '<ul>';
foreach ($terms as $term) {
echo '<li>' . str_repeat('--', $level) . '<a href="' . get_term_link($term) . '">' . $term->name . '</a></li>';
// 递归调用获取子分类
display_product_categories_hierarchy($term->term_id, $taxonomy, $level + 1);
}
echo '</ul>';
}
}
// 在适当的位置调用函数,比如放在 template 或者 functions.php
display_product_categories_hierarchy();
代码解析
get_terms()
获取product-category
分类法的分类列表。parent
参数用于获取指定父级 ID 下的子分类:0
代表获取顶级分类。- 递归调用时,传递子分类的 ID 作为
parent
参数,以获取其下级分类。
str_repeat('--', $level)
作用是让不同级别的分类在 HTML 结构中有层级缩进(可选)。get_term_link($term)
获取分类的链接,使其可点击跳转。
示例输出
如果你的 product-category
结构如下:
- 电子产品
- 手机
- 苹果手机
- 安卓手机
- 电脑
- 笔记本电脑
- 台式电脑
- 家电
- 洗衣机
- 冰箱
前端 HTML 结构将会是:
<ul>
<li><a href="电子产品链接">电子产品</a></li>
<ul>
<li>--<a href="手机链接">手机</a></li>
<ul>
<li>----<a href="苹果手机链接">苹果手机</a></li>
<li>----<a href="安卓手机链接">安卓手机</a></li>
</ul>
<li>--<a href="电脑链接">电脑</a></li>
<ul>
<li>----<a href="笔记本电脑链接">笔记本电脑</a></li>
<li>----<a href="台式电脑链接">台式电脑</a></li>
</ul>
</ul>
<li><a href="家电链接">家电</a></li>
<ul>
<li>--<a href="洗衣机链接">洗衣机</a></li>
<li>--<a href="冰箱链接">冰箱</a></li>
</ul>
</ul>
这样就可以完整地输出 product-category
分类法的 1 级、2 级和 3 级分类。你可以在 archive-product-category.php
或 taxonomy-product-category.php
模板中调用它。
如果你需要自定义 CSS 让它显示得更整齐,也可以给 ul
或 li
添加 class
方便样式调整。
如果你有更复杂的需求,比如只显示特定层级的分类,或者自定义排序方式,可以修改 get_terms()
里的参数,比如 orderby
、order
等。