出于某些原因,我需要以正确的顺序将优惠券应用于订单 - 字母(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();
}
}
我怎样才能让它发挥作用?
答案 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()
以避免重复性通知