Удаление всех записей определённой таксономии в WordPress

В процессе разработки и администрирования сайтов на WordPress иногда возникает необходимость массово удалить все записи, которые принадлежат определённой таксономии или её термину. Например, нужно очистить все записи, связанные с устаревшей категорией или тегом, или полностью удалить кастомные типы записей, связанные с определённой таксономией.

Почему стандартные способы не всегда удобны

В админке WordPress можно удалить записи через раздел «Записи» или «Все записи», применяя фильтры по категориям или меткам. Однако при большом количестве записей такой метод неудобен и неэффективен. Плюс, если записи принадлежат кастомным таксономиям, их может не быть в стандартных интерфейсах.

Поэтому оптимальным решением будет написать кастомный код, который удалит все записи, связанные с нужной таксономией или термином. Такой подход позволяет автоматизировать процесс, избежать ошибок и экономит время.

Получение всех записей по таксономии

Для начала нам нужно получить все записи, которые связаны с определённой таксономией и её термином. Рассмотрим пример для таксономии genre и термина fantasy.

function wpteam_get_posts_by_taxonomy( $taxonomy, $term_slug ) {
    $args = array(
        'post_type'      => 'any',
        'posts_per_page' => -1,
        'tax_query'      => array(
            array(
                'taxonomy' => $taxonomy,
                'field'    => 'slug',
                'terms'    => $term_slug,
            ),
        ),
        'fields' => 'ids',
    );
    $query = new WP_Query( $args );
    return $query->posts;
}

Функция wpteam_get_posts_by_taxonomy возвращает массив ID записей, связанных с переданной таксономией и термином.

Удаление записей по ID с безопасностью

После получения ID записей, их нужно удалить. В WordPress для удаления записи используется функция wp_delete_post(). Важно перед удалением убедиться, что у пользователя есть права на удаление, а также использовать безопасные операции.

function wpteam_delete_posts_by_ids( $post_ids ) {
    foreach ( $post_ids as $post_id ) {
        // Проверяем права текущего пользователя
        if ( current_user_can( 'delete_post', $post_id ) ) {
            wp_delete_post( $post_id, true ); // true - принудительное удаление без корзины
        }
    }
}

Обратите внимание, что параметр true указывает на безвозвратное удаление, минуя корзину. Если хотите сначала переместить записи в корзину, передайте false.

Полный пример удаляющего скрипта

Комбинируем всё вместе в одной функции, которую можно использовать в кастомном плагине или файле functions.php темы.

function wpteam_delete_posts_by_taxonomy_term( $taxonomy, $term_slug ) {
    $posts = wpteam_get_posts_by_taxonomy( $taxonomy, $term_slug );
    if ( empty( $posts ) ) {
        return 'Записей для удаления не найдено.';
    }
    wpteam_delete_posts_by_ids( $posts );
    return count( $posts ) . ' записей успешно удалены.';
}

// Пример вызова
// echo wpteam_delete_posts_by_taxonomy_term( 'genre', 'fantasy' );

Такой подход позволяет точно и безопасно удалить все нужные записи.

Использование плагинов для массового удаления

Если вы не хотите писать код, можно воспользоваться плагинами, которые позволяют массово удалять записи по таксономиям:

  • Bulk Delete — мощный плагин для массового удаления записей с гибкими фильтрами.
  • Clearfy Pro — оптимизационный плагин с инструментами для очистки сайта, включая удаление записей по условиям.

Однако в некоторых случаях именно кастомный код даёт максимальный контроль и безопасность.

Рекомендации по безопасности и резервным копиям

Перед массовым удалением записей настоятельно рекомендуется сделать резервную копию базы данных. Это позволит восстановить данные в случае ошибки. Для этого можно использовать плагины, например, Backup plugins или хостинг-решения.

Также при программном удалении учитывайте права пользователей и запускайте код в безопасной среде. Например, можно реализовать удаление через админский AJAX-запрос с nonce-проверкой.

Пример AJAX-обработчика для удаления записей

add_action( 'wp_ajax_wpteam_delete_posts', 'wpteam_ajax_delete_posts' );
function wpteam_ajax_delete_posts() {
    check_ajax_referer( 'wpteam_delete_posts_nonce', 'security' );
    if ( ! current_user_can( 'delete_posts' ) ) {
        wp_send_json_error( 'Недостаточно прав' );
    }
    $taxonomy = sanitize_text_field( $_POST['taxonomy'] );
    $term_slug = sanitize_text_field( $_POST['term_slug'] );
    $result = wpteam_delete_posts_by_taxonomy_term( $taxonomy, $term_slug );
    wp_send_json_success( $result );
}

Этот код позволяет вызвать удаление через AJAX, защищённое nonce и проверкой прав.

Создать и использовать динамические корзинные элементы в WooCommerce с AJAX
17.02.2026
Оптимизация базы данных WordPress для улучшения производительности
04.01.2026
Как использовать WPRemark для массового комментирования и управления отзывами в WordPress
15.01.2026
Решение проблемы: не работает перехват AJAX запросов в WordPress
07.12.2025
Как установить и настроить WooCommerce для интернет-магазина на WordPress
24.11.2025