wphow.ru wordpress WPHow

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

Иногда возникает необходимость полностью очистить сайт 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. Важно удалять или комментировать этот код после выполнения!

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙