Диагностика: зачем отключать разделы в корзине и оформлении заказа WooCommerce?
В стандартной комплектации WooCommerce отображает несколько секций на страницах корзины и оформления заказа (checkout), например, купоны, заметки к заказу, адрес доставки, способы оплаты и пр. В некоторых проектах не все эти разделы нужны или они конфликтуют с кастомными решениями. Отключение лишних блоков упрощает интерфейс, снижает количество ошибок у пользователей и ускоряет процесс оформления.
Чаще всего требуется отключить:
- Поле для ввода купонов (если купоны не используются или управляются отдельно)
- Поле заметок к заказу (Customer Notes)
- Адрес доставки (если доставка не нужна или фиксирована)
- Методы оплаты (при использовании внешних систем или предоплаты)
Как отключить поле купонов на странице корзины и оформления заказа
Самый простой способ — убрать вывод поля купонов через фильтр или действие. WooCommerce использует хук woocommerce_before_cart для вывода формы купонов на странице корзины, и аналогично на странице оформления заказа.
Код для отключения поля купонов на странице корзины
remove_action('woocommerce_before_cart', 'woocommerce_cart_coupon_form', 10);Код для отключения поля купонов на странице оформления заказа
add_filter('woocommerce_coupons_enabled', '__return_false');Добавьте оба фрагмента в functions.php вашей темы или в сниппет-плагин.
Отключение поля заметок к заказу (Order Notes)
Поле заметок к заказу выводится по умолчанию на странице оформления заказа. Чтобы убрать его, можно изменить поля формы checkout с помощью фильтра woocommerce_checkout_fields.
add_filter('woocommerce_checkout_fields', function($fields) {
if (isset($fields['order']['order_comments'])) {
unset($fields['order']['order_comments']);
}
return $fields;
});Отключение адреса доставки
Если доставка не нужна или фиксирована, можно убрать адрес доставки из формы оформления заказа. Снова используем фильтр woocommerce_checkout_fields.
add_filter('woocommerce_checkout_fields', function($fields) {
foreach ($fields['shipping'] as $key => $field) {
unset($fields['shipping'][$key]);
}
return $fields;
});Если нужно полностью скрыть блок доставки, можно добавить CSS или использовать хук woocommerce_cart_needs_shipping для отключения флага доставки:
add_filter('woocommerce_cart_needs_shipping', '__return_false');Отключение методов оплаты
Если вы хотите временно отключить все или некоторые методы оплаты, это можно сделать через фильтр woocommerce_available_payment_gateways.
add_filter('woocommerce_available_payment_gateways', function($gateways) {
// Отключить все методы оплаты
return [];
// Или отключить конкретный метод, например, чековый платеж
// if (isset($gateways['cheque'])) {
// unset($gateways['cheque']);
// }
// return $gateways;
});Проверка результата после внедрения
- Откройте страницу корзина и убедитесь, что поле для купонов отсутствует.
- Перейдите на страницу оформления заказа, проверьте, что поле купонов и поле заметок к заказу не отображаются.
- Если отключали адрес доставки, проверьте, что блок с адресом отсутствует и что при оформлении заказа не требуется ввод адреса.
- Если отключали методы оплаты, убедитесь, что на странице оформления заказа не показываются способы оплаты или отображается нужный набор.
Частые ошибки и как исправить
- Код не работает после добавления в functions.php: возможно, код добавлен в неправильный файл или синтаксис нарушен. Проверьте ошибки PHP в логах и убедитесь, что файл загружается.
- Поле купонов все еще отображается: убедитесь, что нет плагинов, которые добавляют свои купоны или изменяют поведение стандартных хуков.
- Адрес доставки не скрывается полностью: некоторые темы или плагины могут выводить адрес доставки через собственные шаблоны, тогда потребуется переопределение шаблонов WooCommerce.
- Методы оплаты не меняются: проверьте, что фильтр применяется с правильным приоритетом, и что нет других плагинов, которые перезаписывают методы оплаты.
Практические советы по производительности и безопасности
- Отключение ненужных полей и разделов уменьшает нагрузку на сервер и ускоряет загрузку страниц оформления заказа.
- Если отключаете методы оплаты, убедитесь, что это не повлияет на логику обработки платежей в вашем магазине.
- Всегда делайте резервную копию
functions.phpи других файлов перед внесением изменений. - Тестируйте изменения на копии сайта, чтобы избежать простоев.
Сравнение способов отключения разделов
| Задача | Кодовое решение | Плагин | Компромисс |
|---|---|---|---|
| Отключить поле купонов | Фильтр woocommerce_coupons_enabled и действие remove_action | WooCommerce Hide Coupons | Код быстрее и легче, плагин удобнее для неразработчиков |
| Отключить заметки к заказу | Фильтр woocommerce_checkout_fields для удаления поля | Checkout Field Editor | Плагин позволяет настраивать другие поля, но увеличивает нагрузку |
| Отключить адрес доставки | Удаление полей с помощью woocommerce_checkout_fields | Flexible Shipping | Плагин решает и другие задачи с доставкой, но сложнее в настройке |
| Отключить методы оплаты | Фильтр woocommerce_available_payment_gateways | Payment Gateways by User Role | Плагин удобен для сложных условий, но код проще для базовых случаев |