Проблема: виджеты WooCommerce, которые не нужны, но отображаются в админке и на сайте
WooCommerce добавляет множество собственных виджетов, которые не всегда нужны для всех магазинов. Это создает загромождение админки и может замедлять загрузку страниц, особенно при большом количестве виджетов. Часто пользователи хотят удалить неиспользуемые виджеты, чтобы сделать админку чище и повысить производительность.
Диагностика проблемы
Чтобы понять, какие виджеты WooCommerce активны на вашем сайте, перейдите в Внешний вид > Виджеты в панели администрирования. Там вы увидите список доступных виджетов, в том числе из WooCommerce, например:
- WooCommerce Корзина
- Фильтр по цене
- Фильтр по атрибутам
- Топ-продукты
- Последние отзывы
Если вы не используете некоторые из них, они остаются загруженными в коде WordPress, что не оптимально.
Пошаговое решение: удаление виджетов WooCommerce через код
Удалить виджеты без плагинов можно, отключив их регистрацию с помощью хука widgets_init. Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:
function disable_woocommerce_widgets() {
unregister_widget('WC_Widget_Cart');
unregister_widget('WC_Widget_Layered_Nav');
unregister_widget('WC_Widget_Layered_Nav_Filters');
unregister_widget('WC_Widget_Price_Filter');
unregister_widget('WC_Widget_Product_Categories');
unregister_widget('WC_Widget_Product_Tag_Cloud');
unregister_widget('WC_Widget_Recent_Reviews');
unregister_widget('WC_Widget_Top_Rated_Products');
unregister_widget('WC_Widget_Products');
}
add_action('widgets_init', 'disable_woocommerce_widgets', 20);Объяснение:
unregister_widget()деактивирует конкретный виджет по его классу.- Приоритет 20 у хука
widgets_initгарантирует, что мы отключаем виджеты после их регистрации WooCommerce.
Как узнать класс виджета WooCommerce
Если хотите отключить другие виджеты, проверьте классы в файлах WooCommerce: они лежат в папке woocommerce/includes/widgets/. Например, виджет корзины в файле class-wc-widget-cart.php с классом WC_Widget_Cart.
Проверка результата после внедрения
- Очистите кэш браузера и, если используете кэш плагин, очистите его.
- Перейдите в Внешний вид > Виджеты и убедитесь, что удалённые виджеты отсутствуют в списке доступных.
- Проверьте сайт на предмет ошибок или отсутствия функциональности, связанной с удалёнными виджетами.
Частые ошибки и как их исправить
- Ошибка: Виджеты по-прежнему отображаются в списке.
Причина: Код добавлен с неправильным приоритетом или в неправильный файл.
Решение: Убедитесь, что код вfunctions.phpдочерней темы или в отдельном плагине и приоритет хука не меньше 20. - Ошибка: Фатальная ошибка из-за неверного класса виджета.
Причина: Использован неправильный класс вunregister_widget().
Решение: Проверьте точное имя класса в файлах WooCommerce. - Ошибка: Виджеты удалились из админки, но функциональность сайта нарушилась.
Причина: Виджеты были задействованы в шаблонах или через шорткоды.
Решение: Проверьте и удалите вызовы виджетов в шаблонах или замените их на альтернативные решения.
Практические советы по безопасности и производительности
- Не удаляйте виджеты, если не уверены, что они не используются ни в одном месте сайта.
- Добавляйте код в дочернюю тему или кастомный плагин, чтобы изменения не потерялись при обновлении.
- Для больших сайтов с WooCommerce отключение ненужных виджетов может ускорить загрузку страниц и снизить нагрузку на сервер.
- Используйте
unregister_widget()вместо модификаций ядра WooCommerce — это безопасный и обновляемый способ.
Сравнение способов удаления виджетов WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Плагин для отключения виджетов | Простота использования, не требует кода | Дополнительная нагрузка, может конфликтовать с другими плагинами |
| Код в functions.php с unregister_widget() | Быстро, без плагинов, контроль над виджетами | Требует базовых знаний PHP, может быть сложно для новичков |
| Редактирование файлов WooCommerce | Полный контроль | Небезопасно, потеря изменений при обновлении |