阻止客户从Woocommerce中的3家以上供应商订购

时间:2017-08-09 15:26:53

标签: php wordpress cart product hook-woocommerce

我找到了类似的解决方案,例如:“如何将订单限制为一个类别”。我试图修改代码,但它不够具体。

就我而言,每个供应商都由产品属性值定义,即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语言填充空白。

我正在寻找一种方法来定义购物车中的变化量。如果无法使用属性,我可以使用类别。

有谁知道怎么做?

1 个答案:

答案 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个属性值。

  

唯一令人讨厌的事情是我暂时无法删除经典添加到购物车的通知。 我会尝试寻找另一种方式......