Riode主题Woocommerce迷你购物车图标旁商品总数统计异常修正问询
WooCommerce Riode主题迷你购物车计数调整方案
你当前的问题是按重量计价的商品把重量数值存在了购物车quantity字段,原有代码直接累加quantity值导致计数错误,按以下步骤修改即可实现你要的计数逻辑:
1. 先给两类商品做区分标记(二选一即可)
- 方案1(自定义字段,推荐):后台编辑所有按重量计价的商品,添加自定义字段,键名填
_is_weight_priced,值填yes - 方案2(商品分类):把所有按重量计价的商品归属到同一个商品分类,比如分类别名设置为
weight-goods
2. 替换原有代码
如果你用自定义字段区分商品,使用以下代码:
<?php add_filter( 'woocommerce_add_to_cart_fragments', 'add_to_cart_fragment',10,1); function add_to_cart_fragment($fragments){ ob_start(); $items_count=0; foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $product = $cart_item['data']; $product_id = $cart_item['product_id']; $quantity = $cart_item['quantity']; // 判断是否为重量计价商品 $is_weight_priced = $product->get_meta('_is_weight_priced') === 'yes'; if($is_weight_priced){ // 重量计价商品每个购物车条目计1个 $items_count+=1; }else{ // 普通计件商品累加购买数量 $items_count+=$quantity; } } ?> <a class="cart-toggle" href="<?php echo wc_get_cart_url(); ?>"><i class="d-icon-bag"> <span class="cart-count" style="opacity: 1;"><?php echo $items_count; ?> </span></i> </a> <?php $fragments['a.cart-toggle'] = ob_get_clean(); return $fragments; }
如果你用商品分类区分商品,仅需要修改判断条件部分即可:
把上面代码中的判断条件替换为:
$is_weight_priced = has_term( 'weight-goods', 'product_cat', $product_id );
补充说明
如果需要全局同步修改所有WooCommerce场景下的购物车计数(包括购物车页、结账页等),可以额外添加以下过滤器:
add_filter( 'woocommerce_cart_contents_count', 'custom_cart_count_calculate', 10, 1 ); function custom_cart_count_calculate( $count ) { $items_count = 0; foreach ( WC()->cart->get_cart() as $cart_item ) { $product = $cart_item['data']; $product_id = $cart_item['product_id']; $quantity = $cart_item['quantity']; $is_weight_priced = $product->get_meta('_is_weight_priced') === 'yes'; $items_count += $is_weight_priced ? 1 : $quantity; } return $items_count; }
内容的提问来源于stack exchange,提问作者ash250113
相关产品推荐
相关产品推荐

