配置:
WordPress 4.1 活动日历PRO 3.9 活动日历:WooCommerce门票3.9 WooCommerce 2.2.11 WooCommerce产品包4.6.2 对于活动网站,销售以下门票:
成人25美元 孩子5美元 婴儿$ 0 家庭55美元(包括1-2 x成人,1-3个孩子) Family票证被配置为WooCommerce捆绑产品,捆绑的产品是Adult和Child。成人设置为2,Child设置为3
当家庭捆绑产品添加到购物车时,报告在购物车中的商品数量为6.这由1 x Family产品和2 x Adult和3 x Child子产品组成。
此处所需的结果应该是购物车报告5项 - 2 x成人和3 x Child。换句话说,忽略产品计数中的父产品。
我的问题:在计算购物车中的商品数量时,为了让WooCommerce忽略产品套装的母产品需要什么?
答案 0 :(得分:3)
我相信每产品定价模式下的捆绑包会自动计算捆绑商品的数量。在"捆绑"模式假设项目数等于父项。
这一计数调整是在Bundles'中实现的。购物车类...所以我认为它可以通过以下方式禁用:
function so_28359520_remove_bundles_counting(){
global $woocommerce_bundles;
remove_filter( 'woocommerce_cart_contents_count', array( $woocommerce_bundles->display, 'woo_bundles_cart_contents_count' ) );
}
add_action( 'init', 'so_28359520_remove_bundles_counting' );
编辑:我修改了上面的代码,因为Bundles似乎正在使用全局变量来访问插件的主类。 另外,我认为在加载主题之前woocommerce_loaded
会触发,因此不可能有效。我已经改为init
挂钩了。
编辑2 但是,如果这不适用,那么您需要禁用Bundles过滤并应用您自己的过滤:
function so_28359520_cart_contents_count( $count ) {
$cart = WC()->cart->get_cart();
$subtract = 0;
foreach ( $cart as $key => $value ) {
if ( isset( $value[ 'stamp' ] ) && ! isset( $value[ 'bundled_by' ] ) ) {
$subtract += $value[ 'quantity' ];
}
}
return $count - $subtract;
}
add_filter( 'woocommerce_cart_contents_count', 'so_28359520_cart_contents_count' );
答案 1 :(得分:0)
在@helgatheviking的大量帮助下,我已经能够在我的functions.php中提出以下解决方案:
function cit_update_cart_count() {
global $woocommerce;
$count = 0;
$cart = $woocommerce->cart->get_cart();
foreach ($cart as $key => $value) {
if (!isset($value['bundled_items'])) {
$count += $value['quantity'];
}
}
$woocommerce->cart->cart_contents_count = $count;
}
add_action('init','cit_update_cart_count',10);
答案 2 :(得分:-1)
您可以在此处编写的早期帖子中使用相同的功能
function so_28359520_cart_contents_count( $count ) {
$cart = WC()->cart->get_cart();
$subtract = 0;
foreach ( $cart as $key => $value ) {
if ( isset( $value[ 'stamp' ] ) && ! isset( $value[ 'bundled_by' ] ) ) {
$subtract += $value[ 'quantity' ];
}
}
return $count - $subtract;
}
但你必须在class-wc-pb-cart.php
中使用它和内部构造添加
add_filter( 'woocommerce_cart_contents_count', 'so_28359520_cart_contents_count' );
这就像魅力一样,但在我的主题中,我在header.php中遇到WC() - > cart-> cart_contents_count的问题,不知何故过滤器未应用于此,但使用
<?php
global $woocommerce;
// get cart quantity
$qty = $woocommerce->cart->get_cart_contents_count();
?>
在header.php中,应用了过滤器,我得到了正确的计数。