首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WooCommerce产品捆绑包-购物车数量

WooCommerce产品捆绑包-购物车数量
EN

Stack Overflow用户
提问于 2015-02-06 14:04:44
回答 3查看 5K关注 0票数 1

配置:

WordPress 4.1The Events Calendar PRO 3.9活动日历: WooCommerce Tickets 3.9 WooCommerce 2.2.11 WooCommerce产品捆绑包4.6.2适用于活动网站,销售以下门票:

成人$25儿童$5婴儿$0家庭$55 (包括1-2 x成人,1-3名儿童)家庭门票配置为WooCommerce捆绑产品,捆绑产品为成人和儿童。成人数量设置为2,儿童数量设置为3

将家庭捆绑产品添加到购物车时,购物车中报告的项目数量为6。这由1 x家庭父产品和2 x成人和3 x儿童产品组成。

此处的预期结果应该是购物车报告5个项目-2个成人和3个儿童。换句话说,从产品计数中忽略父产品。

我的问题是:要让WooCommerce在计算购物车中的商品数量时忽略产品包的父产品,需要做些什么?

EN

回答 3

Stack Overflow用户

发布于 2015-02-06 17:41:07

我相信,在按产品定价模式下的捆绑会自动计算捆绑的商品数量。当处于“捆绑”模式时,项目的数量被假定为等于父项目。

这个计数调整是在Bundles的cart类中实现的。因此,我认为可以通过以下方式禁用它:

代码语言:javascript
运行
复制
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' );

编辑:我已经修改了上面的代码,因为它似乎使用了一个全局变量来访问插件的主类。此外,我认为woocommerce_loaded是在主题加载之前触发的,所以这不太可能起作用。我已经改为使用init钩子。

编辑2:如果父项目设置为使用按产品发货计算,则捆绑包将跳过对该项目的计数。但如果这不适用,那么您需要禁用包过滤,并应用您自己的包:

代码语言:javascript
运行
复制
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' );
票数 3
EN

Stack Overflow用户

发布于 2015-02-09 04:00:05

在@helgatheviking的大量帮助下,我在我的functions.php中想出了以下解决方案:

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2015-05-19 04:09:47

您可以在这里编写的早期文章中使用相同的函数

代码语言:javascript
运行
复制
  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遇到了问题,不知何故,过滤器并没有应用于此,而是使用

代码语言:javascript
运行
复制
<?php 
    global $woocommerce;
    // get cart quantity
    $qty = $woocommerce->cart->get_cart_contents_count();
?>

在header.php内部,应用了过滤器,我得到了正确的计数。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28359520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档