Woocommerce 优惠券四舍五入问题

Woocommerce coupon rounding issue

在我们的商店中,我们输入含税价格。在前端,我们隐藏小数(在瑞典,我们实际上不再在价格中使用小数),但在后端,我们保留小数。这就是为什么:https://krokedil.com/dont-display-prices-with-0-decimals-in-woocommerce/

我们使用上面 link 的函数在前端隐藏小数点,并且还在前端添加了一个函数来舍入优惠券。

/**
 * Trim zeros in price decimals
 **/
 add_filter( 'woocommerce_price_trim_zeros', '__return_true' );
function iconic_was_loop_position( $position ) {
    return 'woocommerce_after_shop_loop_item_title';
}

add_filter( 'iconic_was_loop_position', 'iconic_was_loop_position', 10, 1 );

/**
* Round off decimals for coupons
**/
function filter_woocommerce_coupon_get_discount_amount( $discount, 
$discounting_amount, $cart_item, $single, $instance ) { 
    $discount = ceil( $discount );
    return $discount; 
}   
add_filter( 'woocommerce_coupon_get_discount_amount', 
'filter_woocommerce_coupon_get_discount_amount', 10, 5 );

这适用于价格和百分比 coupons/discounts。 但是,假设我有一张固定购物车金额为 SEK400 的优惠券,当使用它时金额改为 SEK402。 我想这与 woo 如何应用与舍入过滤器相结合的优惠券有关。

所以我的问题是,是否可以通过某种方式从舍入函数中排除固定购物车优惠券?

这可以使用 WC_Coupon conditional method is_type() 轻松完成。在你的钩子函数 filter_woocommerce_coupon_get_discount_amount() 中,你将使用最后一个参数 $instance 即 if 语句中的 WC_Coupon 对象,这样:

add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_woocommerce_coupon_get_discount_amount', 10, 5 );
function filter_woocommerce_coupon_get_discount_amount( $discount, $discounting_amount, $cart_item, $single, $instance ) {
    // Round the discount for all other coupon types than 'fixed_cart'
    if( ! $instance->is_type('fixed_cart') )
        $discount = ceil( $discount );

    return $discount; 
}   

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

这应该有效……