Диагностика проблемы: зачем скрывать или удалять свойства товара в WooCommerce?
Администраторы WooCommerce иногда сталкиваются с необходимостью упростить интерфейс редактирования товара в админке. Например, если магазин использует ограниченный набор атрибутов, а стандартные свойства товара (вес, размеры, артикул и пр.) не нужны или мешают. Это снижает удобство работы с товарами и увеличивает риски ошибок при редактировании.
По умолчанию WooCommerce добавляет несколько метабоксов и полей свойства товара, которые нельзя отключить через интерфейс. Нужен программный способ удаления или скрытия этих элементов.
Пошаговое решение: как убрать свойства товара из админки WooCommerce
1. Удаление метабоксов свойства товара
Для удаления метабоксов в админке WordPress используется функция remove_meta_box(). В WooCommerce ключевые метабоксы, которые отвечают за свойства товара, имеют следующие ID:
woocommerce-product-data— весь блок с настройками товара;postexcerpt— описание товара;woocommerce-product-images— изображения товара;woocommerce-product-attributes— атрибуты товара (свойства).
Если нужно именно скрыть блок с атрибутами, используем:
add_action('add_meta_boxes', function() {
remove_meta_box('woocommerce-product-attributes', 'product', 'normal');
}, 99);Этот код удалит метабокс с атрибутами из страницы редактирования товара.
2. Удаление конкретных полей свойства товара
Иногда нужно не убирать весь блок, а скрыть отдельные поля, например, артикул или вес. Для этого нужно использовать фильтры WooCommerce и JavaScript, так как поля рендерятся динамически.
Пример скрытия поля «Артикул» (_sku):
add_action('admin_head-post.php', 'hide_sku_field_in_product_edit');
add_action('admin_head-post-new.php', 'hide_sku_field_in_product_edit');
function hide_sku_field_in_product_edit() {
global $post_type;
if ($post_type !== 'product') return;
?>
<style>
#_sku_field { display: none !important; }
</style>
<?php
}Аналогично можно скрывать другие поля по ID. Чтобы узнать нужный ID, используйте инструменты разработчика браузера на странице редактирования товара.
3. Отключение атрибутов товара программно
Если нужно полностью отключить поддержку атрибутов, можно убрать регистрацию типа атрибутов так:
add_action('init', function() {
unregister_taxonomy('pa_color'); // пример атрибута цвет
unregister_taxonomy('pa_size'); // пример атрибута размер
});Однако будьте осторожны: это удалит атрибуты и связанные с ними данные.
Проверка результата после внедрения
- Перейдите в админку WordPress → Товары → Редактирование существующего товара.
- Проверьте, что метабокс с атрибутами товара отсутствует, или что скрытые поля (например, артикул) не отображаются.
- Обновите страницу, чтобы убедиться, что изменения стабильны.
- Проверьте, что товар можно сохранить без ошибок.
Частые ошибки и как исправить
- Метабокс не исчезает: Проверьте приоритет хука
add_meta_boxes. Используйте приоритет 99 или выше, чтобы ваш код срабатывал после WooCommerce. - Скрываемое поле отображается снова: Убедитесь, что CSS селектор правильный. Используйте инструменты разработчика, чтобы найти точный ID или класс.
- Удаление атрибутов ломает сайт: Не отключайте таксономии без резервного копирования. Убедитесь, что на сайте нет зависимостей от этих атрибутов.
Практические советы по безопасности и производительности
- Вносите изменения в дочернюю тему или собственный плагин, чтобы избежать потери при обновлении WooCommerce.
- Используйте минимально необходимый код — не удаляйте лишние метабоксы и поля, чтобы не сломать логику магазина.
- Проверяйте совместимость с обновлениями WooCommerce после каждого обновления.
- Для сложных изменений лучше создать отдельный плагин, чтобы не влиять на другие части сайта.
Сравнение способов удаления свойств товара в WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| remove_meta_box() | Удаление целого блока метабокса | Простота, быстрое решение | Удаляется весь блок, нельзя выборочно |
| CSS/JS скрытие полей | Скрытие отдельных полей через CSS в админке | Выборочное скрытие, быстро | Поле не удаляется, доступно в коде |
| unregister_taxonomy() | Полное отключение атрибутов | Полностью убирает таксономии атрибутов | Риск потери данных, требует осторожности |