Иногда возникает необходимость полностью очистить сайт WordPress от всех записей (постов) без удаления самого сайта или базы данных целиком. Например, при переносе или реструктуризации контента. В этой статье подробно разберём, как удалить все посты из базы данных WordPress максимально безопасно и эффективно как с помощью кода, так и с помощью плагинов.
Почему важно правильно удалить все посты
Удаление всех постов — не тривиальная задача, особенно если на сайте много контента, и если записи связаны с комментариями, мета-данными и таксономиями. Простое удаление из админки вручную неэффективно и занимает много времени.
Важно учитывать, что записи в WordPress хранятся в таблице wp_posts, но при этом к ним привязаны мета-данные в wp_postmeta, а также комментарии в wp_comments. Неочищенные данные приводят к росту базы и замедлению сайта.
Поэтому стоит использовать методы, которые не только удаляют посты, но и корректно очищают связанные данные.
Удаление всех постов через PHP-код (функция для wp-admin)
Для разработчиков удобен способ удалить все записи через кастомный код. Ниже пример функции, которую можно добавить в файл functions.php темы или в плагин. Она удаляет все посты типа post и очищает мета-данные и комментарии.
function wphow_delete_all_posts() {
// Получаем все ID постов
$all_posts = get_posts(array(
'post_type' => 'post',
'posts_per_page' => -1,
'fields' => 'ids',
'post_status' => 'any'
));
if (empty($all_posts)) {
return 'Посты не найдены';
}
foreach ($all_posts as $post_id) {
// Удаляем пост и все связанные данные
wp_delete_post($post_id, true); // true - без перемещения в корзину
}
return 'Все посты успешно удалены';
}Эту функцию можно вызвать через хук или через AJAX, либо временно добавить вызов в нужном месте, например, при заходе администратора на определённую страницу. Главное — после удаления убрать вызов функции, чтобы случайно не стереть контент повторно.
Разбор функции
Функция wphow_delete_all_posts получает все ID записей постов без ограничения по количеству и статусу. Затем через wp_delete_post удаляет каждый пост без помещения в корзину (параметр true).
Этот способ гарантирует, что будут удалены и мета-данные, и комментарии, связанные с постами. WP сам обрабатывает очистку связанных таблиц.
Удаление всех постов с помощью плагинов
Если вы не хотите писать код, можно использовать плагины с похожим функционалом:
- Bulk Delete — мощный инструмент для массового удаления постов, страниц, комментариев с гибкими фильтрами. Позволяет удалять по статусу, категории, меткам и др.
- WP Bulk Delete — удобный плагин с возможностью удаления постов по типу, статусу, категории, тегам и пользовательским таксономиям.
- Advanced Database Cleaner — помогает чистить базу, удалять ревизии, автосохранения, спам и удалённые посты.
Для удаления всех постов в Bulk Delete достаточно выбрать тип записей «Посты» и не ставить никаких фильтров, тогда удалится весь контент. Плагины обычно создают удобный интерфейс и безопасно обрабатывают связанные данные.
Удаление постов напрямую из базы данных (через SQL)
Удаление через SQL-запросы — самый быстрый, но рискованный способ. Его стоит использовать только если вы уверены в своих действиях и сделали резервную копию базы данных.
Пример запроса на удаление всех записей типа «post» из wp_posts:
DELETE FROM wp_posts WHERE post_type = 'post';Но так останутся записи в wp_postmeta и wp_comments, которые нужно чистить отдельно:
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;
DELETE c FROM wp_comments c
LEFT JOIN wp_posts wp ON wp.ID = c.comment_post_ID
WHERE wp.ID IS NULL;Эти запросы удалят мета-данные и комментарии, ссылающиеся на несуществующие посты. Важно выполнять эти запросы в указанном порядке и иметь бэкап.
Итоговые советы по удалению постов
1. Всегда делайте резервную копию базы данных перед массовыми операциями.
2. Если не уверены, используйте плагины, они безопаснее и удобнее.
3. Для автоматизации в коде используйте функцию wphow_delete_all_posts, чтобы интегрировать удаление в процессы.
4. После удаления рекомендуется оптимизировать базу данных с помощью плагинов типа WP-Optimize или вручную через SQL OPTIMIZE TABLE.
5. Не удаляйте посты напрямую из базы без понимания, какие данные остаются, чтобы не создавать «битые» записи.
Пример вызова функции с уведомлением
add_action('admin_init', function() {
if (isset($_GET['wphow_delete_posts']) && current_user_can('administrator')) {
$result = wphow_delete_all_posts();
add_action('admin_notices', function() use ($result) {
echo '<div class="notice notice-success is-dismissible"><p>' . esc_html($result) . '</p></div>';
});
}
});Этот код позволяет вызвать удаление всех постов, добавив в адресную строку в админке параметр ?wphow_delete_posts=1. Важно удалять или комментировать этот код после выполнения!