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:每次交易只允许来自一个标签的产品的主要内容,如果未能解决你的问题,请参考以下文章
php [WooCommerce Core]允许在术语(类别,标签)描述中使用HTML
php [WooCommerce Core]允许在术语(类别,标签)描述中使用HTML
如何在 WooCommerce 产品页面中更改 <H1> 标签