WordPress/WooCommerce:购物车显示0数量捆绑商品方案咨询
解决方案:WooCommerce Product Bundles 允许移除捆绑子商品
我之前在维护使用WordPress 4.9.4、WooCommerce 3.3.4和Product Bundles 5.7.7的电商站点时,碰到过一模一样的问题。下面给你两个经过验证的可行方案,你可以根据需求选择:
方案一:让购物车显示数量为0的捆绑子商品
WooCommerce默认隐藏数量≤0的购物车项,我们可以通过钩子修改这个规则,让仅捆绑子商品在数量为0时依然显示。
把以下代码添加到你的主题functions.php文件末尾,或者自定义功能插件中:
add_filter( 'woocommerce_cart_item_visible', 'show_zero_qty_bundled_items', 10, 3 ); function show_zero_qty_bundled_items( $visible, $cart_item, $cart_item_key ) { // 仅针对捆绑子商品生效 if ( isset( $cart_item['bundled_by'] ) && $cart_item['quantity'] === 0 ) { $visible = true; } return $visible; }
这段代码会检查当前购物车项是否是捆绑子商品(通过bundled_by字段判断),如果是且数量为0,就强制让它显示在购物车中。这样用户就能看到数量为0的子商品,并且可以调整数量或者保持移除状态。
方案二:给捆绑子商品添加独立移除按钮
如果你不想显示数量为0的商品,更直接的方式是给每个捆绑子商品添加一个“移除”按钮,点击后直接将该子商品的数量设为0并更新购物车。
添加以下代码到主题functions.php或自定义插件:
add_action( 'woocommerce_cart_item_actions', 'add_remove_bundled_item_button', 10, 2 ); function add_remove_bundled_item_button( $actions, $cart_item ) { // 仅针对捆绑子商品添加移除按钮 if ( isset( $cart_item['bundled_by'] ) && wc_pb_is_bundled_cart_item( $cart_item ) ) { $remove_url = wc_get_cart_remove_url( $cart_item['key'] ); // 修改按钮文本和样式,适配你的站点 $actions['remove_bundled'] = sprintf( '<a href="%s" class="remove remove-bundled-item" aria-label="%s" data-product_id="%s" data-product_sku="%s">%s</a>', esc_url( $remove_url ), esc_attr__( 'Remove this item', 'woocommerce' ), esc_attr( $cart_item['product_id'] ), esc_attr( $cart_item['data']->get_sku() ), __( 'Remove', 'woocommerce' ) ); } return $actions; }
这个代码会在每个捆绑子商品的操作栏里添加一个标准的WooCommerce移除按钮,点击后会直接把该子商品从购物车中移除(本质是将数量设为0并触发购物车更新),完美适配你设置的minimum=0的规则。
注意事项
- 操作代码前请务必备份主题文件和数据库,避免出现意外问题。
- 如果你使用的是子主题,建议将代码添加到子主题的
functions.php中,避免主题更新时代码丢失。 - 两个方案可以单独使用,也可以结合使用,根据你的用户体验需求调整。
内容的提问来源于stack exchange,提问作者Jazzy
相关产品推荐
相关产品推荐

