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

Як програмно додати спеціальну знижку до WooCommerce Checkout

124

У цій публікації ми розглянемо, як програмно та автоматично додавати знижки. Для цього ми використовуємо функцію купонів WooCommerce, але робимо її автоматичною та приховуємо від клієнтів той факт, що це купон. Я намагався зберегти код якомога загальнішим, оскільки умови застосування знижок можуть сильно відрізнятися для тих, хто читає це.

Чому купони – це спосіб зробити це

У попередніх версіях WooCommerce у нас було кілька («хакерських») варіантів додавання знижок за допомогою коду; наприклад, надання від’ємного числа add_fee()чи робота з ним get_discounted_price(). На жаль, ці методи більше не працюють або вважаються застарілими, і їх буде видалено в наступних версіях. Структурно хороший спосіб додавати знижки — використовувати вбудовану функцію купонів у WooCommerce.

Однак зазвичай купон не може автоматично застосовуватися до кошика. Це вимагає від клієнта вручну ввести код купона, який він або він мав отримати. У деяких веб-магазинах ви просто хочете, щоб знижка застосовувалася автоматично, коли було виконано певну умову, і клієнту не потрібно було нічого робити. Ось що ми виправимо за допомогою коду.

Спеціальні знижки з купонами

Вам потрібно буде створити купон з кодом і налаштувати його з потрібними параметрами. Ви зможете застосовувати його, видаляти та змінювати різні виходи, де б клієнт не бачив купон. Крім того, якщо ви насправді не хочете, щоб купони були доступні для клієнтів у вашому веб-магазині, ми розглянемо кілька простих трюків, щоб приховати варіанти введення кодів купонів вручну.

У наведеному нижче прикладі коду я групую весь пов’язаний код у клас PHP. Це допомагає очистити код, але особливо корисно, тому що ми хочемо посилатися на код купона кілька разів. Краще визначити її як змінну класу, ніж повторювати її в кількох функціях.

Створіть свою знижку як купон

Першим кроком є ​​створення купона, який буде «заповнювачем» для вашої знижки. Найпростіше просто створити його в адміністраторі WooCommerce (WooCommerce > Купони > Додати купон).

Якщо ви хочете створити купон програмно, купон — це фактично публікація, за допомогою якої ви можете створити, wp_insert_post()але вам потрібно подбати про те, щоб створити публікацію купона лише один раз. У WooCommerce є короткий посібник із програмного створення купона.

Укажіть унікальний код купона та встановіть мінімальну суму знижки (у відсотках або фіксовану комісію). Що стосується наведеного нижче прикладу коду, я створив код купона " example" (проте я рекомендую використовувати більш креативну та відповідну назву для вашого).

Створення класу PHP, який міститиме весь наш код

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

class AWPCustomDiscount { private $coupon_code = 'example';   public function __construct() {   } } new AWPCustomDiscount();

Назвіть свій клас як завгодно та замініть змінну класу такою, $coupon_codeякою ви назвали купон. Не забудьте ініціалізувати клас після в кінці (new AWPCustomDiscount()).

Якщо ви раніше програмували об’єктно-орієнтоване, це має бути вам знайоме. Якщо ні, не хвилюйтеся, це має бути легко виконати. Ми додамо сюди кілька функцій і посилатимемося на код купона за допомогою $this->coupon_code. Почнемо з коду, відповідального за фактичне додавання купона, коли умови виконуються.

Програмне застосування купона

З досвіду я зрозумів, що підключення коду для застосування та видалення купонів працює найкраще та найпослідовніше за допомогою наступних двох хуків; один для кошика (woocommerce_before_cart) і один для каси (woocommerce_before_checkout_form).

Все, що нам потрібно зробити всередині функції, це перевірити потрібні нам умови. WooCommerce пропонує функції для отримання об’єкта cart, with WC()->cartякий ми можемо використовувати, щоб отримати всю необхідну нам інформацію про кошик, таку як його товари та підсумки. Як приклад, наведений нижче код застосовуватиме знижку, якщо загальна сума кошика (за винятком будь-яких знижок) перевищує певну суму.

Ми також повинні переконатися, що якщо умови не виконуються, ми повинні видалити знижку, якщо вона була додана раніше. У нашому прикладі уявіть, що клієнт перевищив максимальну суму, але потім підійшов до кошика, вилучив деякі товари й таким чином повернувся нижче необхідної суми. Оскільки купони не застосовуються автоматично, будь-які застосовані купони також потрібно програмно видалити.

Використанняapply_coupon

Купони додаються до об’єкта кошика з apply_coupon()наданням коду купона як параметра та видаляються з об’єкта кошика з remove_coupon()кодом купона як параметра. Досить просто. Ми також можемо скористатися функцією, так влучно названою get_applied_coupons()в об’єкті cart, щоб перевірити, чи наш купон уже застосовано.

Якщо ви не знайомі з використанням об’єктно-орієнтованого PHP у WordPress; ось короткий підсумок того, як працює вищезазначене: __construct()функція запускатиметься кожного разу, коли клас ініціалізовано, що ми робимо одразу після класу. Усередину __construct()ви зазвичай додаєте всі хуки, як це зазвичай робите, наприклад, усередині functions.php. Для того, щоб WordPress міг знайти наші функції всередині нашого класу, нам потрібно вказати хуку посилатися на функцію, визначену в масиві, що складається з $this(об’єкта класу) та назви функції.

Всередині функції addDiscount()ми програмуємо в наших умовах. У наведеному вище прикладі я вибираю загальне використання кошика WC()->cart->get_subtotal()та порівнюю його зі своїми умовами – понад 500.

Примітка. Якщо вам потрібно отримати та порівняти загальну суму кошика, майте на увазі, що більшість загальних сум включає купони. Наприклад, більш знайомий WC()->cart->get_cart_contents_total()поверне загальну суму перед відправкою, але з урахуванням знижок; це означає, що якщо ваша знижка вже застосовувалася раніше, цю загальну суму буде неправильно порівнювати.

Ви можете зателефонувати, apply_coupon()не перевіряючи, чи застосовано купон (ifперевірка в рядку №14), тому що функція apply_coupon()сама переконається, що не додасть його повторно, якщо він був застосований раніше. Однак ця ifперевірка запобігає отриманню клієнтом повідомлення про помилку «Купон уже застосовано» кожного разу, коли кошик оновлюється.

Ось як ваша знижка відображатиметься в сумі кошика в кошику та на касі:

Як програмно додати спеціальну знижку до WooCommerce Checkout

Ваші умови знижки

Умови для вашого купона повністю залежать від вас і ваших потреб. У попередній публікації я встановив кілька прикладів умов для додавання індивідуальної комісії – наприклад, залежно від місця доставки або продуктів у кошику. Ви також можете порівняти сьогоднішню дату, якщо хочете надати спеціальну знижку на Різдво чи Хелловін, або надати знижку на основі умов клієнта, який увійшов у систему.

Якщо ви бажаєте застосувати купон залежно від налаштувань, які ви встановили на самому купоні – наприклад, виключити або включити певні ідентифікатори продуктів, ви також можете зробити це. Ви можете створити екземпляр об’єкта купона з коду купона, наприклад:

За допомогою цього об’єкта купона ви маєте доступ до всіх функцій для отримання будь-яких налаштувань, які ви встановили на купоні. Наприклад, отримання ідентифікаторів продуктів, які повинні бути включені в купон:

Зверніться до документації для класу WC_Coupon, щоб дізнатися, як ви можете отримати те, що вам потрібно.

Виправте видиму етикетку купона

Купон вже має бути додано та видалено, коли ваш кошик відповідає або не відповідає умовам, установленим у addDiscount(). Однак у таблиці підсумків як у кошику, так і в касі знижка відображається як «Купон: приклад» (або будь-який код вашого купона). Це не добре! На щастя, цю мітку легко змінити за допомогою фільтра woocommerce_cart_totals_coupon_label. Ми додамо фільтр до нашої __construct()функції та визначимо її:

За допомогою фільтра ми отримуємо доступ до об’єкта купона як другого параметра. За допомогою об’єкта купона ми можемо перевірити його властивість, codeчи відповідає він нашому спеціальному коду купона. Якщо так, ми повертаємо будь-яку мітку, яку хочемо. Налаштуйте висновок мітки на будь-який смак. В іншому випадку ми повертаємо етикетку купона за умовчанням.

Видаліть параметр користувача, щоб видалити знижку

Інша річ, яку ви могли помітити під час відображення нашої знижки в кошику та при оформленні замовлення, полягає в тому, що вона отримала посилання «[Видалити]» після суми. Це типова поведінка купонів у WooCommerce, але для нашого випадку це не бажано. І тому, що це може заплутати клієнтів, і тому, що наш код повторно застосує його після видалення.

WooCommerce надає фільтр woocommerce_cart_totals_coupon_htmlдля виведення суми. На щастя, WooCommerce надає HTML-вивід лише самої суми як третього параметра цього фільтра. Ми можемо просто повернути це замість того, щоб переконатися, що наша знижка представлена ​​правильно з валютою та іншим.

Додатково: приховування функції купонів для клієнтів

Купони мають бути активовані в WooCommerce, щоб наша функція знижок працювала, але майте на увазі, що це додасть можливість для клієнтів вручну вводити коди купонів як у кошику, так і в касі. Якщо ви не хочете показувати, що ваш веб-магазин має функцію купонів, і особливо забороняти клієнтам вручну вводити коди купонів, ви також можете зробити це.

Видалення з каси

Видалити функцію купона з каси легко, і це можна зробити в нашому класі. Ми просто видаляємо гачок, який рендерить «коробку» купона, ось так:

... public function __construct() { add_action('woocommerce_before_cart', [$this, 'addDiscount']); add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']); add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2); add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3); remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10); } ...

Видалення з кошика

Видалити функцію коду купона в кошику, на жаль, не так просто, оскільки це жорстко закодовано в шаблоні. Вам потрібно буде перевизначити шаблон кошика WooCommerce, щоб видалити функцію купона. Скопіюйте файл pluginswoocommercetemplatescartcart.phpу your-themewoocommercecartcart.php.

Файли шаблонів WooCommerce постійно змінюються, тому надання точного номера рядка не допоможе. Але ви знайдете код, який виводить вхідні дані та кнопку для купона, у нижній частині файлу; виглядає приблизно так:

Що вам потрібно зробити, це закоментувати вихід, пов’язаний з купоном. Я рекомендую додати коментар PHP /*безпосередньо перед if-check і закрити його */відразу після закриваючої дужки. Ось так:

На цьому етапі функція купонів вашого веб-магазину має бути практично прихованою для клієнтів! Але ваша індивідуальна знижка має працювати ідеально.

Джерело запису: awhitepixel.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі