由于物流原因(多个仓库),我使用下面的代码片段来限制每个订单购买一种独特的 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'];
尝试以下修改后的代码:
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;
}
代码位于子主题的functions.php 文件中(或插件中)。应该可以。