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







