php - 从购物车 woocommerce 总数中删除某个类别的产品

标签 php wordpress woocommerce cart product-quantity

我使用 wordpress 4.2.2 和 woocommerce 2.3.11 构建我的电子商务以销售 Wine 。 我创建了一个自定义函数,仅以 6 的倍数的瓶子结束订单。 在此之前我没有任何问题,但我有 2 个类别,每包 6 瓶,所以我想避免这 2 个类别计入购物车的总商品数量。 我不是 php 专家,所以我尝试创建一个函数来检查每个项目是否在类别内,如果属于一个包类别,则减去一个项目。 仅当这 2 个类别中有一件商品时才有效,但如果我在购物车中添加 2 个包裹,只会减去一个。

add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
$total_products = WC()->cart->cart_contents_count;
$multiples = 6;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
    $prodotti = $values['data'];
    $terms = get_the_terms ($prodotti->id, 'product_cat');
    foreach ($terms as $term){
        $categoria = $term->term_id;
    }   

    if (($categoria == 169) || ($categoria == 152)) {
            $pacchetti = $values ['quantity'];  
            $totale = ($total_products-$pacchetti);
    } else {
        $totale = $total_products;
    }
}
echo $totale;
if ( ( $totale % $multiples ) > 0 )
    wc_add_notice( sprintf( __('You need to buy in quantities of 6 products', 'woocommerce'), $multiples ), 'error' );

}    

所需计数:

Screen 1 - Right Counting

现有计数

Screen 2 - Wrong counting

我对每一种解决方案都持开放态度。

非常感谢!

最佳答案

我觉得你的代码很不错。我认为你缺少的一件事是 has_term()功能以更可靠地测试哪些产品属于您的两个特殊类别。

add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
    $total_products = WC()->cart->cart_contents_count;
    $multiples = 6;
    $totale = 0;
    foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $prodotti = $values['data'];

        if( ! has_term( array( 169, 152 ), 'product_cat', $prodotti->id ) ){
            $totale += $values['quantity'];
        } 

    }
    echo $totale;
    if ( ( $totale % $multiples ) > 0 ){
        wc_add_notice( sprintf( __('You need to buy in multiples of %d products', 'your-textdomain'), $multiples ), 'error' );
    }

}

关于php - 从购物车 woocommerce 总数中删除某个类别的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34766937/

相关文章:

php - 媒体查询在 WordPress 中不起作用

wordpress - 更改为 https 后无法访问仪表板(错误 400)

javascript - jQuery 对 Wordpress 内容进行动画处理

php - Woocommerce 仅在前端为登录用户提供价格折扣

php - Javascript 连续从数据库获取计数

php - Openfire 不存储离线消息

php - 计算两个小数之间的百分比增加

未读取 PHP session

php - 在 thankyou 上显示内容 - WooCommerce

PHP sprintf : combine 2 variables values (string) in %s