В 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.