Добавить плату за корзину из переменной URL в Woocommerce - PullRequest
0 голосов
/ 09 сентября 2018

С Woocommerce, этот сайт имеет два типа кнопок для продуктов:

  1. Добавить в корзину и
  2. Свяжитесь с нами для заказа.

При нажатии на кнопку «Свяжитесь с нами для заказа» посетители перенаправляются на контактную форму на странице «Свяжитесь с нами для заказа». Эта контактная форма построена с плагином Контактная форма 7.

Для некоторых продуктов в контактной форме есть поле с эксклюзивным флажком, в котором они могут выбрать подкладку. Исходя из того, какую подкладку они выбрали, я перенаправляю посетителей на страницу оформления заказа с некоторым значением, переданным через URL.

Например: https://milanshopping.co.uk/checkout/?val=15

И в файле functions.php я использую следующий код:

 add_action( 'woocommerce_cart_calculate_fees','milanshopping_add_lining_fees' ); 
 function milanshopping_add_lining_fees() { 
     if ( is_admin() && ! defined( 'DOING_AJAX' ) )
         return;

    if(isset($_GET['val'])){

        if($_GET['val'] == 15){
            $leather_fee = 15;
        }else{
            $leather_fee = 20;  
        } 

    }

    if($leather_fee != 0 ){
        WC()->cart->add_fee( 'Leather fee', $leather_fee);        
    }    

}

Но это не добавляет плату, даже если присутствует значение $_GET. Я проверил, вызвав echo $_GET['val'], и значение напечатано.

Но если я добавлю следующий код вне оператора if,

WC()->cart->add_fee( 'Leather fee', $leather_fee);

работает, хотя добавленная плата равна 0, а не те сборы, которые я пытаюсь получить из значения $_GET. Любая идея?

Перенаправление от контакта к нам на страницу заказа на страницу оформления заказа осуществляется с помощью формы контакта 7 dom «wpcf7submit», и товары добавляются в корзину с помощью отдельной функции.

1 Ответ

0 голосов
/ 09 сентября 2018

Обновлено: вам нужно сначала получить запрашиваемое значение переменной URL в сеансах следующим образом:

add_action( 'template_redirect', 'grab_fee_query_var' );
function grab_fee_query_var() {
    session_start();

    // Not on checkout page
    if( ! is_admin() && isset($_GET['val']) ) {
        $_SESSION['leather_fee'] = $_GET['val'];
        WC()->session->__unset('leather_fee');
    }
}

add_action( 'woocommerce_cart_calculate_fees','add_custom_cart_fee' );
function add_custom_cart_fee() {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if(isset($_SESSION['leather_fee']) && ! WC()->session->__isset('leather_fee') ){
        $value = $_SESSION['leather_fee'] == 15 ? 15 : 20;
        WC()->session->set('leather_fee', $value );
    }

    if( WC()->session->__isset('leather_fee') ) {
       $leather_fee = WC()->session->get('leather_fee');
       WC()->cart->add_fee( 'Leather fee', $leather_fee);
    }
}

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

...