You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce订单页单独输出已购商品的主分类与子分类数据属性

WooCommerce 订单页单独输出商品主/子分类方案

你可以通过判断产品分类的parent属性完成区分:父级ID为0的是顶级主分类,父级ID不为0的则为子分类。为了优化性能,我们将原来的两次分类查询合并为单次查询,完整修改代码如下:

// 订单商品项输出主/子分类自定义data属性
add_action( 'woocommerce_order_item_meta_end', 'display_split_product_cats_in_order', 10, 4 );
function display_split_product_cats_in_order( $item_id, $item, $order, $bool ) {
    $product_id = $item->get_product_id();
    // 单次查询获取分类完整对象,避免重复查询数据库
    $product_cats = wp_get_post_terms( $product_id, 'product_cat' );
    
    $main_cats = $main_cat_ids = $sub_cats = $sub_cat_ids = [];
    
    foreach ( $product_cats as $cat ) {
        if ( $cat->parent == 0 ) {
            // 父级为0是主分类
            $main_cats[] = $cat->name;
            $main_cat_ids[] = $cat->term_id;
        } else {
            // 父级不为0是子分类
            $sub_cats[] = $cat->name;
            $sub_cat_ids[] = $cat->term_id;
        }
    }
    
    // 输出对应data属性,属性值加引号避免分类名带空格时HTML语法错误
    echo '<div data-main-category="' . implode(', ', $main_cats) . '" data-main-catid="' . implode(', ', $main_cat_ids) . '"></div>';
    echo '<div data-sub-category="' . implode(', ', $sub_cats) . '" data-sub-catid="' . implode(', ', $sub_cat_ids) . '"></div>';
}

代码说明

  • 如果你需要区分多级子分类(比如一级子分类、二级子分类),可以在子分类的判断逻辑中额外加入层级判断即可,现有逻辑默认将所有非顶级分类统一归为子分类
  • 优化了原有代码的HTML输出,给属性值添加了引号,避免分类名称包含空格时出现语法异常

内容的提问来源于stack exchange,提问作者typhoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:06:05