当前位置: 首页 > 知识库问答 >
问题:

从总计数中删除类别的产品

侯沈义
2023-03-14

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

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' );

}    

所需计数:

现有计数

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

非常感谢!

共有1个答案

索嘉石
2023-03-14

你的代码在我看来很不错。我认为你缺少的一件事是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' );
    }

}
 类似资料:
  • 我有以下代码,用于从WooCommerce产品类别小部件中删除除管理员和批发客户(自定义用户级别)之外的所有用户的“批发类别”(通过slug)。 这非常好,但是它只删除了父类别,留下了所有的子类别。我如何也删除“批发类别”的子类别? 谢啦

  • 在woocommerce中,我有两种发货方式,统一费率标准(方法1)和统一费率特快专递(方法2)。两个产品类别,X和Z,只能使用方法1,所以如果购物车包含任何来自类别X或Z的物品,我想在结帐时从发货选项中隐藏方法2。 我搜索了Stackoverflow,发现这篇文章隐藏了Woocommerce中特定产品的特定运输方法,并试图应用答案,但没有成功。我相信下面的代码是合适的。 运输方式2的id为5,产

  • 我有两个表格;类别和产品。对于每个类别,我想计算其所有子类别中有多少产品。我已经计算了每个类别中有多少。示例表是: 类别: 产品: 所以我想让我的函数: 它只需要作为选择查询,无需更新数据库。 有什么想法吗? 编辑:SQL小提琴:http://sqlfiddle.com/#!2/1941a/4/0

  • 我在购物车和结账页面中显示Woocommerce产品类别。然而,我试图让它只显示文本,并防止它被“点击”-即删除链接。 我试过用浏览器工具检查,用CSS删除,但没有成功。-感谢您的帮助! 以下是用于在签出页面中显示类别的代码:

  • 灵感来自于获取与子类别的WooCommerce类别,我正在创建一个下拉部分,我想知道是否有任何方法从父类别中删除永久链接,如果它有一个子类别。 下面是我的代码示例: 只有在没有子术语的情况下,如何显示顶级产品类别术语的链接?

  • 说明 用于删除菜类,注意:菜类下有菜品时不能删除菜类 请求地址 http://api.dc78.cn/Api/do_del_cate 请求方式 GET 请求参数 id=菜品类别id 返回 {"status":1,"info":"删除成功"} 请求方式 INI 请求参数 [action] 描述 action action=do_del_cate [get] 描述 id 菜品类别id 返回 [resu