Создать перенаправление на основе примененного купона на странице получения заказа WooCommerce - PullRequest
0 голосов
/ 12 июня 2018

Вот поток:

  1. Покупатель добавляет товар в корзину.
  2. Клиент добавляет купон "smile" при оформлении заказа.
  3. Когда клиент размещает заказ, функция запускается до загрузки страницы "Детали заказа".Функция проверит купон на «улыбку» и, если он был применен, перенаправит на новую страницу, где им будут предложены дополнительные продукты бесплатно.Если нет, то он продолжается как обычно.

Я ссылался на два решения, которые я нашел в поиске Google, похожих на части моей проблемы.По отдельности я заставляю их работать, но вместе я не могу заставить их работать правильно.

Вот мой код:

add_action( 'woocommerce_thankyou' , 'sq_checkout_custom_redirect' );

function sq_checkout_custom_redirect($order_id) {

global $woocommerce;
$order = new WC_Order( $order_id );
$coupon_id = 'smile';
$applied_coupon = $woocommerce->cart->applied_coupons;
$url = 'https://site.mysite.org/score-you-win/';

if( $applied_coupon[0] === $coupon_id ) {
    echo "<script type=\"text/javascript\">window.location.replace('".$url."');</script>";
    } else {
    echo '<h3 style="font-size:200px; z-index:30000; color:#000 !important;">Coupon not applied</h3>';
    }
}

Независимо от того, к какому купону я обращаюсь, я получаю сообщение "Купон"не применяется."и никакого перенаправления не происходит.

Два решения, на которые я ссылаюсь:

Найти примененный coupon_id в корзине

Перенаправление с JS

Этот код успешно выполняется:

add_action( 'woocommerce_thankyou', function ($order_id){
$order = new WC_Order( $order_id );
$coupon_id = "smile";
$url = 'https://site.mysite.org/score-you-win/';

if ($order->status != 'failed') {
    echo "<script type=\"text/javascript\">window.location.replace('".$url."');</script>";
}
});

И это успешно выполняется:

function product_checkout_custom_content() {

global $woocommerce;
$coupon_id = 'smile';
$applied_coupon = $woocommerce->cart->applied_coupons;
if( $applied_coupon[0] === $coupon_id ) {
echo '<span style="font-size:200px; z-index:30000; color:#red !important;">We are happy you bought this product =)</span> ';
} else {
    echo '<h3 style="font-size:200px; z-index:30000; color:#000 !important;">Coupon not applied</h3>';
}
} 
add_action( 'woocommerce_thankyou' , 'sq_checkout_custom_redirect' );

1 Ответ

0 голосов
/ 12 июня 2018

Обновлено: На странице woocommerce "Заказ получен" (спасибо) больше нет объекта WC_Cart.Вместо этого вам нужно нацелиться на объект WC_Order следующим образом:

add_action( 'woocommerce_thankyou', 'thankyou_custom_redirect', 20, 1 );
function thankyou_custom_redirect( $order_id ) {
    // Your settings bellow:
    $coupon_id = 'smile';
    $url       = 'https://site.mysite.org/score-you-win/';

    // Get an instance of the WC_order object
    $order = wc_get_order($order_id);
    $found = false;

    // Loop through the order coupon items
    foreach( $order->get_items('coupon') as $coupon_item ){
        if( $coupon_item->get_code() == strtolower($coupon_id) ){
            $found = true; // Coupon is found
            break; // We stop the loop
        }
    }

    if( $found )
        echo "<script type=\"text/javascript\">window.location.replace('".$url."');</script>";
    else
        echo '<h3 style="font-size:200px; z-index:30000; color:#000 !important;">Coupon not applied</h3>';
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Проверено и работает.

...