Почему нужно удалять корзину WooCommerce из меню
В некоторых случаях стандартный элемент меню «Корзина» в WooCommerce может мешать дизайну или логике сайта. Например, если вы используете отдельную кнопку оформления заказа или хотите полностью скрыть корзину для определенных групп пользователей. Вместо установки дополнительных плагинов можно быстро решить задачу с помощью кода.
Диагностика: как понять, что корзина добавлена через стандартное меню
Для начала убедитесь, что элемент «Корзина» добавлен через wp_nav_menu в теме. Зайдите в Внешний вид > Меню в админке и найдите пункт «Корзина» или пункт с ссылкой на /cart/. Если он там есть — у вас стандартный способ добавления.
Если пункта нет, корзина может выводиться динамически через хуки или кастомный код — тогда нужно искать другой подход.
Пошаговое решение: удаляем пункт «Корзина» из меню программно
Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:
add_filter('wp_nav_menu_objects', 'remove_woocommerce_cart_from_menu', 10, 2);
function remove_woocommerce_cart_from_menu($items, $args) {
foreach ($items as $key => $item) {
// Проверяем URL пункта меню
if (strpos($item->url, '/cart') !== false) {
unset($items[$key]);
}
}
return $items;
}Этот фильтр перебирает все пункты меню и удаляет те, у которых URL содержит /cart. Это работает, если ссылка корзины именно такая.
Как адаптировать код под другие URL
Если у вас кастомный URL корзины, измените строку
if (strpos($item->url, '/cart') !== false)на соответствующий путь, например /korzina.
Проверка результата после внедрения
- Очистите кэш браузера и кэш сайта, если используется.
- Перейдите на страницу с меню и убедитесь, что пункт «Корзина» исчез.
- Проверьте, что другие пункты меню отображаются корректно.
- Если корзина не исчезла, проверьте правильность пути в коде и повторите шаги.
Частые ошибки и как их исправить
- Пункт меню не удаляется: проверьте, что вы используете правильный URL в условии
strpos. В некоторых случаях ссылка корзины может иметь домен или параметры, напримерhttps://example.com/cart/?key=123. - Код вызывает ошибку PHP: убедитесь, что вы вставили код без синтаксических ошибок и в правильное место.
- Корзина появляется через виджет или шорткод: данный метод не сработает, нужно искать другой способ.
- Кэширование мешает увидеть изменения: отключите кэш или очистите его.
Альтернативные варианты удаления корзины из меню
| Метод | Плюсы | Минусы |
|---|---|---|
Удаление через фильтр wp_nav_menu_objects | Быстро, без плагинов, гибко | Требует базовых знаний PHP |
| Удаление пунктов через админку | Просто, не требует кода | Корзина может автоматически добавляться плагином |
| CSS-скрытие пункта | Очень просто, не затрагивает код | Пункт остается в HTML, влияет на SEO, пользователи могут видеть в исходном коде |
| Использование плагинов для управления меню | Дополнительные функции | Загрузочный вес, лишние зависимости |
Практические советы по безопасности и производительности
- Не используйте
remove_filterи подобные методы без понимания, это может сломать работу других частей темы. - Добавляйте кастомный код в дочернюю тему или плагин, чтобы не потерять изменения при обновлении.
- Минимизируйте использование плагинов для простых задач — фильтры WordPress часто позволяют решить проблему легче и эффективнее.
- Проверяйте сайт после изменений на наличие ошибок в консоли браузера и логах сервера.
Дополнительный пример: скрытие корзины для неавторизованных пользователей
add_filter('wp_nav_menu_objects', 'hide_cart_for_guests', 10, 2);
function hide_cart_for_guests($items, $args) {
if (!is_user_logged_in()) {
foreach ($items as $key => $item) {
if (strpos($item->url, '/cart') !== false) {
unset($items[$key]);
}
}
}
return $items;
}Такой подход позволяет динамически управлять видимостью корзины в зависимости от статуса пользователя без плагинов.