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

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

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

В админке WordPress есть возможность массового удаления записей через меню «Записи» -> «Все записи», выбрав несколько штук и применив действие «Удалить». Но если записей сотни или тысячи, этот метод не подходит — нужно будет делать несколько итераций.

Использование SQL-запросов к базе данных напрямую — вариант, но он требует доступа к базе и знаний SQL. Ошибка в запросе может привести к потере важных данных.

Поэтому удобнее создать в админке кнопку, которая удалит все записи программно и безопасно.

Создаем кнопку для удаления всех записей в админке WordPress

Для решения задачи создадим плагин или добавим код в functions.php темы, который добавит новую страницу в меню и кнопку для удаления всех записей. Для безопасности добавим nonce и проверим права пользователя.

Добавление страницы и кнопки

Для начала зарегистрируем новую страницу в меню «Инструменты» с кнопкой:

function wpreset_add_tools_page() {
    add_management_page(
        'Удалить все записи',
        'Удалить все записи',
        'manage_options',
        'wpreset-delete-all-posts',
        'wpreset_render_delete_posts_page'
    );
}
add_action('admin_menu', 'wpreset_add_tools_page');

function wpreset_render_delete_posts_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Доступ запрещен');
    }
    ?>
    <div class="wrap">
        <h1>Удалить все записи WordPress</h1>
        <form method="post">
            <?php wp_nonce_field('wpreset_delete_all_posts_action', 'wpreset_delete_all_posts_nonce'); ?>
            <p>Нажмите кнопку ниже, чтобы удалить <strong>все</strong> записи (публикации) на сайте.</p>
            <input type="submit" name="wpreset_delete_all_posts" class="button button-danger" value="Удалить все записи" onclick="return confirm('Вы уверены? Это действие необратимо!');">
        </form>
    </div>
    <?php
    if (isset($_POST['wpreset_delete_all_posts'])) {
        if (!isset($_POST['wpreset_delete_all_posts_nonce']) || !wp_verify_nonce($_POST['wpreset_delete_all_posts_nonce'], 'wpreset_delete_all_posts_action')) {
            echo '<div class="notice notice-error"><p>Ошибка проверки безопасности. Попробуйте снова.</p></div>';
            return;
        }
        wpreset_delete_all_posts_handler();
    }
}

Функция удаления всех записей

Теперь реализуем функцию, которая выполнит удаление всех записей типа post. Мы будем использовать WP_Query с параметром posts_per_page => -1, чтобы получить все записи, и функцию wp_delete_post() для удаления.

function wpreset_delete_all_posts_handler() {
    if (!current_user_can('manage_options')) {
        echo '<div class="notice notice-error"><p>Нет прав на выполнение операции.</p></div>';
        return;
    }

    // Загружаем все записи
    $args = array(
        'post_type'      => 'post',
        'post_status'    => array('publish', 'draft', 'pending', 'future', 'private'),
        'posts_per_page' => -1,
        'fields'         => 'ids'
    );
    $all_posts = get_posts($args);

    if (empty($all_posts)) {
        echo '<div class="notice notice-info"><p>Записей для удаления не найдено.</p></div>';
        return;
    }

    $deleted_count = 0;
    foreach ($all_posts as $post_id) {
        // Удаляем без возможности восстановления (в корзину не кладем)
        if (wp_delete_post($post_id, true)) {
            $deleted_count++;
        }
    }

    echo '<div class="notice notice-success"><p>Удалено записей: ' . $deleted_count . '</p></div>';
}

Обработка потенциальных проблем и безопасность

Удаление всех записей — критическая операция, поэтому мы добавили проверку прав пользователя manage_options и nonce для защиты от CSRF-атак.

При клике появляется стандартное JavaScript-подтверждение, чтобы снизить риск случайного удаления.

Рекомендуется выполнять бэкап базы данных перед использованием такой функции.

Оптимизация для сайтов с большим количеством записей

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

function wpreset_delete_all_posts_handler() {
    if (!current_user_can('manage_options')) {
        echo '<div class="notice notice-error"><p>Нет прав на выполнение операции.</p></div>';
        return;
    }

    $deleted_count = 0;
    $paged = 1;
    $posts_per_page = 100;

    do {
        $args = array(
            'post_type'      => 'post',
            'post_status'    => array('publish', 'draft', 'pending', 'future', 'private'),
            'posts_per_page' => $posts_per_page,
            'paged'          => $paged,
            'fields'         => 'ids'
        );
        $posts_batch = get_posts($args);

        if (empty($posts_batch)) {
            break;
        }

        foreach ($posts_batch as $post_id) {
            if (wp_delete_post($post_id, true)) {
                $deleted_count++;
            }
        }

        $paged++;
    } while (count($posts_batch) === $posts_per_page);

    echo '<div class="notice notice-success"><p>Удалено записей: ' . $deleted_count . '</p></div>';
}

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

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

  • Bulk Delete — позволяет фильтровать и массово удалять записи по различным условиям (по категориям, тегам, статусу и т.д.).
  • WP Bulk Delete — похожий по функционалу плагин с удобным интерфейсом.

Плагины удобны для сложных выборок, но для простой задачи «удалить все записи» собственный код быстрее и надежнее.

Итог

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

Используйте описанный код как основу и адаптируйте под свои нужды — например, добавьте удаление кастомных типов записей или комментариев.

Как удалить или отключить WooCommerce без потери данных
24.04.2026
Как удалить все плагины WordPress одним кликом
26.01.2026
Как удалить тяжелые плагины WordPress без доступа к админке
20.02.2026
Как автоматически отключать подписки в WordPress при удалении пользователя
09.03.2026
Как установить и настроить WooCommerce для массового экспорта и импорта товаров
31.05.2026