如何在WooCommerce订单详情、WordPress后台及邮件通知中显示产品分类名称
嘿,我来帮你搞定在WooCommerce里显示产品分类的需求!下面分三个场景给你具体的实现代码,直接加到主题的functions.php文件,或者用代码片段插件添加就行,这样不会影响主题更新~
1. 在WordPress后台订单详情页显示产品分类
这段代码会在后台订单的每个订单项下方,追加显示对应的产品分类名称,多个分类会用逗号分隔:
add_action( 'woocommerce_admin_order_item_values', 'display_product_category_in_admin_order_items', 10, 3 ); function display_product_category_in_admin_order_items( $product, $item, $item_id ) { // 获取当前商品的分类信息 $categories = get_the_terms( $product->get_id(), 'product_cat' ); if ( $categories && ! is_wp_error( $categories ) ) { $category_names = array(); foreach ( $categories as $category ) { $category_names[] = $category->name; } // 在订单项详情区域输出分类 echo '<br><strong>产品分类:</strong> ' . implode( ', ', $category_names ); } }
2. 在前台用户订单详情页显示产品分类
当用户在前台查看自己的订单时,每个商品下方也会显示分类,同时适配了纯文本视图的场景:
add_action( 'woocommerce_order_item_meta_end', 'display_product_category_in_frontend_order_items', 10, 4 ); function display_product_category_in_frontend_order_items( $item_id, $item, $order, $plain_text ) { $product = $item->get_product(); if ( ! $product ) return; // 获取商品分类 $categories = get_the_terms( $product->get_id(), 'product_cat' ); if ( $categories && ! is_wp_error( $categories ) ) { $category_names = array(); foreach ( $categories as $category ) { $category_names[] = $category->name; } // 根据视图类型调整显示格式 if ( $plain_text ) { echo ' | 产品分类: ' . implode( ', ', $category_names ); } else { echo '<br><span class="product-category"><strong>产品分类:</strong> ' . implode( ', ', $category_names ) . '</span>'; } } }
你还可以通过.product-category这个CSS类,自定义前台分类文字的样式,比如调整颜色或字号。
3. 在WooCommerce邮件通知中显示产品分类
不管是新订单通知、客户订单确认邮件,所有邮件里的订单项都会加上分类信息,同时兼容纯文本和HTML格式的邮件:
add_action( 'woocommerce_email_order_item_meta', 'display_product_category_in_email_notifications', 10, 4 ); function display_product_category_in_email_notifications( $item_id, $item, $order, $plain_text ) { $product = $item->get_product(); if ( ! $product ) return; $categories = get_the_terms( $product->get_id(), 'product_cat' ); if ( $categories && ! is_wp_error( $categories ) ) { $category_names = array(); foreach ( $categories as $category ) { $category_names[] = $category->name; } // 适配邮件的不同格式 if ( $plain_text ) { echo PHP_EOL . '产品分类: ' . implode( ', ', $category_names ); } else { echo '<br><strong>产品分类:</strong> ' . implode( ', ', $category_names ); } } }
如果你的站点用了自定义主题或第三方订单插件,可能需要调整代码里的优先级数值(比如把10改成20),确保代码能正常生效~
内容的提问来源于stack exchange,提问作者g3ar
相关产品推荐
相关产品推荐

