由于物流原因(多个仓库),我使用下面的代码片段来限制每个订单只能购买一个唯一的WooCommerce产品.我使用一个属性来指定仓库,如果仓库/属性相同,则允许客户订购多个产品会很方便.有人能帮我修改一下代码片段吗?

add_filter( 'woocommerce_add_to_cart_validation', 'wc_limit_one_per_order', 10, 2 );
function wc_limit_one_per_order( $passed_validation, $product_id ) {
    
    if ( WC()->cart->get_cart_contents_count() >= 1 ) {
        wc_add_notice( __( 'This product cannot be purchased with other products. Please, empty your cart first and then add it again.', 'woocommerce' ), 'error' );
        return false;
    }

    return $passed_validation;
}

我想增加这样的东西,但我不知道该怎么做.

$attribute = $product->get_attribute('pa_warehouse');
foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
$product = $values['data'];

推荐答案

try 以下修订后的代码:

add_filter( 'woocommerce_add_to_cart_validation', 'filter_add_to_cart_validation', 10, 4 );
function filter_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id = null ) {
    $product    = wc_get_product( $product_id );
    $warehouse  = $product->get_attribute('pa_warehouse');
    $cart_items = WC()->cart->get_cart();

    if ( WC()->cart->is_empty() ) {
        return $passed;
    }
    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $values ) {
        // Check if the warehouse is different
        if ( $warehouse !== $values['data']->get_attribute('pa_warehouse') ) {
            wc_add_notice( __( 'This product cannot be purchased because...', 'woocommerce' ), 'error' );
            return false;
        }
    }
    return $passed;
}

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

Php相关问答推荐

PHP -使用preg_match在字符串中进行匹配

如果活动订阅者的购物车中有订阅项目,则在WooCommerce签出中显示通知

在WooCommerce管理订单列表中显示项目总权重

如何删除WordPress用户的个人资料描述或其他个人资料字段中的链接?

闭包绑定$This和垃圾收集器

将日期数组排序为年->;月

如何在laravel中使用script type= text/html/script

如何在laravel中添加延迟?

从WooCommerce订单项目获取Dokan卖家详细信息

在具有Angular 的 Laravel 应用程序中,不显示图像

如何在 Laravel 中app文件夹之外的文件夹内创建文件路径?

Laravel Eloquent(where 子句)

在 groupBy laravel 5.7 中 Select 多列

使用其ID查询和捕获与订单相关的其他详细信息的shopware 6方法

php preg_match 验证 Tiktok 用户名

同时执行odbc_execute、odbc_fetch_row和odbc_result

Laravel 测试 assertJsonMissing 不适用于唯一的键.为什么?

PHP Loop 在迭代中使用修改后的数据

如何为多个表的id列设置不同的值

如何在php中获取大于50的年龄