基于产品类别的 WooCommerce 特定优惠券折扣
WooCommerce specific coupon discount based on product category
我无法使用此代码对不同类别的产品应用不同百分比的折扣
该函数有效但执行了 n 次,其中 n 取决于购物车中的产品数量
add_filter( 'woocommerce_coupon_get_discount_amount', 'alter_shop_coupon_data', 1, 5 );
function alter_shop_coupon_data( $discount, $discounting_amount, $cart_item, $single, $instance ){
$coupons = WC()->cart->get_coupons();
$cart_items = WC()->cart->get_cart();
foreach ( $coupons as $code => $coupon ) {
if ( $coupon->discount_type == 'percent' && $coupon->code == 'newsite' ) {
foreach ($cart_items as $cart_item){
$product_id = $cart_item['data']->id;
if( has_term( 'cat1', 'product_cat', $product_id ) ){
$quantity = $cart_item['quantity'];
$price = $cart_item['data']->price;
$discount_20 = 0.2 * ($quantity * $price); // 20%
}else{
$quantity = $cart_item['quantity'];
$price = $cart_item['data']->price;
$discount_10 = 0.1 * ($quantity * $price); //10%
}
}
}
}
$discounting_amount = ($discount_20 + $discount_10);
return $discounting_amount;
}
从 WooCommerce 3 开始,您的代码中有很多错误......而且 $cart_item
参数包含在函数中,因此您不需要循环遍历购物车项目。
另请注意,不需要 $coupon->is_type('percent')
(优惠券类型),因为您在代码中定位特定优惠券:$coupon->get_code() == 'newsite
.
尝试以下操作:
add_filter( 'woocommerce_coupon_get_discount_amount', 'alter_shop_coupon_data', 100, 5 );
function alter_shop_coupon_data( $discount, $discounting_amount, $cart_item, $single, $instance ){
// Loop through applied WC_Coupon objects
foreach ( WC()->cart->get_coupons() as $code => $coupon ) {
if ( $coupon->is_type('percent') && $coupon->get_code() == 'newsite' ) {
$discount = $cart_item['data']->get_price() * $cart_item['quantity'];
if( has_term( 'cat1', 'product_cat', $cart_item['product_id'] ) ){
$discount *= 0.2; // 20%
}else{
$discount *= 0.1; // 10%
}
}
}
return $discount;
}
代码进入活动子主题(或活动主题)的 functions.php 文件。它应该更好用。
我无法使用此代码对不同类别的产品应用不同百分比的折扣
该函数有效但执行了 n 次,其中 n 取决于购物车中的产品数量
add_filter( 'woocommerce_coupon_get_discount_amount', 'alter_shop_coupon_data', 1, 5 );
function alter_shop_coupon_data( $discount, $discounting_amount, $cart_item, $single, $instance ){
$coupons = WC()->cart->get_coupons();
$cart_items = WC()->cart->get_cart();
foreach ( $coupons as $code => $coupon ) {
if ( $coupon->discount_type == 'percent' && $coupon->code == 'newsite' ) {
foreach ($cart_items as $cart_item){
$product_id = $cart_item['data']->id;
if( has_term( 'cat1', 'product_cat', $product_id ) ){
$quantity = $cart_item['quantity'];
$price = $cart_item['data']->price;
$discount_20 = 0.2 * ($quantity * $price); // 20%
}else{
$quantity = $cart_item['quantity'];
$price = $cart_item['data']->price;
$discount_10 = 0.1 * ($quantity * $price); //10%
}
}
}
}
$discounting_amount = ($discount_20 + $discount_10);
return $discounting_amount;
}
从 WooCommerce 3 开始,您的代码中有很多错误......而且 $cart_item
参数包含在函数中,因此您不需要循环遍历购物车项目。
另请注意,不需要 $coupon->is_type('percent')
(优惠券类型),因为您在代码中定位特定优惠券:$coupon->get_code() == 'newsite
.
尝试以下操作:
add_filter( 'woocommerce_coupon_get_discount_amount', 'alter_shop_coupon_data', 100, 5 );
function alter_shop_coupon_data( $discount, $discounting_amount, $cart_item, $single, $instance ){
// Loop through applied WC_Coupon objects
foreach ( WC()->cart->get_coupons() as $code => $coupon ) {
if ( $coupon->is_type('percent') && $coupon->get_code() == 'newsite' ) {
$discount = $cart_item['data']->get_price() * $cart_item['quantity'];
if( has_term( 'cat1', 'product_cat', $cart_item['product_id'] ) ){
$discount *= 0.2; // 20%
}else{
$discount *= 0.1; // 10%
}
}
}
return $discount;
}
代码进入活动子主题(或活动主题)的 functions.php 文件。它应该更好用。