Добавить плату за корзину из переменной URL в Woocommerce
С Woocommerce, этот сайт имеет два типа кнопок для продуктов:
- Добавить в корзину и
- Свяжитесь с нами, чтобы заказать.
При нажатии на кнопку "Свяжитесь с нами для заказа" посетители перенаправляются на контактную форму на странице "Свяжитесь с нами для заказа". Эта контактная форма построена с плагином Контактная форма 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
значение присутствует. Я проверил, позвонив эхо $_GET['val']
и значение печатается.
Но если я добавлю следующий код вне оператора if,
WC()->cart->add_fee( 'Leather fee', $leather_fee);
это работает, хотя добавленная плата равна 0, а не комиссии, которые я пытаюсь получить из $_GET
значение. Любая идея?
Перенаправление с контакта на страницу заказа на страницу оформления заказа осуществляется с помощью формы контакта 7 dom "wpcf7submit", и товары добавляются в корзину с помощью отдельной функции.
1 ответ
Обновлено: сначала нужно получить значение переменной 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 вашей активной дочерней темы (или активной темы). Проверено и работает.