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

Руководство: изменение цен в WooCommerce с помощью кода

107

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

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

Код обновлен для работы с WooCommerce 3.x и выше. Я не могу гарантировать, что это будет работать для более ранних версий.

Шаг 1. Найдите место для своего кода

Первый шаг прост; вам нужно место для добавления вашего кода. Это полностью зависит от вас. Вы можете добавить это прямо в папку вашей темы functions.phpили куда-нибудь в файлы вашего плагина. Мне нравится работать с классами, которые будут хранить все вместе в одном месте. Для простоты я помещу класс в подкаталог /src/моей темы, включу и создам его экземпляр в файле functions.php.

require_once(get_stylesheet_directory().'/src/ChangePrices.php'); new ChangePrices();

Измените этот шаг в соответствии с вашим случаем.

Шаг 2. Решите, как должны работать корректировки цен.

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

В моем случае у меня есть метаданные о каждом пользователе, которые содержат процентную скидку; число от 0 до 99. Администратор сайта может установить скидку для каждого пользователя. Я не буду показывать код для добавления пользовательского метаполя, так как это может быть не для вас, и это легко сделать, например, с помощью Advanced Custom Fields.

В моем классе я храню переменную класса, которая в конструкторе будет установлена ​​​​на множитель. В зависимости от того, вошел ли пользователь в систему, я получу сохраненную скидку от пользователя и создам из нее множитель. По умолчанию множитель должен быть равен 1. Цена 1 = та же цена, что и раньше. Но для скидки, например, 10% множитель будет 0,9. Цена 0,9 = цена со скидкой 10%.

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

Шаг 3: Ценовые фильтры в WooCommerce

В WooCommerce есть один фильтр для простых, сгруппированных и внешних типов товаров, а другой — для переменных типов товаров. Я рекомендую вам добавить оба фильтра, чтобы охватить все типы продуктов. В дополнение к этому WooCommerce работает с тремя дополнительными ценовыми фильтрами:

  • Обычные цены (woocommerce_product_get_regular_priceи woocommerce_product_variation_get_regular_price)
  • Цены продажи (woocommerce_product_get_sale_priceи woocommerce_product_variation_get_sale_price)
  • Текущая активная цена (woocommerce_product_get_priceи woocommerce_product_variation_get_price). Текущая активная цена будет получена либо из обычной цены, либо из цены продажи.

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

По этой причине я решил отфильтровать как активную текущую цену (x_get_price), так и обычную цену (x_get_regular_price), чтобы не запутать пользователей моего интернет-магазина.

Написание ценового фильтра

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

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

Если вы проверите свой интернет-магазин, войдя в систему как пользователь со скидкой, теперь вы должны увидеть цены со скидкой! Однако мы еще не совсем закончили. WooCommerce внесла некоторые изменения в 2.4.7 (подробнее здесь ), которые влияют на динамическое ценообразование для вариативных продуктов.

Работа с переменными ценами на товары

Чтобы динамическое ценообразование работало для переменных продуктов, вы должны добавить фильтры, упомянутые в сообщении блога, указанном выше; woocommerce_variation_prices_price(и соответствующий фильтр обычной цены woocommerce_variation_prices_regular_price) и фильтр woocommerce_get_variation_prices_hash. Хэш-фильтр обрабатывает внутренний кеш WooCommerce, и нам нужно указать WooCommerce, чтобы он очищал его должным образом, когда мы изменяем цены с помощью кода.

Первые два ценовых фильтра следуют той же процедуре, что и adjustPrice(), однако я назначаю им другую функцию, потому что параметры разные. Что касается функции хеш-фильтра, нам нужно добавить к хеш-массиву, чтобы определить, когда следует очищать кеш. Добавление идентификатора пользователя — хорошая идея, поскольку множитель уникален для каждого пользователя.

Наконец-то это должно быть!

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

Полный окончательный код

Как обычно, я надеюсь, что вы узнали что-то новое, шаг за шагом следуя этому сообщению, но я приведу полный класс для справки:

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

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