ОРИГИНАЛЬНЫЙ ВОПРОС:
Нам нужно знать, предоставил ли купон определенную бесплатную доставку.
В моем тестовом сценарии к корзине применены два купона: один с бесплатной доставкой, а другой - один. без. 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!';
}
}
}