【问题标题】:Woocommerce: only allow products from one tag per transactionWoocommerce:每次交易只允许来自一个标签的产品
【发布时间】:2015-09-02 09:03:17
【问题描述】:

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

  1. 检查购物车中的产品并获取它们的标签。
  2. 如果购物车是空的,或者产品标签匹配,允许正常添加到购物车。
  3. 如果产品的标签与购物车内容的标签不同,请禁用添加到购物车按钮。
  4. 步骤 1-3 每次交易只能执行一次。

我知道我可以用if ( has_term( 'tag', 'product_tag') )查看标签,

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

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

如果我能得到一个正确方向的指针,我将不胜感激。

【问题讨论】:

    标签: wordpress woocommerce


    【解决方案1】:

    一种可能的解决方案 - 在 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 语句添加到添加到购物车按钮的位置。

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2017-09-27
      • 2019-09-13
      • 2019-05-01
      • 2022-07-11
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2015-10-07
      相关资源
      最近更新 更多