我找到了类似的解决方案,例如:“如何将订单限制为一个类别”。我试图修改代码,但它不够具体。
就我而言,每个供应商都由产品属性值定义,即8个条款。如果购物车包含超过3种不同条款的产品,我需要设置一条消息“抱歉,您一次只能从3个不同的供应商订购”。
我正在使用这个作为起点:
add_action( 'woocommerce_add_to_cart', 'three_vendors' );
function three_vendors() {
if ATTRIBUTE = SELECT A VENDOR; NUMBER OF TERMS > 3 {
echo "Sorry! You can only order from 3 Vendors at a time.”;
}
}
中间线是我使用非PHP语言填充空白。
我正在寻找一种方法来定义购物车中的变化量。如果无法使用属性,我可以使用类别。
有谁知道怎么做?
答案 0 :(得分:1)
更新:无法使用
woocommerce_add_to_cart_valisation
挂钩来管理变体
相反,我们可以使用隐藏在 woocommerce_add_to_cart
过滤器挂钩中的自定义功能,当购物车中有超过3个供应商(商品)时删除最后添加的购物车项目:
// Remove the cart item and display a notice when more than 3 values for "pa_vendor" attibute.
add_action( 'woocommerce_add_to_cart', 'no_more_than_three_vendors', 10, 6 );
function no_more_than_three_vendors( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ) {
// Check only when there is more than 3 cart items
if ( WC()->cart->get_cart_contents_count() < 4 ) return;
// SET BELOW your attribute slug… always begins by "pa_"
$attribute_slug = 'pa_vendor'; // (like for "Color" attribute the slug is "pa_color")
// The current product object
$product = wc_get_product( $variation_id );
// the current attribute value of the product
$curr_attr_value = $product->get_attribute( $attribute_slug );
// We store that value in an indexed array (as key /value)
$attribute_values[ $curr_attr_value ] = $curr_attr_value;
//Iterating through each cart item
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
// The attribute value for the current cart item
$attr_value = $cart_item[ 'data' ]->get_attribute( $attribute_slug );
// We store the values in an array: Each different value will be stored only one time
$attribute_values[ $attr_value ] = $attr_value;
}
// We count the "different" values stored
$count = count($attribute_values);
// if there is more than 3 different values
if( $count > 3 ){
// We remove last cart item
WC()->cart->remove_cart_item( $cart_item_key );
// We display an error message
wc_clear_notices();
wc_add_notice( __( "Sorry, you may only order from 3 different Vendors at a time. This item has been removed", "woocommerce" ), 'error' );
}
}
代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。
此代码经过测试,应该适合您。它将检查有关您的特定属性的属性值,并将删除最后添加的购物车项目超过3个属性值。
唯一令人讨厌的事情是我暂时无法删除经典添加到购物车的通知。 我会尝试寻找另一种方式......