在WooCommerce中按字母顺序排列应用优惠券

时间:2017-07-09 02:05:51

标签: php wordpress woocommerce cart coupon

出于某些原因,我需要以正确的顺序将优惠券应用于订单 - 字母(A-B-C)。用户可以通过各种方式添加优惠券(B-A-C,C-A-B等甚至是C-A)。所以我想对添加的优惠券进行排序,并以正确的方式将这些添加到订单中。

我正在努力修复但没有运气:

add_action( 'woocommerce_applied_coupon', 'sort_coupon' );
if (!function_exists('sort_coupon') ) {

    function sort_coupon() {
        global $woocommerce;
        $cart_coupons = WC()->cart->get_applied_coupons();
        sort($cart_coupons);
        WC()->cart->remove_coupons();
        foreach ( $cart_coupons as $code ) {
            WC()->cart->add_discount( $code );
        }
        WC()->cart->calculate_totals();
    }
}

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

由于 woocommerce_applied_coupon 挂钩已经位于 WC_Cart add_discount() 方法中,因此您无法使用它,因为它是一种环...

相反,您应该以这种方式在 woocommerce_cart_coupon 操作挂钩中加入您的函数:

add_action( 'woocommerce_cart_coupon', 'custom_sort_coupons' );
function custom_sort_coupons() {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $applied_coupons = WC()->cart->get_applied_coupons();
    WC()->cart->remove_coupons();

    sort($applied_coupons);

    foreach ( $applied_coupons as $coupon_code ) {
        WC()->cart->add_discount( $coupon_code );
        wc_clear_notices(); // Avoid repetitive notices
    }
    WC()->cart->calculate_totals();
}

代码可以在您的活动子主题(或主题)的任何php文件中,也可以在任何插件的php文件中。

  

现在这个有用了。我在最后一个循环中添加了 wc_clear_notices() 以避免重复性通知