插件: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 - 覆盖运费

不允许客户在 WooCommerce 结帐中更改国家/地区

如何覆盖核心 Woocommerce 插件功能?

如何将自定义挂钩添加到 Woocommerce 的自定义插件

Wordpress登录页面重定向到普通用户的Woocommerce我的帐户页面

WooCommerce 插件模板覆盖