WooCommerce产品包 - 购物车数量

时间:2015-02-06 06:04:44

标签: wordpress wordpress-plugin woocommerce

配置:

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忽略产品套装的母产品需要什么?

3 个答案:

答案 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中,应用了过滤器,我得到了正确的计数。