Иногда возникает задача не просто удалить категорию в WordPress, а удалить категорию вместе со всеми записями, которые к ней относятся. Стандартный функционал WordPress не позволяет сделать это одним кликом: при удалении категории записи сохраняются и переходят в категорию по умолчанию или без категории. В этой статье мы рассмотрим, как удалить категорию со всеми ее записями программно и с помощью плагинов.
Почему просто удаление категории не удаляет записи?
В WordPress категории — это таксономии, которые связаны с записями. Удаление категории по умолчанию не трогает записи — они остаются в базе данных и получают категорию по умолчанию (обычно «Без категории»). Это сделано для сохранения контента и предотвращения потери данных из-за случайного удаления категорий.
Однако иногда нужно удалить и все записи, привязанные к категории, например, при очистке сайта от устаревшего контента или при реорганизации структуры.
Удаление категории со всеми записями через код
Для решения задачи можно написать кастомный PHP-скрипт или функцию, которую удобно запускать через плагин Code Snippets или в файле functions.php вашей темы.
Основная идея — получить ID категории, затем найти все записи, которые к ней относятся, и удалить эти записи, после чего удалить саму категорию.
Пример функции для удаления категории со всеми записями
function wplesson_delete_category_with_posts($cat_slug) {
$category = get_category_by_slug($cat_slug);
if (!$category) {
return 'Категория не найдена';
}
$cat_id = $category->term_id;
// Получаем все записи категории
$posts = get_posts(array(
'category' => $cat_id,
'numberposts' => -1,
'post_status' => 'any'
));
// Удаляем все записи
foreach ($posts as $post) {
wp_delete_post($post->ID, true); // true — без возможности восстановления
}
// Удаляем категорию
wp_delete_category($cat_id);
return 'Категория и все записи удалены успешно';
}Вызывайте функцию с слагом нужной категории, например:
echo wplesson_delete_category_with_posts('novosti');Рекомендуется использовать эту функцию аккуратно и только при уверенности, что данные можно удалить безвозвратно.
Удаление категории и записей через WP-CLI
Если у вас есть доступ к консоли сервера и установлен WP-CLI, задача значительно упрощается. WP-CLI позволяет управлять записями и таксономиями через командную строку.
Для удаления всех записей категории и самой категории используйте следующий сценарий:
# Получаем ID категории по слагу
cat_id=$(wp term list category --field=term_id --slug=novosti)
# Получаем ID всех записей категории
post_ids=$(wp post list --category=$cat_id --field=ID)
# Удаляем записи
for id in $post_ids; do
wp post delete $id --force
done
# Удаляем категорию
wp term delete category $cat_id<WP-CLI очень удобен, если нужно удалить много данных быстро и без риска ошибок в коде.
Плагины для удаления категорий с записями
Готовых плагинов, которые удаляют категорию и все записи внутри, на рынке немного, поскольку это опасная операция. Но можно использовать универсальные плагины для массового управления записями и таксономиями:
- Bulk Delete — позволяет удалять записи по разным параметрам, включая категории. Можно настроить массовое удаление записей категории, а затем вручную удалить категорию.
- WP Bulk Delete — расширенный инструмент для массового удаления постов с возможностью фильтрации по таксономиям, датам, статусам.
Использование плагинов подходит тем, кто не хочет писать код, но требует осторожности и резервного копирования базы.
Советы по безопасности при удалении данных
Удаление записей и таксономий — операция необратимая, особенно при использовании wp_delete_post( ..., true ). Поэтому:
- Перед удалением сделайте полную резервную копию базы данных.
- Проверьте правильность ID или слага категории, чтобы случайно не удалить не тот контент.
- Если у вас многопользовательская среда — ограничьте доступ к функциям удаления.
Выводы и рекомендации
Удалить категорию вместе со всеми записями можно несколькими способами: через код, WP-CLI или плагины. Самый надежный и контролируемый — через кастомный код с проверками. WP-CLI отлично подходит для администраторов с доступом к серверу. Плагины дают удобный интерфейс, но требуют внимательности.
Для упрощения управления категориями и записями рекомендуем использовать плагин Bulk Delete с официального магазина WPSHOP.ru.