✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Посібник: змінити ціни в WooCommerce за допомогою коду

20

Ця публікація призначена для тих, хто хоче додати код, який регулює ціни у вашому веб-магазині 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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі