如何在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
相关产品推荐
相关产品推荐

