导读:本期聚焦于小伙伴创作的《如何在WooCommerce中动态显示兄弟分类和直接子分类列表?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在WooCommerce中动态显示兄弟分类和直接子分类列表?》有用,将其分享出去将是对创作者最好的鼓励。

WooCommerce动态显示兄弟分类和直接子分类列表

在WooCommerce电商网站开发中,分类导航的灵活性直接影响用户的购物体验。很多场景下我们需要在分类页面同时展示当前分类的直接子分类,以及同层级的兄弟分类,方便用户快速切换同级别分类或者进入下一级子类目。本文将介绍如何通过自定义函数实现这个需求,不需要依赖额外的插件,直接通过代码即可完成功能。

实现思路说明

要实现动态显示兄弟分类和直接子分类,核心逻辑分为三步:

  • 首先获取当前访问的WooCommerce产品分类对象,确认当前所属的分类层级
  • 如果当前分类存在父分类,就获取父分类下的所有子分类作为兄弟分类;如果当前是顶级分类,则兄弟分类为空
  • 获取当前分类下的所有直接子分类,最后将两类分类合并后输出列表

核心代码实现

把下面的代码添加到当前主题的functions.php文件中,就可以注册一个可用的短代码,之后在任意页面、文章或者小工具中通过短代码调用即可。

/**
 * 显示WooCommerce当前分类的兄弟分类和直接子分类
 * 使用方法:在文章/页面中插入短代码 [wc_sibling_child_cats]
 */
function display_wc_sibling_child_cats() {
    // 仅在产品分类页面生效
    if (!is_product_category()) {
        return '';
    }

    // 获取当前分类对象
    $current_term = get_queried_object();
    if (!$current_term || !isset($current_term->term_id)) {
        return '';
    }

    $current_term_id = $current_term->term_id;
    $parent_term_id = $current_term->parent;
    $output = '';

    // 获取兄弟分类:如果有父分类,就取父分类下的所有子分类,排除当前分类本身
    $sibling_cats = [];
    if ($parent_term_id > 0) {
        $sibling_args = [
            'taxonomy'   => 'product_cat',
            'parent'     => $parent_term_id,
            'hide_empty' => false, // 可以根据需求改为true,只显示有产品的分类
            'exclude'    => [$current_term_id] // 排除当前分类
        ];
        $sibling_cats = get_terms($sibling_args);
    }

    // 获取当前分类的直接子分类
    $child_args = [
        'taxonomy'   => 'product_cat',
        'parent'     => $current_term_id,
        'hide_empty' => false
    ];
    $child_cats = get_terms($child_args);

    // 合并两类分类,先放兄弟分类,再放子分类
    $all_cats = array_merge($sibling_cats, $child_cats);

    // 如果有分类才输出列表
    if (!empty($all_cats) && !is_wp_error($all_cats)) {
        $output .= '<div class="wc-cat-nav-list">';
        $output .= '<h3>相关分类</h3>';
        $output .= '<ul>';
        foreach ($all_cats as $cat) {
            // 高亮当前分类
            $active_class = ($cat->term_id == $current_term_id) ? ' class="current-cat"' : '';
            $cat_link = get_term_link($cat);
            if (!is_wp_error($cat_link)) {
                $output .= '<li' . $active_class . '>';
                $output .= '<a href="' . esc_url($cat_link) . '">' . esc_html($cat->name) . '</a>';
                $output .= '</li>';
            }
        }
        $output .= '</ul>';
        $output .= '</div>';
    }

    return $output;
}
add_shortcode('wc_sibling_child_cats', 'display_wc_sibling_child_cats');

代码功能说明

上述代码首先通过is_product_category()判断当前是否处于WooCommerce产品分类页面,避免在不相关的页面输出内容。接着获取当前分类的信息,通过当前分类的parent属性判断是否有父分类:如果有父分类,就查询父分类下的所有子分类作为兄弟分类,同时排除当前分类本身;如果没有父分类(即当前是顶级分类),则兄弟分类为空。

之后查询当前分类的直接子分类,将两类分类合并后生成无序列表。列表中会给当前分类添加current-cat类,方便后续通过CSS高亮显示当前所在分类。所有输出的链接和文本都使用了WordPress的转义函数,避免安全风险。

使用方法

代码添加之后,你可以在产品分类页面的编辑器中插入短代码[wc_sibling_child_cats],或者在主题模板文件中直接调用echo do_shortcode('[wc_sibling_child_cats]');来输出分类列表。如果需要调整样式,可以给生成的wc-cat-nav-list类添加自定义CSS,比如调整列表间距、高亮颜色等。

注意事项

  • 修改主题文件前建议先创建子主题,避免主题更新后代码丢失
  • 如果不需要显示空分类,可以把hide_empty参数改为true
  • 如果需要调整兄弟分类和子分类的显示顺序,可以在合并数组后自行调整排序逻辑

WooCommerce产品分类导航兄弟分类子分类WordPress短代码

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。