Как удалить все записи 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 одной кнопкой в админке. Это удобное решение для разработчиков и администраторов, позволяющее быстро очищать блог без риска и с контролем безопасности.

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

Как создать и использовать собственные REST API эндпоинты в WordPress
03.04.2026
Как использовать WPReset для быстрого восстановления сайта после обновлений
05.01.2026
Как изменить структуру ссылок в WordPress без потери SEO
17.12.2025
Как удалить или отключить плагин WordPress без доступа к админке
13.01.2026
Как создать автоматические задачи в WordPress с помощью WP-Cron и WPReset
30.12.2025