如何在WooCommerce购物车页按属性名展示商品规格?
WooCommerce购物车页商品名称与规格换行显示解决方案
要实现购物车页商品名称和尺码换行展示(<p>Breeze Jersey</p><p>Size: L</p>),可以通过修改woocommerce_cart_item_name过滤器的输出逻辑来实现,具体步骤如下:
1. 添加自定义过滤器函数
在主题的functions.php文件或自定义插件中添加以下代码,覆盖默认的购物车项名称输出:
add_filter( 'woocommerce_cart_item_name', 'custom_cart_item_name_with_size', 10, 3 ); function custom_cart_item_name_with_size( $default_output, $cart_item, $cart_item_key ) { $_product = $cart_item['data']; $product_link = $_product->is_visible() ? $_product->get_permalink( $cart_item ) : ''; // 构建带链接的产品名称 $product_name = ! empty( $product_link ) ? sprintf( '<a href="%s">%s</a>', esc_url( $product_link ), $_product->get_name() ) : $_product->get_name(); // 提取尺码属性 $size_html = ''; // 处理可变产品的尺码 if ( $_product->is_type( 'variation' ) ) { foreach ( $_product->get_variation_attributes() as $attr_key => $attr_value ) { $attr_label = wc_attribute_label( str_replace( 'attribute_', '', $attr_key ) ); if ( strtolower( $attr_label ) === 'size' ) { $size_html = sprintf( '<p>%s: %s</p>', $attr_label, $attr_value ); break; } } } // 处理简单产品的自定义尺码属性 else { $size_value = $_product->get_attribute( 'Size' ); if ( ! empty( $size_value ) ) { $size_html = sprintf( '<p>Size: %s</p>', $size_value ); } } // 组合最终输出结构 return wp_kses_post( sprintf( '<p>%s</p>%s', $product_name, $size_html ) ); }
2. 简化购物车模板中的调用
原来的输出代码可以简化为直接调用过滤器(无需手动拼接HTML):
echo apply_filters( 'woocommerce_cart_item_name', '', $cart_item, $cart_item_key );
或者保留默认的WooCommerce购物车项名称调用逻辑,过滤器会自动修改输出结果。
为什么wc_display_item_meta在购物车页不生效?
wc_display_item_meta()函数是专门为**订单项(WC_Order_Item对象)**设计的,它读取的是订单存储的元数据;而购物车项是WC_Cart_Item对象,数据结构和存储方式与订单项不同,因此无法直接复用该函数。我们需要从购物车关联的产品对象(WC_Product)中直接提取属性信息。
内容的提问来源于stack exchange,提问作者Ads
相关产品推荐
相关产品推荐

