Диагностика проблемы: зачем удалять типы записей WooCommerce
WooCommerce при установке добавляет в WordPress несколько типов записей: product (товары), shop_order (заказы), shop_coupon (купоны) и другие. Иногда при интеграции WooCommerce с другими системами или кастомными решениями появляется необходимость убрать или скрыть некоторые типы записей, например, shop_coupon или shop_order из админки или из REST API. Это может быть нужно чтобы упростить интерфейс, избежать путаницы или защитить данные. Однако WooCommerce не предоставляет стандартных опций для полного удаления этих типов записей — они жестко регистрируются плагином.
Перед удалением нужно проверить, действительно ли эти типы записей не используются на сайте, и убедиться, что их удаление не сломает функционал магазина.
Как проверить, какие типы записей WooCommerce используются
- В админке перейдите в «Товары», «Заказы», «Купоны» — это основные типы.
- Выполните запрос к базе данных, чтобы посмотреть количество записей каждого типа:
SELECT post_type, COUNT(ID) FROM wp_posts GROUP BY post_type; - Проверьте, используются ли кастомные типы записей в сторонних плагинах или темах.
Пошаговое удаление ненужных типов записей WooCommerce без плагинов
1. Отключение отображения в админке
Полное удаление типов записей невозможно без изменения исходного кода WooCommerce, но можно скрыть их из меню и списков. Добавьте в functions.php вашей дочерней темы или в кастомный плагин следующий код для скрытия типа записи shop_coupon из меню и админки:
add_action('admin_menu', function() {
remove_menu_page('edit.php?post_type=shop_coupon');
});
add_action('pre_get_posts', function($query) {
if (is_admin() && $query->get('post_type') === 'shop_coupon') {
$query->set('post_type', ''); // Запретить отображение в списках
}
}, 99);2. Исключение типа записи из REST API
Чтобы убрать тип записи из REST API WooCommerce, используйте следующий фильтр:
add_filter('register_post_type_args', function($args, $post_type) {
if ($post_type === 'shop_coupon') {
$args['show_in_rest'] = false;
}
return $args;
}, 10, 2);3. Удаление записей типа записи (если нужно)
Если нужно удалить все записи типа shop_coupon из базы, используйте WP-CLI или SQL запрос:
wp post delete $(wp post list --post_type=shop_coupon --format=ids) --forceИли вручную в базе данных:
DELETE FROM wp_posts WHERE post_type = 'shop_coupon';Проверка результата после внедрения
- Перейдите в админку WordPress и убедитесь, что пункт меню «Купоны» исчез.
- Выполните запрос к REST API:
https://example.com/wp-json/wp/v2/shop_coupon— должен быть 404 или ошибка. - Проверьте, что товары и заказы продолжают работать корректно.
Частые ошибки и как их исправить
- Тип записи все еще виден в админке: возможно, другой плагин добавляет меню или переопределяет его. Проверьте порядок подключаемых хуков.
- Удаление записей не происходит: убедитесь, что используете
--forceв WP-CLI, чтобы обойти корзину. - Сайт ломается после удаления типа записи: проверьте зависимости, если другие части WooCommerce или темы используют удаляемый тип.
Практические советы по безопасности и производительности
- Перед массовым удалением данных сделайте резервную копию базы.
- Удаление сложных типов записей лучше планировать на время низкой нагрузки.
- Чтобы скрыть тип записи, не удаляйте его, а используйте фильтры и хуки — это безопаснее.
- При работе с REST API ограничивайте доступ через аутентификацию или скрывайте ненужные типы.
Сравнение способов удаления и скрытия типов записей WooCommerce
| Метод | Плюсы | Минусы | Пример кода |
|---|---|---|---|
Скрытие через remove_menu_page | Простота, не ломает функционал | Тип записи остается в базе и REST API | remove_menu_page('edit.php?post_type=shop_coupon'); |
Отключение REST API (show_in_rest=false) | Убирает из API, повышает безопасность | Не удаляет записи и меню | add_filter('register_post_type_args', ...) |
| Массовое удаление записей | Удаляет данные, освобождает место | Риск потери данных, требует резервного копирования | wp post delete ... --force |