В этом уроке покажу вам, как в принципе использовать функционал сборов в WooCommerce и в качестве примера мы добавим дополнительную комиссию (сбор), если покупатель на вашем сайте выберет палку в качестве оплаты (я слышал там зверский процент? 😁)
И ребята, если вы ещё не знаете про мой видеокурс по WooCommerce, то рекомендую посмотреть его по ссылке 🚀
Начнём с того, что если вы добавите этот лёгкий код в ваш functions.php
текущей темы:
add_action( 'woocommerce_cart_calculate_fees', 'truemisha_add_fee', 25 ); function truemisha_add_fee() { WC()->cart->add_fee( 'Заплати!', 50 ); }
То ко всем заказам вашего интернет-магазина на странице оформления заказа будет автоматически добавляться дополнительная оплата в 50 единиц в валюте магазина.
Вот скриншот со страницы оформления заказа:
А, я же вам обещал, что этот сбор будет появляться только при выборе определённого метода оплаты. Тогда добавляем лишь одно условие:
add_action( 'woocommerce_cart_calculate_fees', 'truemisha_add_fee_paypal', 25 ); function truemisha_add_fee_paypal() { // определяем текущий платёжный шлюз, если это – PayPal, то... if( 'paypal' == WC()->session->get( 'chosen_payment_method' ) ) { WC()->cart->add_fee( 'Заплати!', 50 ); } }
Если хотите сделать это для какого-то другого платёжного шлюза, то о том, как узнать ID метода оплаты, я говорил тут.
Ну и неплохо бы триггерить обновление страницы чекаута, когда покупатель изменяет метод оплаты (кликает по радио-кнопке), это можно сделать всего лишь тремя строчками jQuery-кода:
$( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() { $('body').trigger( 'update_checkout' ); });
Ну, вы знаете, куда его вставлять. Да ведь?!
Ладно, уговорили 😁
add_action( 'wp_footer', function() { echo '<script>jQuery( function( $ ) { СЮДА } );</script>'; } );
Ну и результат:
Норм))
Я тут тоже woocommerce начал пилить, ты как не любитель плагинов как делаешь wishlist?
Один раз пилил вишлист на куках, но теоретически, если есть хороший плагин для этого, то вай нот.
А не подскажите, как сделать доп. сбор с проверкой способа доставки? =)
К примеру, есть способ оплаты Наличными и доступен он для Самовывоза и Курьера. Хотелось бы делать доп. сбор при оплате Наличными для доставки Курьером, а при Самовывозе при оплате Наличными оставлять обычную стоимость.
Заранее спасибо.
Вам должен помочь этот урок, по крайней мере вы там сможете найти нужное вам условие.
Спасибо за решение! А можно сделать то же самое, но чтобы была комиссия не фиксированная, а в виде процента от суммы корзины?
Пожалуйста!
Используйте
WC()->cart->subtotal
(сумма товаров в корзине) для расчёта процента, например$fee = WC()->cart->subtotal * 0.2
.Код работает, только почему-то в платежный шлюз отправляется сумма без учета дополнительного сбора... Почему так?