Как проверить, что купон предоставил бесплатную доставку в Woocommerce? - PullRequest
0 голосов
/ 30 октября 2019

ОРИГИНАЛЬНЫЙ ВОПРОС:

Нам нужно знать, предоставил ли купон определенную бесплатную доставку.

В моем тестовом сценарии к корзине применены два купона: один с бесплатной доставкой, а другой - один. без. Var_dump ясно показывает один купон, как это:

 ["free_shipping"]=>
   bool(true)

Однако при использовании

  echo "<p>Free shipping: ".(int)$coupon->free_shipping."</p>";

Всегда отображается 0.

Я не могу понять, что яя делаю не так.

Вот код:

<code> add_action('woocommerce_before_cart_totals', 'check_free_shipping_on_coupon');

function check_free_shipping_on_coupon() {

    global $woocommerce;

    if ( ! empty( $woocommerce->cart->applied_coupons ) ) {


        $my_coupon = $woocommerce->cart->get_coupons() ;


        foreach($my_coupon as $coupon){

            if ( $post = get_post( $coupon->id ) ) {

                        echo "<p>ID: ".$coupon->id . "</p>";

                        echo "<p>Code: ".$coupon->code."</p>";

                        echo "<p>Amount: ".$coupon->amount."</p>";

                        if ( !empty( $post->post_excerpt ) ) {

                        echo "<p>Excerpt: ".$post->post_excerpt."</p>";

                        }

                        echo "<p>Free shipping: ".(int)$coupon->free_shipping."</p>";

                        if ( (int)$coupon->free_shipping == '1'){//I want to do stuff here;

                        }

                        //Dump everything for reference
                        echo '<pre>' , var_dump($coupon) , '
';}}}}

ОБНОВЛЕНИЕ:

Я нашел здесь еще один вопрос: Установите все методы доставки на ноль для бесплатного купона доставки в Woocommerce , который имелфрагмент кода, который решил мой вопрос, но совсем по-другому. Мне все еще интересно, почему мой оригинальный код не работал.

Рабочий код:

//Check if a coupon has granted free shipping

add_action('woocommerce_before_cart_totals', 'rnr_check_free_shipping_on_coupon');

function rnr_check_free_shipping_on_coupon() {

$applied_coupons = WC()->cart->get_applied_coupons();

    foreach( $applied_coupons as $coupon_code ){

    $coupon = new WC_Coupon($coupon_code);

    if($coupon->get_free_shipping()){

        echo 'You have a free shipping coupon!';

    }

  }

}
...