Zastosuj kupon programowo w Woocommerce

W Woocommerce staram się znaleźć sposób na zastosowanie 10% zniżki do całego zamówienia klienta, jeśli waga w koszyku przekracza 100 kg. Jestem na drodze do osiągnięcia tego celu. W następnym kroku szukam sposobu na programowe zastosowanie kodu kuponu za pomocą akcji / haka za pomocą function.php.

Wygląda na to, że mogę użyć funkcji woocommerce_ajax_apply_coupon, aby to zrobić (http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html ) ale nie jestem pewien, jak go używać.

Do tej pory zmodyfikowałem cart.php, aby uzyskać całkowitą wagę wszystkich produktów w koszyku, stworzyłem kupon, który stosuje rabat (jeśli został wprowadzony ręcznie) i dodałem kod do functions.php, aby sprawdzić wagę i wyświetl wiadomość dla użytkownika.

EDYCJA: Usunięto częściowy kod, wypełniony kod zawarty w rozwiązaniu poniżej.

Dziękujemy za wskazówki Freney. Oto rezultat końcowy, który z powodzeniem stosuje kupon rabatowy, gdy warunek jest spełniony, a także usuwa go, gdy nie jest już spełniany:

/* 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();
    }
}

questionAnswers(3)

yourAnswerToTheQuestion