Wenden Sie einen Gutschein programmgesteuert in Woocommerce an

In Woocommerce versuche ich eine Möglichkeit zu finden, einen Rabatt von 10% auf die gesamte Bestellung eines Kunden zu gewähren, wenn das Gewicht im Warenkorb mehr als 100 Pfund beträgt. Ich bin auf dem Weg dorthin. Im nächsten Schritt suche ich nach einer Möglichkeit, einen Gutscheincode programmgesteuert über action / hook über functions.php anzuwenden.

Es scheint, dass ich die Funktion woocommerce_ajax_apply_coupon verwenden kann, um dies zu tun (http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html ), aber ich bin mir nicht sicher, wie ich es verwenden soll.

Bisher habe ich cart.php modifiziert, um das Gesamtgewicht aller Produkte im Warenkorb zu erhalten. Ich habe einen Gutschein erstellt, der den Rabatt berücksichtigt (wenn er manuell eingegeben wird), und ich habe function.php einen Code hinzugefügt, um ihn zu überprüfen das Gewicht und zeigen eine Nachricht an den Benutzer.

BEARBEITEN: Teilcode entfernt, vollständiger Code in Lösung unten enthalten.

Danke für die Anleitung Freney. Hier ist das Arbeitsergebnis, das den Rabattcoupon erfolgreich anwendet, wenn die Bedingung erfüllt ist, und ihn auch entfernt, wenn er nicht mehr erfüllt ist:

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

/* Mod: Remove 10% Discount for weight less than or equal to 100 lbs */
add_action('woocommerce_before_cart_table', 'remove_coupon_if_weight_100_or_less');
function remove_coupon_if_weight_100_or_less( ) {
    global $woocommerce;
    global $total_weight;
    if( $total_weight <= 100 ) {
        $coupon_code = '999';
        $woocommerce->cart->get_applied_coupons();
        if (!$woocommerce->cart->remove_coupons( sanitize_text_field( $coupon_code ))) {
            $woocommerce->show_messages();
        }
        $woocommerce->cart->calculate_totals();
    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage