Woocommerce:每次交易只允许一个标签的产品

时间:2015-09-02 09:03:17

标签: wordpress woocommerce

我有一个WooCommerce网站,其中包含响应式超市在线主题 - 安装了Oswad。每个产品都有4个标签中的一个,对应不同的供应商。添加到购物车时我需要做什么:

  1. 检查购物车中的产品并获取其标签。
  2. 如果购物车为空,或者商品标签匹配,则允许按正常情况添加到购物车。
  3. 如果产品的标签与购物车内容的标签不同,请禁用“添加到购物车”按钮。
  4. 每个交易只应执行一次步骤1-3。
  5. 我知道我可以使用if ( has_term( 'tag', 'product_tag') )

    检查标记

    在add-to-cart.php中,$product->isPurchasable()将切换按钮的可见性。

    我的绊脚石是找出如何将所有这些放在一起以满足要求。我试图寻找如何按类别限制购物车项目,但想出了死胡同。我寻找插件,但那些仅限制每个订单的最小/最大产品,而不是检查项目的类别/标签。我甚至试图看钩,但最终变得更加困惑。

    如果我能指向正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案 - 在add-to-cart.php:

global $woocommerce, $product;
$terms = wp_get_post_terms($product->id, 'product_tag');

$items = $woocommerce->cart->get_cart();

foreach($items as $item => $values){
    $_product = $values["data"];
    $_terms = wp_get_post_terms($_product->id, 'product_tag');
    //echo "product slug: " . $terms[0]->slug;
    //echo "cart slug: " . $_terms[0]->slug;
    if ($terms[0]->slug !== $_terms[0]->slug){
        //echo "NO MATCH";
        $match = false;
    }
}

然后添加一个控制“添加到购物车”按钮的if ($match)语句:apply_filters('woocommerce_loop_add_to_cart_link', ...

此外,将代码添加到woocommerce / single-product / add-to-cart / simple.php并将if语句添加到“添加到购物车”按钮的位置。