А вот это кстати будет интересный урок, в нём мы добавим радио-кнопки на страницу оформления заказа и в зависимости от того, какая опция выбрана, будем добавлять соответствующий сбор к общей сумме заказа.
Про страницу оформления заказа у меня на сайте есть отдельный видеоурок, вот ссылка.
Взгляните на скриншот:
Этот код вы можете добавить в functions.php
вашей текущей (или дочерней) темы, либо создать плагин для этого, это легко!
// Добавление радио-кнопок add_action( 'woocommerce_review_order_before_payment', 'truemisha_checkout_options', 25 ); function truemisha_checkout_options() { // сначала получаем объект из сессий $selected = WC()->session->get( 'gift_wrap' ); // если пусто, то ставим значение 0 $selected = empty( $selected ) ? '0' : $selected; // выводим радио-кнопки echo '<div id="truemisha-checkout-radio"><h3>Подарочная упаковка</h3>'; woocommerce_form_field( 'gift_wrap', array( 'type' => 'radio', 'class' => array( 'form-row-wide', 'update_totals_on_change' ), 'options' => array( '0' => 'Обычная', '10' => 'Баркатная (10р)', '1000' => 'Из золота (1000р)', ), ), $selected ); echo '</div>'; } // пересчитываем заказ и добавляем сбор, если нужно add_action( 'woocommerce_cart_calculate_fees', 'truemisha_radio_choice_fee', 25 ); function truemisha_radio_choice_fee( $cart ) { // ничего не делаем в админке и если не AJAX-запрос if ( is_admin() && ! defined( 'DOING_AJAX' ) ) { return; } // получаем данные из сессий $value = WC()->session->get( 'gift_wrap' ); // добавляем соответствующий сбор if ( $value ) { $cart->add_fee( 'Подарочная упаковка', $value ); } } // сохраняем выбор радио-кнопки в сессии add_action( 'woocommerce_checkout_update_order_review', 'truemisha_set_session' ); function truemisha_set_session( $posted_data ) { parse_str( $posted_data, $output ); if ( isset( $output[ 'gift_wrap' ] ) ){ WC()->session->set( 'gift_wrap', $output[ 'gift_wrap' ] ); } }
woocommerce_review_order_before_payment
.type
у функции woocommerce_form_field()
на 17й строчке.update_totals_on_change
на строке 18 – он необходим, иначе сумма заказа не будет автоматически обновляться при выборе вами какой-либо опции.Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Мог ли сделать урок купону, чтобы он работал только с товарами без скидки( Но в корзине есть как товары со скидкой, так и без скидки), а минимальная сумма корзины (без скидки) составляла 100 долларов?
Думаю, что да!
Спасибо тебе добрый человек! Все работает, как нельзя лучше!
Жаль что стоимость не обновляет. Выбираю опцию, но итоговая стоимость не обновляется
По идее должен обновлять, если вы не потеряли класс
update_totals_on_change
.Михаил, приветствую!
А возможно ли прибавлять не сумму, а процент?
Спасибо!)
Привет!
Процент от суммы корзины? Можно так попробовать
WC()->cart->get_total() * 0.2
Добрый день!
А как возможно показать созданное поле при выборе определенного способа доставки?
Спасибо!
Добрый день, можно получить выбранный метод доставки:
Когда я меняю параметр type у функции woocommerce_form_field() на 17й строчке на checkbox то все кнопки исчезают. Мне нужен множественный выбор, а в вашем примере только один вариант можно выбрать. Есть решение ?
Спасибо что делитесь опытом.
Здравствуйте. Подскажите как сделать что б данный выбор сохранялся как товар. Я сделал методы упаковки. Назвал обычная упаковка 0руб и утепленная упаковка 150руб. при выборах все работает в чекауте, но платежные системы такие как Тинькофф не видит что добавлена доп опция и начинает распределять сумму в кол-ве товаров.
Здравствуйте, ну теоретически вы можете использовать вариативный товар для этого.
Михаил, добрый день!
Можете подсказать, как сделать так, чтобы блок дополнительных опций на странице появлялся сразу в разделе "Ваш заказ" (там где сейчас появляется выбранная опция).
И чтобы при выборе опции она не добавлялась отдельной строкой а просто пересчитывалась сумма заказа.
Ну и ещё один вопрос: как сделать так, чтобы данный блок появлялся на странице корзины и отображался на странице оформления заказа с уже выбранной опцией ?
Спасибо. :)
Здравствуйте, а как вывести эти опции в карточке товара, ионо это сделать как-то через шорткод ?
Михаил, приветствую!
Пытаюсь привязать к выпадающему списку добавление промокода.
То есть, есть "да" и "нет":
А перед этим добавил переменную, которая содержит в себе промокод:
В остальном код использую тот же.
Подскажите, как можно таким образом применять промокод? Так как когда я пытаюсь его применить на сайте, он то вроде как применяется, только при выборе "Нет", ничего не меняется. По сути, он применяется при обновлении страницы. Как бы, по-умолчанию.
Буду благодарен за любой совет.
Спасибо!
Все прекрасно работает, кроме одного... в уведомление о заказе, которое приходит на почту, данные о выбранной опции не передаются(((
Можете подсказать решение?
Аааа, поторопился!
На самом деле все решил - добавил в шаблон письма
do_action( 'truemisha_set_session', $posted_data );
Другой вопрос зато возник - данные (первый вариант выбора) дополнительной опции отображается уже на странице корзины, а возможность изменить выбор - только на следующем этапе, при оформлении заказа... Я что-то упустил или так и задумывалось?
ПС: Миша, еще раз спасибо!
Рад, что всё получилось 🙏🏼
По идее на чекауте только должно отображаться, но могу ошибаться
У меня $value было равно value массива почему то. Пришлось в этом же массиве искать ключ.