Как быстро удалить все категории из постов WordPress через код

Часто при работе с 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.

Как удалить бесполезные CSS и JS в WordPress для ускорения сайта
22.02.2026
Как добавить автоматическое сохранение записей в WordPress
13.12.2025
Как использовать WPONE AJAX в WordPress для динамического обновления контента
06.12.2025
Как использовать WPONE REST API для получения данных и мета пользователя в WordPress
26.01.2026
Как удалить бесполезные мета данные из базы WordPress без потерь
12.01.2026