✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Руководство по добавлению пользовательских сборов в WooCommerce Checkout по коду

45

В некоторых случаях вам может потребоваться добавить комиссию к общей сумме корзины. Иногда только при соблюдении определенного условия, например, в зависимости от суммы корзины или места доставки. С WooCommerce добавить комиссию довольно просто — на самом деле намного проще, чем добавить скидку. В этом посте мы узнаем, как добавить пользовательскую плату в WooCommerce.

WooCommerce имеет встроенную функцию в объекте корзины для добавления сборов. Все, что вам нужно, это подключиться к нужному действию и с предоставленным объектом корзины вызвать функцию для добавления платы. WooCommerce будет автоматически отображать комиссию в корзине и сумме оформления заказа. Вы определяете метку платы и сумму.

Руководство по добавлению пользовательских сборов в WooCommerce Checkout по коду

Важно отметить, что сумма комиссии не может быть отрицательной, что дает клиенту скидку. Этот «хак» раньше работал в старых версиях WooCommerce, но больше не работает.

Давайте углубимся в детали кода! Единственный крючок, о котором вам нужно беспокоиться, это woocommerce_cart_calculate_fees. Внутри этого хука вы можете получить объект корзины, вызвав WC()->cart. С этим объектом вы можете вызвать add_fee(), который принимает четыре параметра (вам, вероятно, нужны только два первых); add_fee($fee_name, $amount_in_float, $taxable_boolean, $tax_class_string). Первые два говорят сами за себя. Третий параметр — это логическое значение, которое определяет, подлежит ли сбор налогообложению или нет. И четвертый — за предоставление налогового класса для сбора (если третий параметр верен). Но его можно оставить пустым для стандартного налогового класса.

Добавление фиксированной платы

Добавление пользовательской платы выполняется в простейшей форме следующим образом:

Первый шаг — предотвратить добавление платы, если мы находимся в админке или если Ajax находится в процессе. Затем мы вызываем add_fee()объект тележки. Это добавит комиссию под названием «Небольшая комиссия» со значением 5. Значение будет в той валюте, которая есть в вашем магазине. Если в качестве валюты магазина установлены доллары, она становится равной 5 долларам. Настройте имя и сумму в соответствии с вашими потребностями.

Добавление комиссии в виде процента от общей суммы корзины

Если вы хотите, чтобы сумма комиссии была в процентах от общей суммы корзины, вам просто нужно рассчитать ее по-другому. Помните, что у нас всегда есть доступ к объекту корзины с помощью вызова WC()->cart, и оттуда мы можем получить итоги.

Приведенный выше код добавит комиссию в размере 5% от общей суммы корзины, которая равна общей сумме товаров в корзине (get_cart_contents_total()) плюс стоимость доставки корзины (get_shipping_total()). Отрегулируйте ставку и какие итоги включить или исключить в то, что вам нужно.

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

Добавление комиссии в зависимости от суммы корзины

Допустим, вы хотели добавить комиссию только в том случае, если общая сумма корзины была меньше определенной суммы. Предположим, вы хотите добавить комиссию за обработку небольших сумм. Вы можете сделать это так:

Используйте WC()->cart->get_cart_contents_total(), чтобы получить число с плавающей запятой общей суммы корзины, исключая доставку. (Если вы хотите также включить доставку, см. выше, добавив процентную плату, чтобы узнать, как получить общую стоимость доставки). Тогда сделайте свои сравнения.

Вы также можете перевернуть его и решить добавить плату, если корзина превышает определенный лимит.

Добавление комиссии в зависимости от места доставки

Вы также можете добавить комиссию в зависимости от места доставки, например, по стране. Аналогично получению объекта корзины, мы можем использовать WC()->customerего для объекта клиента. Имейте в виду, что когда клиент не вошел в систему и еще не пришел к кассе и не ввел свой адрес, значения объекта клиента будут пустыми или значениями по умолчанию, установленными в вашем магазине.

Вам нужно знать код страны — вот хорошая ссылка на код страны. Вот пример добавления комиссии, если клиент из Норвегии.

Добавление комиссии в зависимости от выбранного способа доставки

Получить способ доставки немного сложнее, так как он зависит от сеанса пользователя и не имеет «хорошего понятного формата». Вы можете узнать о текущем выбранном способе доставки с помощью WC()->session->get('chosen_shipping_methods'). Обратите внимание, что здесь написано «методы», а не «метод», поэтому возвращается массив. Обычно массив содержит один элемент, где каждый элемент состоит из строк идентификатора доставки, двоеточия и идентификатора после него. Я рекомендую использовать строковые методы PHP, чтобы проверить, содержит ли строка, например, идентификатор strpos(), а не равенство.

Добавление комиссии в зависимости от выбранного способа оплаты

Если вы хотите добавить комиссию в зависимости от того, какой платежный шлюз был выбран, вы можете получить доступ к текущему выбранному платежному шлюзу с помощью WC()->session->get('chosen_payment_method')и сравнить его имя (например, для Paypal он вернет 'paypal'). Однако вы можете заметить, что когда клиент переключается между платежными шлюзами при оформлении заказа, комиссия не добавляется и не удаляется динамически. Поэтому вам нужно будет добавить дополнительный Javascript, чтобы убедиться, что WooCommerce обновляет корзину, чтобы ваша комиссия работала стабильно.

Для добавления Javascript мы подключаемся к тому woocommerce_review_order_before_payment, что происходит прямо перед платежным полем в кассе и выводим встроенный скрипт. Все, что делает код, — это запускает хук WooCommerce update_checkoutвсякий раз, когда изменяется выбор способа оплаты. Это гарантирует, что все необходимые PHP-методы и хуки запускаются (включая хук комиссии) каждый раз при обновлении корзины.

Добавление комиссии в зависимости от того, какие товары находятся в корзине

Я уже упоминал об этом раньше, но я упомяну это снова: у вас есть полный доступ к объекту корзины с помощью WC()->cart, поэтому вы можете искать содержимое корзины для определенного идентификатора продукта и добавлять плату, если он существует в корзине.

Использование WC()->cart->get_cart_contents()возвращает массив всех товаров в корзине. Вы можете пройти через это с помощью простого foreachцикла и проверить каждый продукт на желаемое состояние, или, если вы просто хотите проверить идентификаторы, вы можете извлечь все идентификаторы продуктов в одну строку следующим образом:

В приведенном ниже примере показано, как можно добавить комиссию в зависимости от того, находится ли в корзине товар с определенным идентификатором:

Вы также можете использовать аналогичные операции для извлечения количества, если вам нужно добавить плату, когда клиент добавляет действительно большое количество чего-либо.

В заключение

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

Источник записи: awhitepixel.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее