Кастомний плагін 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+ років у розробці.







