1

こんにちは、カートの合計金額が 25 ユーロ以上の場合に 20% のクーポン割引を自動的に適用したいと考えています。前のユーザーのコードを見て、それを変更して functions.php に配置しようとしました。しかし、それは私にとってはうまくいきません - 私が間違っていることについての助けはありますか? functions.php に配置したコードは次のとおりです。

/* Mod: 20% Discount for orders over €25 
Works with code added to child theme: woocommerce/cart/cart.php lines 13 - 14: which gets $subtotal of cart:
        global $subtotal;
        $subtotal= $woocommerce->cart->subtotal;
*/
add_action('woocommerce_before_cart_table', 'discount_when_order_greater_25');
function discount_when_order_greater_25( ) {
    global $woocommerce;
    global $subtotal;
    if( $subtotal >= 25 ) {
        $coupon_code = '20';
        if (!$woocommerce->cart->add_discount( sanitize_text_field( $coupon_code ))) {
            $woocommerce->show_messages();
        }
        echo '<div class="woocommerce_message"><strong>Your order is over €25 so a 20% Discount has been Applied!</strong> Your total order weight is <strong>' . $total_weight . '</strong> lbs.</div>';
    }
}

/* Mod: 20% Discount for orders under €25  */
add_action('woocommerce_before_cart_table', 'remove_discount_when_order_less_25');
function remove_discount_when_order_less_25( ) {
    global $woocommerce;
    global $subtotal;
    if( $subtotal < 25 ) {
        $coupon_code = '20';
        $woocommerce->cart->get_applied_coupons();
        if (!$woocommerce->cart->remove_coupons( sanitize_text_field( $coupon_code ))) {
            $woocommerce->show_messages();
        }
        $woocommerce->cart->calculate_totals();
    }
}
4

1 に答える 1

0

これを行うことを目的とした無料の WooCommerce プラグインで問題が発生しています (woo コマース カートにクーポン コードを自動的に適用します)。第 2 に、Google で簡単に見つけたフォーラムの投稿は不完全であり、未処理の例外をスローしていました。

2020 年 11 月 3 日時点で動作するコード例を次に示します。これを、Wordpress の子テーマのフォルダー functions.php ファイルに入れることができます。

add_action('woocommerce_before_cart', 'auto_apply_discount_coupon');
function auto_apply_discount_coupon() {
    $wc_coupon = new WC_Coupon('DEMO-90JOURS'); // get intance of wc_coupon which code is "DEMO-90JOURS"
    if (!$wc_coupon || !$wc_coupon->is_valid()) {
        return;
    }

    $coupon_code = $wc_coupon->get_code();
    if (!$coupon_code) {
        return;
    }

    global $woocommerce;
    if (!$woocommerce->cart->has_discount($coupon_code)) {
        // You can call apply_coupon() without checking if the coupon already has been applied,
        // because the function apply_coupon() will itself make sure to not re-add it if it was applied before.
        // However this if-check prevents the customer getting a error message saying
        // “The coupon has already been applied” every time the cart is updated.
        if (!$woocommerce->cart->apply_coupon($coupon_code)) {
            $woocommerce->wc_print_notices();
            return;
        }

        wc_print_notice('<div class="woocommerce_message"><strong>Le coupon ' . $coupon_code . ' a été appliqué avec succès!</strong></div>', 'notice');
    }
}
于 2020-11-03T14:03:33.093 に答える