插件:Woocommerce>如何允许添加到作者的购物车产品

时间:2015-03-17 06:19:52

标签: php wordpress wordpress-plugin woocommerce

背景 我致力于基于woocommerce插件创建市场。因此,由于每个卖家都有不同的条件,如运费,最低金额等,我想允许客户每个订单只从一个供应商添加到购物车。

到目前为止采取的行动: 我可以将购物车商品供应商与当前供应商进应该注意的是,如果启用了W3 Total Cache

,则下面的代码无法正常工作
function check_cart_by_vendor() {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
$_product = array();
foreach($items as $item => $values) { 
$_product[] = $values['data']->post; 
}
if(isset($_product[0]->ID)){
$product_in_cart_vendor_id = get_post_field( 'post_author', $_product[0]->ID );
global $post;
$vendor_id = get_the_author_meta('ID');
if ($vendor_id == $product_in_cart_vendor_id){echo "same vendor";}else{echo "another vendor";}
}else{echo "same vendor";}
}

我想要的场景: 客户从一个供应商添加到购物车产品然后他选择另一个供应商并再次添加到另一个供应商的购物车产品。当他从第二家供应商处添加产品时,我希望他的购物车能够从第一家供应商的产品中自动清除

问题:如何实现上述情景?

2 个答案:

答案 0 :(得分:1)

我自己想通了。以下是代码

function woo_custom_add_to_cart( $cart_item_data ) {
global $woocommerce;
$items = $woocommerce->cart->get_cart(); //getting cart items
$_product = array();
foreach($items as $item => $values) { 
$_product[] = $values['data']->post; 
}
if(isset($_product[0]->ID)){ //getting first item from cart 
$prodId = (int)$_POST["add-to-cart"];
$product_in_cart_vendor_id = get_post_field( 'post_author', $_product[0]->ID);
$product_added_vendor_id = get_post_field( 'post_author', $prodId );
if( $product_in_cart_vendor_id !== $product_added_vendor_id ){$woocommerce->cart->empty_cart();}
return $cart_item_data; }} 

答案 1 :(得分:0)

该代码对我不起作用,不要让我将任何商品添加到购物车,当我将其添加到购物车时,购物车返回0件商品。 我在以下站点上找到了您的代码的修改:https://www.wcvendors.com/help/topic/restrict-clientbuyer-to-order-from-one-vendor-at-a-time/

它在我的Dokan多供应商项目上运行完美。他们还会向用户添加一条消息。

我将代码放在下面(已修改),我使用代码snnipet插件添加该功能:

add_filter( 'woocommerce_add_cart_item_data', 'woo_custom_add_to_cart' );
function woo_custom_add_to_cart( $cart_item_data ) {
    global $woocommerce;
    $items = $woocommerce->cart->get_cart(); //getting cart items
    $_product = array();
    foreach($items as $item => $values) {
    $_product[] = $values['data']->post;
    }
    if(isset($_product[0]->ID)){ //getting first item from cart
    $product_in_cart_vendor_id = get_post_field( 'post_author', $_product[0]->ID);
    $prodId = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_GET['add-to-cart'] );
    $product_added_vendor_id = get_post_field( 'post_author', $prodId );

    if( $product_in_cart_vendor_id !== $product_added_vendor_id ){$woocommerce->cart->empty_cart();wc_add_notice(  __("Recuerda comprar todo de la misma sucursal, no puedes agregar productos de otras ciudades", "wcvendors"));}
    return $cart_item_data; } 
}