以下是防止购物车中有多个可下载产品的代码:

add_filter( 'woocommerce_add_to_cart_validation', 'only_one_product_type_allowed', 10, 3 );
function only_one_product_type_allowed( $passed, $product_id, $quantity ) {

  $product = wc_get_product( $product_id );
  $product_type = $product->get_type();
  $product_downloadable = $product->is_downloadable();

  foreach ( WC()->cart->get_cart() as $cart_item ) {

    if ( $product_type == $cart_item['data']->get_type() && $product_downloadable == $cart_item['data']->is_downloadable() && ! $product->is_virtual() ) {

      wc_add_notice( __( "NOTICE ON CART PAGE.", "woocommerce" ), 'error' );

      return false;
    }
  }

  return $passed;
  
}

现在,它不允许在单一购物车中下载多个产品,这是可以的.但它也不允许购物车中有多个常规商品.它也发出了同样的通知.有谁能帮我修好吗.

推荐答案

要在购物车中只允许一个可下载的产品,而允许其他产品类型,请try 使用以下选项:

add_filter( 'woocommerce_add_to_cart_validation', 'only_one_downloadable_product_allowed', 10, 4 );
function only_one_downloadable_product_allowed( $passed, $product_id, $quantity, $variation_id = null ) {
    // Get the current product object
    $product  = wc_get_product( $variation_id > 0 ? $variation_id : $product_id );

    // Initializing downloadable product count
    $count_dl = $product->is_downloadable() ? 1 : 0; 

    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $item ) {
        // Check for downloadable products in cart
        if ( $item['data']->is_downloadable() ) {
            $count_dl++;
        }
    }

    if ( $count_dl > 1 ) {
        wc_add_notice( __( "Only one downloadable product is allowed at the time.", "woocommerce" ), 'error' );
        $passed = false;
    }
    return $passed;
}

代码位于您的子主题的unctions.php文件中(或在插件中).应该能行得通.

Php相关问答推荐

PHP在将数组子集赋给变量时是否复制数组子集?

输入手写CSV时在PHP中进行日期判断

msgraph-sdk-php v2如何传递skiptoken到request?

Laravel;Composer安装突然返回选项快捷方式不能为空.

如何显示每个分类的当前术语的帖子中包含的前20个标签,不包括标签分类

PHP测试字符串的所有POST值

使用PHP编码的字符串与使用OpenSSL编写的shell 代码之间的差异

这是在可召回的背景下吗?

WooCommerce中基于用户角色的不同产品差价

Laravel Carbon DiffForHumans选项(年,月,天)

如何在laravel中添加延迟?

向WooCommerce管理订单总额添加自定义总额行

更改WooCommerce checkout 中的错误消息以获得不可用的送货方式

如何处理 Null 上的 array_shift() ?

当所有对象都属于同一类型时,我可以省略 PHP in_array() 中的 strict 参数吗?

PHP使用三元运算符进行null合并(再次)

PHP / DOM : 解析 HTML 以提取基于类的数​​据

如何在光速网络服务器中使用 apache ..htaccess

根据数组中的文本文件编号显示星级

为什么 PDO 允许使用带命名占位符的索引数组,但仅在禁用仿真时才允许?