Что такое Multiple Checkout и зачем он нужен в WooCommerce
Multiple Checkout — это возможность предлагать разные страницы оформления заказа (checkout) для различных групп клиентов или типов товаров. Например, для оптовиков отдельный чек-аут с полями для реквизитов, для розницы — упрощённый вариант, а для цифровых товаров — с автоматической выдачей лицензий.
WooCommerce изначально поддерживает только один шаблон оформления заказа, поэтому реализация нескольких вариантов требует кастомизации или использования плагинов.
Диагностика задачи: когда Multiple Checkout необходим
- В магазине есть несколько категорий товаров с разными требованиями к оформлению заказа.
- Разные группы пользователей (например, зарегистрированные оптовики и розничные покупатели) нуждаются в разных полях формы.
- Есть необходимость менять логику подсчёта налогов, доставки и оплаты в зависимости от типа покупателя.
Если вы видите, что стандартный checkout не покрывает эти требования, пора переходить к кастомизации.
Реализация Multiple Checkout с помощью кастомных шаблонов
Шаг 1. Создание пользовательских страниц оформления заказа
Создайте в админке WordPress две (или более) страницы, например:
- Оптовый заказ — с URL
/checkout-wholesale/ - Розничный заказ — с URL
/checkout-retail/
Далее создайте пользовательские шаблоны для этих страниц в вашей теме или дочерней теме.
Шаг 2. Подключение кастомных шаблонов WooCommerce Checkout
WooCommerce позволяет переопределять шаблоны. Скопируйте файл woocommerce/templates/checkout/form-checkout.php в папку вашей темы /woocommerce/checkout/ и создайте версии для оптового и розничного чек-аутов, например:
form-checkout-wholesale.phpform-checkout-retail.php
В этих файлах можно добавить/убрать поля, изменить разметку, логику валидации.
Шаг 3. Перенаправление пользователей на нужный checkout
Добавьте в functions.php следующий код для перенаправления в зависимости от роли пользователя или других условий:
add_action('template_redirect', function() {
if (is_page('checkout-wholesale') && !current_user_can('wholesale_customer')) {
wp_redirect(home_url('/checkout-retail/'));
exit;
}
if (is_page('checkout-retail') && current_user_can('wholesale_customer')) {
wp_redirect(home_url('/checkout-wholesale/'));
exit;
}
});Замените wholesale_customer на нужную роль или условие.
Шаг 4. Модификация полей checkout через хуки
В файлах шаблонов или в functions.php можно изменять поля checkout так:
add_filter('woocommerce_checkout_fields', function($fields) {
if (is_page('checkout-wholesale')) {
// Добавляем поле для ИНН
$fields['billing']['billing_inn'] = [
'type' => 'text',
'label' => 'ИНН',
'required' => true,
'class' => ['form-row-wide'],
'priority' => 25,
];
} elseif (is_page('checkout-retail')) {
// Убираем поле company
unset($fields['billing']['billing_company']);
}
return $fields;
});Проверка результата после внедрения
- Перейдите на
/checkout-wholesale/под пользователем с ролью оптовика — убедитесь, что отображаются нужные поля и нет доступа для розничных. - Под обычным пользователем проверьте
/checkout-retail/— поля должны соответствовать розничной форме. - Оформите тестовый заказ с каждой страницы, проверьте, что данные сохраняются корректно и клиент получает правильные письма.
Частые ошибки и как их исправить
- Проблема: Оба checkout показывают одинаковые поля.
Причина: Фильтрwoocommerce_checkout_fieldsне учитывает условие страницы.
Решение: Добавьте проверкуis_page()или другой идентификатор, чтобы различать формы. - Проблема: Перенаправление зацикливается.
Причина: Некорректные условия вtemplate_redirect.
Решение: Проверьте логику условий и добавьте логирование для отладки. - Проблема: Новые поля не сохраняются в заказе.
Причина: Отсутствует обработчик сохранения данных.
Решение: Используйте хукwoocommerce_checkout_update_order_metaдля сохранения дополнительных полей.
Практические советы по безопасности и производительности
- Всегда проверяйте и валидируйте пользовательский ввод в новых полях checkout через
woocommerce_checkout_process. - Минимизируйте количество кастомных полей, чтобы не замедлять загрузку checkout.
- Используйте transient API или object cache для кеширования данных, если формируется сложная логика выбора checkout.
- Для крупных проектов рассмотрите плагин Clearfy Pro из WPShop для оптимизации WooCommerce и управления ролями.
Сравнение вариантов реализации Multiple Checkout
| Вариант | Плюсы | Минусы |
|---|---|---|
| Кастомные шаблоны + фильтры | Полный контроль, бесплатный | Требует разработки и поддержки |
| Плагины Multiple Checkout | Быстрое внедрение, поддержка | Стоимость, возможные конфликты |
| Использование одного checkout с условной логикой | Простота, меньше страниц | Сложность поддержки, нагромождение кода |