Как удалить записи по типам со стороны базы данных WordPress

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

Почему стоит удалять записи через базу данных

Удаление записей стандартными средствами WordPress — это безопасно, но иногда слишком медленно и ограниченно. Если у вас тысячи или десятки тысяч постов, удаление через админку может занять часы и нагрузить сервер.

Работа с базой данных напрямую позволяет:

  • Мгновенно удалять большие объёмы данных;
  • Автоматизировать процесс через скрипты или планировщик задач;
  • Избежать проблем с тайм-аутами сервера;
  • Удалять записи с учётом зависимостей и связей.

Однако такой подход требует аккуратности и бэкапа базы, чтобы не потерять важные данные.

Структура данных WordPress: куда смотрим?

Чтобы грамотно удалить записи, нужно понимать структуру базы данных WordPress:

  • wp_posts — основная таблица с записями, страницами, кастомными типами;
  • wp_postmeta — метаданные записей;
  • wp_term_relationships — связи записей с таксономиями (категории, метки);
  • wp_comments и wp_commentmeta — комментарии и их метаданные, если нужно удалить связанные с записями комментарии.

Удалять нужно не только записи из wp_posts, но и связанные данные, чтобы не оставлять мусор.

Пример SQL-запроса для удаления записей по типу

Допустим, у вас есть кастомный тип записи product_license, и нужно удалить все записи этого типа.

DELETE p, pm, tr, c, cm
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON pm.post_id = p.ID
LEFT JOIN wp_term_relationships tr ON tr.object_id = p.ID
LEFT JOIN wp_comments c ON c.comment_post_ID = p.ID
LEFT JOIN wp_commentmeta cm ON cm.comment_id = c.comment_ID
WHERE p.post_type = 'product_license';

Этот запрос удалит записи, их метаданные, связи с таксономиями, а также комментарии и их метаданные.

Обратите внимание: такой запрос нужно выполнять с осторожностью и только после полного бэкапа базы.

Как автоматизировать удаление через WP CLI

Если вы не хотите работать напрямую с SQL, можно использовать WP CLI — инструмент командной строки для управления WordPress.

Удаление всех записей типа product_license через WP CLI:

wp post delete $(wp post list --post_type='product_license' --format=ids) --force

Команда сначала получает все ID записей нужного типа, затем удаляет их принудительно (без помещения в корзину). Это более безопасно, чем SQL, и хорошо подходит для скриптов.

Пример функции для удаления записей по типу через PHP

Для интеграции в плагин или тему можно написать PHP-функцию, использующую WP_Query и wp_delete_post:

function wplicense_delete_posts_by_type($post_type) {
    $query = new WP_Query([
        'post_type' => $post_type,
        'posts_per_page' => -1,
        'fields' => 'ids',
        'post_status' => 'any'
    ]);

    foreach ($query->posts as $post_id) {
        wp_delete_post($post_id, true); // true — удаление без корзины
    }
}

// Использование:
wplicense_delete_posts_by_type('product_license');

Этот способ дольше работает, чем SQL, но корректно удаляет все связанные данные через стандартные хуки WordPress.

Дополнительные советы и плагины для управления записями

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

  • Clearfy Pro — оптимизатор и менеджер, помогает чистить базу, удалять мусорные записи и метаданные;
  • WPRemark — инструмент для управления комментариями, полезно если нужно удалять связанные с записями комментарии.

Использование готовых решений снижает риск и экономит время.

Выводы и рекомендации

Удаление записей по типам напрямую через базу данных — мощный и быстрый способ, но требует максимальной осторожности. Обязательно делайте бэкап перед выполнением запросов, тестируйте на копии сайта. Для регулярных задач лучше использовать WP CLI или PHP-функции, чтобы сохранить целостность данных.

Если вы хотите профессионально управлять лицензиями плагинов и их записями, рекомендую ознакомиться с продуктами WPSHOP, которые существенно упрощают работу с WordPress.

Как добавить ограничение на количество активаций лицензии WordPress плагинов по ролям пользователей
06.04.2026
Как добавить проверку лицензии в WordPress плагин
06.11.2025
Как автоматизировать отзыв лицензий WordPress плагинов по IP адресу
04.02.2026
Как создать автоматический отчет об использовании лицензий WordPress плагинов
09.01.2026
Решение проблем с активацией лицензий WooCommerce после смены домена
21.05.2026