Иногда возникает задача массового удаления всех записей, принадлежащих к определённой категории в WordPress. Это может понадобиться при реорганизации контента, очистке сайта или подготовке к новой структуре. В этой статье мы подробно рассмотрим, как сделать это быстро и безопасно, используя программные методы и WP-CLI.
Почему важно правильно удалять посты из категории
Удаление постов с помощью интерфейса админки WordPress может занять много времени, если записей много. Автоматизация процесса позволяет избежать человеческих ошибок, сэкономить время и выполнить задачу точечно, не затрагивая другие данные сайта.
При массовом удалении важно учитывать, что посты могут быть связаны с комментариями, медиафайлами и метаданными, которые также нужно корректно удалить, чтобы не оставлять "мусор" в базе данных.
Варианты удаления:
- Использование PHP-кода в functions.php или отдельном плагине.
- Через WP-CLI — консольный инструмент для управления WordPress.
- Плагины — не всегда удобны и могут быть избыточны для одной задачи.
Удаление постов из категории через PHP: пошаговый пример
Рассмотрим функцию, которая по ID категории удалит все записи, в неё входящие. Код можно вставить в файл functions.php вашей темы или создать кастомный плагин.
function wpreboot_delete_posts_by_category($category_id) {
if (!current_user_can('delete_posts')) {
return 'Нет прав для удаления постов';
}
$args = array(
'category' => $category_id,
'posts_per_page' => -1,
'post_type' => 'post',
'post_status' => 'any'
);
$posts = get_posts($args);
if (empty($posts)) {
return 'Посты в категории не найдены';
}
$deleted_count = 0;
foreach ($posts as $post) {
// Полное удаление с обходом корзины
wp_delete_post($post->ID, true);
$deleted_count++;
}
return "Удалено постов: $deleted_count";
}
// Пример вызова
// echo wpreboot_delete_posts_by_category(12); // где 12 — ID категории
Объяснение:
- Проверяем права пользователя на удаление постов.
- Получаем все посты из нужной категории, включая все статусы.
- Циклом удаляем каждый пост, принудительно минуя корзину.
- Возвращаем количество удалённых записей.
Вызовите функцию с нужным ID категории, например, из административного интерфейса или временной страницы, а после удаления удалите код, чтобы не рисковать случайным удалением.
Удаление через WP-CLI: быстро и удобно
Если у вас есть доступ к серверу и установлен WP-CLI, это самый надёжный и быстрый способ.
Команда для удаления всех постов категории с ID 12:
wp post delete $(wp post list --category=12 --field=ID) --force
Объяснение:
- Первый вызов
wp post listполучает ID всех постов из категории. - Второй — удаляет их принудительно (
--force), минуя корзину.
Преимущества WP-CLI:
- Мгновенное выполнение без загрузки сайта.
- Отсутствие ограничений по времени выполнения.
- Безопасность — вы точно знаете, что удаляется.
Что делать, если нужно удалить посты по названию категории или слагу
Вместо ID, можно получить ID категории программно по слагу или имени:
function wpreboot_get_category_id_by_slug($slug) {
$category = get_category_by_slug($slug);
return $category ? $category->term_id : 0;
}
// Пример использования
$cat_id = wpreboot_get_category_id_by_slug('novosti');
if ($cat_id) {
echo wpreboot_delete_posts_by_category($cat_id);
} else {
echo 'Категория не найдена';
}
Это удобно, если вы знаете только слаг категории. Такая связка функций позволяет построить удобный инструмент для массового удаления по любым параметрам.
Рекомендации и меры предосторожности
- Обязательно создавайте резервную копию базы данных перед массовым удалением.
- Проверяйте права пользователя, под которым выполняется удаление.
- Тестируйте код на локальной копии сайта, чтобы избежать потерь.
- Если на сайте много записей, разбивайте удаление на порции, чтобы избежать ошибок по времени выполнения.
Дополнительные плагины для удобной работы с категориями и постами
Хотя ручной код и WP-CLI — лучшие варианты для разработчиков, можно рассмотреть плагины, которые упрощают управление постами по категориям:
- Clearfy PRO — расширенные инструменты оптимизации и управления, включая массовое редактирование.
- WPRemark — для управления контентом и комментариями.
Но если нужна именно функция массового удаления по категории — лучше использовать кастомный код или WP-CLI.
Таким образом, вы получаете полный контроль и безопасность при выполнении задачи.