Кастомний плагін WooCommerce: коли готові аддони безсилі
Один наш клієнт торгував обладнанням з відстрочкою платежу та накопичувальними знижками залежно від загальної суми замовлень. Стандартний WooCommerce не вмів ні розраховувати такі знижки, ні створювати кастомний статус «Очікує відправлення». Довелося розробляти кастомний плагін з нуля. Підсумок — повністю автоматизована система лояльності та процесу відвантаження, що обробляє до 200 замовлень на день. Такі завдання не вирішити готовими аддонами.
WooCommerce побудований на хуках WordPress і власному шарі фільтрів — action та filter для кожного етапу: замовлення, товар, платіж. Кастомний плагін — це бізнес-логіка, яка не покривається стандартними модулями: нестандартне ціноутворення, інтеграція з ERP, кастомні статуси, поля товару, звіти. Розробка плагіна середньої складності займає 5–10 робочих днів. Наша команда має 5+ років досвіду в WooCommerce та реалізувала понад 30 кастомних рішень, включаючи інтеграції з 1С та CRM.
Як додати кастомні статуси замовлень у WooCommerce?
Реєструємо статус через register_post_status з префіксом wc-, потім додаємо його до списку статусів через фільтр wc_order_statuses. Можна задати колір бейджа в адмінці та налаштувати надсилання листа при переході в статус.
Покрокова інструкція:
- Зареєструвати статус за допомогою
register_post_status. - Додати статус у масив
wc_order_statusesчерез фільтр. - (Опціонально) Призначити колір бейджа та email-сповіщення.
Приклад коду:
add_action('init', function () { register_post_status('wc-awaiting-delivery', [ 'label' => 'Ожидает отправки', 'public' => true, 'show_in_admin_status_list' => true, 'show_in_admin_all_list' => true, 'exclude_from_search' => false, 'label_count' => _n_noop('Ожидает отправки <span class="count">(%s)</span>', 'Ожидает отправки <span class="count">(%s)</span>'), ]); }); add_filter('wc_order_statuses', function (array $statuses): array { $statuses['wc-awaiting-delivery'] = 'Ожидает отправки'; return $statuses; }); Чому важлива інтеграція з HPOS (High-Performance Order Storage)?
Починаючи з WooCommerce 7.1, замовлення зберігаються в окремих таблицях wc_orders, а не в wp_posts. При роботі з замовленнями використовуйте тільки WC_Order API — прямі SQL-запити зламаються при увімкненому HPOS. Кастомний плагін повинен декларувати сумісність через FeaturesUtil::declare_compatibility:
add_action('before_woocommerce_init', function () { if (class_exists(\Automattic\WooCommerce\Utilities\FeaturesUtil::class)) { \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true ); } }); Використання wc_get_orders з параметрами гарантує роботу на обох сховищах.
Приклад реалізації накопичувальної знижки
Система лояльності: чим більше клієнт витратив, тим вища знижка на поточне замовлення. Реалізуємо через woocommerce_cart_calculate_fees:
add_action('woocommerce_cart_calculate_fees', function (WC_Cart $cart): void { if (is_admin() && !defined('DOING_AJAX')) return; $user_id = get_current_user_id(); if (!$user_id) return; $total_spent = wc_get_customer_total_spent($user_id); $discount_pct = 0; if ($total_spent >= 100000) $discount_pct = 10; elseif ($total_spent >= 50000) $discount_pct = 7; elseif ($total_spent >= 20000) $discount_pct = 5; if ($discount_pct > 0) { $cart->add_fee(sprintf('Накопительная скидка %d%%', $discount_pct), -($cart->get_subtotal() * $discount_pct / 100), true); } }); Що таке Action Scheduler і як його використовувати для фонових завдань?
Action Scheduler — це вбудований у WooCommerce менеджер фонових завдань. Він заснований на таблицях WordPress і надійніший за стандартний wp_cron: повторює завдання при помилках, має UI для моніторингу.
Приклад синхронізації залишків:
as_schedule_single_action(time() + 60, 'my_plugin_sync_stock', ['supplier_id' => 42], 'my-plugin'); add_action('my_plugin_sync_stock', function (int $supplier_id): void { $items = fetch_supplier_stock($supplier_id); foreach ($items as $sku => $qty) { $product_id = wc_get_product_id_by_sku($sku); if ($product_id) { $product = wc_get_product($product_id); $product->set_stock_quantity($qty); $product->save(); } } }); Кастомні поля товару: коли це потрібно?
Якщо товар потребує додаткових атрибутів (виробник, країна походження, сертифікація), додаємо вкладку в редактор товару через woocommerce_product_data_tabs та поля через woocommerce_product_data_panels. Дані зберігаються як post meta. Це дозволяє фільтрувати товари в адмінці та виводити інформацію на вітрині.
Порівняння кастомного плагіна та готового аддона
| Критерій | Кастомний плагін | Готовий аддон |
|---|---|---|
| Гнучкість | Повна свобода логіки | Обмежений хуками та налаштуваннями |
| Сумісність | Гарантується під вашу версію | Залежить від розробника |
| Продуктивність | Оптимізований під задачу | Часто важкий і надлишковий |
| Ціна | Індивідуально | Щомісячна підписка або разова |
| Підтримка | Персональна, 1 місяць гарантії | За документацією |
| Безпека | Код перевірено і не містить зайвого | Може мати вразливості |
Типові помилки при розробці кастомних плагінів WooCommerce
| Помилка | Рішення |
|---|---|
| Використання прямих SQL-запитів до wp_posts | Перейти на WC_Order API |
| Відсутність сумісності з HPOS | Оголосити підтримку через FeaturesUtil |
| Забули Action Scheduler для фонових завдань | Впровадити асинхронну чергу |
| Тверде зберігання поля без санітизації | Використовувати WooCommerce validate/sanitize |
Що входить у розробку кастомного плагіна WooCommerce
- Аналіз бізнес-вимог та проектування архітектури
- Написання коду з дотриманням стандартів WordPress та WooCommerce
- Інтеграція з HPOS та актуальними версіями
- Документація API та коду (у форматі README)
- Передача доступів до плагіна та інструкція з встановлення
- Гарантійна підтримка 1 місяць після здачі
Терміни та вартість
Вартість розраховується індивідуально після брифу. Орієнтовні терміни:
- Плагін з кастомними полями та статусами: від 3 до 5 днів
- Плагін зі складною логікою знижок та інтеграцією API: від 8 до 12 днів
- Плагін з фоновими завданнями та синхронізацією ERP: від 10 до 15 днів
Бажаєте автоматизувати свій інтернет-магазин? Отримайте консультацію щодо вашого проєкту — ми проаналізуємо вимоги та запропонуємо оптимальне рішення. Замовте розробку кастомного плагіна WooCommerce та позбудьтеся обмежень готових рішень. Гарантуємо сумісність з останніми версіями WooCommerce та досвід 5+ років у розробці.







