Php 优惠券,根据Woocommerce中的产品类别提供2种不同百分比的折扣
我正在寻找一个商业挂钩,将有助于改变折扣率的基础上2个不同的产品类别的限制,当一个特定的优惠券应用 例如,如果客户添加特定优惠券,我希望:Php 优惠券,根据Woocommerce中的产品类别提供2种不同百分比的折扣,php,wordpress,woocommerce,custom-taxonomy,coupon,Php,Wordpress,Woocommerce,Custom Taxonomy,Coupon,我正在寻找一个商业挂钩,将有助于改变折扣率的基础上2个不同的产品类别的限制,当一个特定的优惠券应用 例如,如果客户添加特定优惠券,我希望: 如果购物车项目来自产品类别a,则该项目将提供10%的折扣 如果是B类产品,该商品将有20%的折扣 更新购物车总价格 是否有任何可用的钩子来实现这一点?有可用的行动钩或过滤器钩吗 这是我目前的代码: add_filter( 'woocommerce_get_discounted_price', 'apply_coupon', 10); function app
add_filter( 'woocommerce_get_discounted_price', 'apply_coupon', 10);
function apply_coupon($price) {
global $woocommerce;
$product=$woocommerce->cart->product;
if(has_term( 'duplex-blinds', 'A' ,$product->id)){
get_product_cart_price;
10% DISCOUNT
}
if(has_term( 'duplex-blinds', 'A' ,$product->id)){
20% DISCOUNT
}
upadte total_discunt_incart($new_discount);
upadte new_price_in_cart($new_price);
upadte new_price_in_checkout($new_price);
return $price;
}
重要的是我需要修改购物车总价格、结帐总价格、总折扣价格和需要发送到贝宝的折扣价格
我的商店有很多钩子,这就是为什么woo commerce默认优惠券计算出错的原因。我注意到,购物车页面中的折扣价格是基于定制产品的价值而来的,但它不会从原始购物车金额中更新,因此总价格保持不变
但在结账页面,折扣价格是基于产品原价而非产品定制价计算的,因此折扣是错误的,而且它也不是从总价中最小化的 以下是一种完全不同的方法来实现这一点……此回答代码将启用一个优惠券代码,该代码基于两种特定的产品类别具有两种不同的折扣百分比 比如说,您的相关产品类别是:
- 对于10%的优惠券折扣,产品类别slug将为
“连帽衫”
- 对于20%的优惠券折扣,产品类别slug将为
't-SHERTS'
- 折扣类型:
百分比
- 金额:
10
- 限制>产品类别(显示名称):“连帽衫”和“T恤”
- 如果需要,您可以使用其他设置
- 优惠券代码:将优惠券代码设置为小写
产品类别slug(折扣20%)'t-shirts'
下面是代码(您将在其中添加设置): 代码进入活动子主题(或活动主题)的function.php文件。测试和工作
下面是一个演示的实际工作示例(带有屏幕截图):
- 第一个购物车项目(来自“连帽衫”产品类别)获得10%的折扣
$40 x 10%=$4
- 第二个购物车项目(来自“t恤衫”产品类别)可获得20%的折扣
$30 x 20%=$6
因此,总折扣是
$4+$6=$10
…这很有效 I使用此代码,但它在20%类别中给出100%,但是如果将0.2更改为0.02,则您提供的代码确实有效
$second\u百分比=0.2;//20%
也要改变:
$second\u百分比=0.02;//20%
或:
$second\u百分比=0.015;//15%
如果您需要15%的折扣我可以建议您修改吗<代码>$折扣=(浮动)$优惠券->获取金额()*(2*$折扣金额/100)代码>是一种非常奇怪的编写方式。只需编写
$discount=$discounting\u amount*0.2
,它将使折扣更为明显20%。。在这里,你基本上是将产品价值乘以2,得到20%的回扣,这在我看来有点复杂。干杯,谢谢你的解决方案@Florianseginger之所以这样写,是因为这个社区有初学者……所以你当然可以使用$折扣=(浮动)$coupon->get_amount()*$折扣_amount*0.2
,因为你还需要$coupon->get_amount()
add_filter( 'woocommerce_coupon_get_discount_amount', 'alter_shop_coupon_data', 20, 5 );
function alter_shop_coupon_data( $round, $discounting_amount, $cart_item, $single, $coupon ){
## ---- Your settings ---- ##
// Related coupons codes to be defined in this array (you can set many)
$coupon_codes = array('10percent');
// Product categories at 20% (IDs, Slugs or Names) for 20% of discount
$product_category20 = array('hoodies'); // for 20% discount
$second_percentage = 0.2; // 20 %
## ---- The code: Changing the percentage to 20% for specific a product category ---- ##
if ( $coupon->is_type('percent') && in_array( $coupon->get_code(), $coupon_codes ) ) {
if( has_term( $product_category20, 'product_cat', $cart_item['product_id'] ) ){
$original_coupon_amount = (float) $coupon->get_amount();
$discount = $original_coupon_amount * $second_percentage * $discounting_amount;
$round = round( min( $discount, $discounting_amount ), wc_get_rounding_precision() );
}
}
return $round;
}