Часто при работе с WordPress возникает задача массово удалить все категории из определённых постов или даже из всех записей сайта. Стандартный способ через админку неудобен и занимает много времени, особенно если постов много. В этой статье мы разберём, как программно очистить категории у постов, используя собственную функцию на PHP, а также рассмотрим полезные плагины, которые облегчат эту задачу.
Почему нужно массово удалять категории из постов
Категории в WordPress используются для удобной группировки контента, но бывают ситуации, когда требуется очистить их у большого количества записей:
- Ребрендинг сайта и смена структуры рубрик.
- Ошибочный импорт контента с неправильными категориями.
- Перенос контента на другую таксономию (например, метки или пользовательские).
- Оптимизация SEO и устранение дублирующегося контента.
Ручное удаление категорий в админке требует открытия каждой записи и удаления категорий, что занимает часы и неэффективно.
Как работает связь постов и категорий в WordPress
Категории — это таксономия category, связанная с записями (post type = post). В базе данных связь хранится в таблицах wp_term_relationships, wp_term_taxonomy и wp_terms. Чтобы удалить категории, нужно удалить соответствующие записи из wp_term_relationships для нужных постов и таксономии category.
Однако делать это напрямую в базе опасно и требует точности, поэтому лучше использовать встроенные функции WordPress.
Функция wpone_remove_all_categories_from_posts: массовое удаление категорий
Ниже пример функции, которая удаляет все категории из всех опубликованных постов. Функция использует WP_Query для выборки постов и функцию wp_set_post_terms для очистки категорий.
function wpone_remove_all_categories_from_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
);
$query = new WP_Query($args);
if (empty($query->posts)) {
echo 'Посты не найдены.';
return;
}
foreach ($query->posts as $post_id) {
// Устанавливаем пустой массив терминов категории, чтобы удалить все категории
wp_set_post_terms($post_id, array(), 'category');
echo "Категории удалены у поста ID: $post_id<br>";
}
}
Чтобы запустить функцию, можно поместить её в файл темы functions.php или в отдельный плагин, а затем вызвать, например, через админку или по URL (с безопасной проверкой).
Советы по использованию функции
- Перед выполнением обязательно сделайте резервную копию базы данных.
- Если постов очень много, можно добавить пагинацию в запрос, чтобы избежать таймаута.
- Для очистки категорий не у всех, а у выбранных постов, можно изменить параметры запроса (например, по дате, автору, категории и т.п.).
Использование плагинов для массового удаления категорий
Если не хочется писать код, можно использовать плагины с функционалом массового редактирования таксономий:
- Bulk Delete — позволяет удалять посты, категории, теги по заданным фильтрам. Поддерживает удаление категорий из постов.
- Term Management Tools — добавляет возможность массового удаления и переназначения терминов.
- WP Bulk Post Editing — плагин для массового редактирования записей, в том числе полей категорий.
Например, с Bulk Delete можно удалить категории из постов через интерфейс, что удобно для пользователей без навыков программирования.
Как защитить сайт при массовом удалении категорий
Массовые операции с таксономиями могут привести к ошибкам, потерям данных и нарушению структуры сайта. Вот несколько рекомендаций:
- Сделайте полную резервную копию базы и файлов сайта.
- Работайте на тестовом или staging-сайте, если есть возможность.
- Проверьте корректность работы сайта после удаления, особенно навигацию и вывод категорий.
- Если есть кэширование, очистите кэш после изменений.
- Используйте транзакции или функции с проверками, если пишете кастомный код.
Пример расширения функции для удаления категорий только у постов из определённой категории
Допустим, нужно очистить категории только у постов, которые принадлежат категории с ID 10. Вот как можно изменить функцию:
function wpone_remove_categories_from_selected_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'category__in' => array(10),
'fields' => 'ids',
);
$query = new WP_Query($args);
if (empty($query->posts)) {
echo 'Посты с нужной категорией не найдены.';
return;
}
foreach ($query->posts as $post_id) {
wp_set_post_terms($post_id, array(), 'category');
echo "Категории удалены у поста ID: $post_id<br>";
}
}
Это позволит аккуратно очистить категории именно у выбранных записей без удаления у всего контента.
Выводы и рекомендации
Массовое удаление категорий — частая задача при администрировании WordPress-сайтов. Решить её можно как через кастомный код, так и через плагины. Важно всегда делать резервное копирование и тестировать изменения. Использование функции wp_set_post_terms с пустым массивом — самый безопасный и рекомендуемый способ удалить все категории у постов.
Если хотите более гибкий функционал массового управления категориями, рекомендуем обратить внимание на плагин Clearfy Pro. Он оптимизирует работу с таксономиями и позволяет управлять ими удобно с панели WordPress.