插件:Woocommerce > 如何允许作者将产品添加到购物车
Posted
技术标签:
【中文标题】插件:Woocommerce > 如何允许作者将产品添加到购物车【英文标题】:Plugin: Woocommerce > How to allow add to cart products from author 【发布时间】:2015-05-19 11:52:11 【问题描述】:背景: 我致力于创建基于 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";elseecho "another vendor";
elseecho "same vendor";
我想要的场景: 客户从一个供应商添加到购物车产品,然后他选择另一个供应商并再次从另一个供应商添加到购物车产品。当他从第二个供应商添加产品时,我希望他的购物车自动从第一个供应商的产品中清除
问题:以上场景如何实现?
【问题讨论】:
【参考方案1】:代码对我不起作用,不要让我将任何商品添加到购物车,当我将添加到购物车时,购物车会返回 0 件商品。 我在这个网站上找到了你的代码修改:https://www.wcvendors.com/help/topic/restrict-clientbuyer-to-order-from-one-vendor-at-a-time/
它非常适合我的 Dokan 多供应商项目。他们还会向用户添加一条消息。
我将代码放在下面(修改),我使用一个代码 snnipet 插件来添加功能:
add_action( 'woocommerce_add_to_cart_validation', function( $is_allow, $product_id, $quantity )
$product = get_post( $product_id );
$product_author = $product->post_author;
//Iterating through each cart item
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item )
$cart_product_id = $cart_item['product_id'];
$cart_product = get_post( $cart_product_id );
$cart_product_author = $cart_product->post_author;
if( $cart_product_author != $product_author )
$is_allow = false;
break;
if( !$is_allow )
// We display an error message
wc_clear_notices();
wc_add_notice( __( "No puedes comprar productos en diferentes sucursales. Revisa en que tienda te encuentras para seguir comprando.", "wcfm-ecogear" ), 'error' );
return $is_allow;
, 50, 3);
【讨论】:
【参考方案2】:我自己想出来的。下面是代码
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;
【讨论】:
以上是关于插件:Woocommerce > 如何允许作者将产品添加到购物车的主要内容,如果未能解决你的问题,请参考以下文章
如何将自定义挂钩添加到 Woocommerce 的自定义插件