![](/img/trans.png)
[英]Only allow add to cart from products of the same parent category in WooCommerce
[英]Plugin: Woocommerce > How to allow add to cart products from author
背景:我致力于基于 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";}
}
我想要的场景:客户将一个供应商的产品添加到购物车,然后他选择了另一个供应商,然后再次将另一个供应商的产品添加到购物车中。 当他添加来自第二个供应商的产品时,我希望他的购物车自动从第一个供应商的产品中清除
问题:如何实现上述场景?
我自己想出来的。 下面是代码
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; }}
该代码对我不起作用,不要让我将任何项目添加到我的购物车,当我添加到购物车时,购物车回到 0 个项目。 我在这个网站上发现了你的代码的修改: https : //www.wcvendors.com/help/topic/restrict-clientbuyer-to-order-from-one-vendor-at-a-time/
它非常适合我的 Dokan 多供应商项目。 他们还向用户添加了一条消息。
我将把代码放在下面(修改),我使用代码 snipet 插件来添加功能:
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 );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.