2017-07-09 11 views
0

何らかの理由で、アルファベット順(A-B-C)の正しい順序でクーポンを適用する必要があります。ユーザーはさまざまな方法でクーポンを追加することができます(B-A-C、C-A-Bなど、さらにはC-A)。だから私は追加されたクーポンを並べ替え、正しい方法で注文に追加したいと思います。WooCommerceのアルファベット順クーポンを並べ替える

私は修正しようとしているが、運としています:

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

フックはすでにそれがループのようなものを作るよう、あなたがそれを使用することはできません、WC_Cart add_discount()方法にありますwoocommerce_applied_couponとして...

代わりにあなたが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ファイルになります。

これが機能しています。私は

+0

は、お返事ありがとうござい繰り返し通知を避けるために、最後のループでwc_clear_notices()を追加しました。あなたは正しいです - 私は既に私のサーバーを掛けました。代わりに 'woocommerce_cart_coupon'を' woocommerce_applied_coupon'を使用するとうまくいきます。ただし、バスケットをリフレッシュするだけです。ユーザーがチェックアウトを押した場合、ソートせずにチェックアウトに行きます。 – Fasolechka

+0

@Fasolechka Ajaxがカートやチェックアウトページのテストサーバーで有効になっているため、この問題はありません...私は古典的なWooCommerce Storefrontテーマをテストするために使用しています... – LoicTheAztec

関連する問題