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

Posted

技术标签:

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

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

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

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

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

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

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

【问题讨论】:

【参考方案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 语句添加到添加到购物车按钮的位置。

【讨论】:

以上是关于Woocommerce:每次交易只允许来自一个标签的产品的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce 订阅 - PayPal 参考交易

php [WooCommerce Core]允许在术语(类别,标签)描述中使用HTML

php [WooCommerce Core]允许在术语(类别,标签)描述中使用HTML

如何在 WooCommerce 产品页面中更改 <H1> 标签

使用简码显示为产品设置的 WooCommerce 产品标签名称

允许在 Woocommerce 中继续结帐非混合定义的产品类别