Почему нужно удалять черновики в WordPress и когда это актуально
Черновики (drafts) в WordPress — это записи, которые не опубликованы и продолжают храниться в базе данных. Со временем их может накопиться очень много, особенно если сайт используется активно, например, для ведения блога или новостного портала. Накопленные черновики не только занимают место, но и могут замедлять работу админки и увеличивать размер резервных копий базы.
Удаление ненужных черновиков помогает поддерживать базу данных в чистоте и уменьшить нагрузку на сервер. Особенно это важно для сайтов с большим количеством авторов, где часто создаются тестовые или заброшенные записи.
В этой статье мы разберём, как быстро и безопасно удалить все черновики из базы данных WordPress с помощью кастомного PHP-кода и через WP-CLI, а также рассмотрим, как автоматизировать этот процесс.
Способы удаления всех черновиков: обзор
Существует несколько вариантов удаления всех черновиков:
- Через админку WordPress — вручную удалять записи в разделе «Записи» → «Все записи» с фильтром по статусу «Черновик». Этот способ подходит для небольшого количества записей.
- Использование плагинов для массового удаления записей по статусам (например, Bulk Delete). Однако плагины могут перегружать сайт и не всегда дают полный контроль.
- Через WP-CLI — мощный инструмент для работы с WordPress из командной строки, позволяет быстро и безопасно удалять записи по статусу.
- Через кастомный PHP-код — можно написать собственную функцию, которая удалит все черновики за один запрос или в цикле.
Далее остановимся на двух последних способах — WP-CLI и PHP-коде, которые подойдут разработчикам и администраторам серверов.
Удаление черновиков через WP-CLI
WP-CLI — это очень удобный инструмент для администрирования WordPress с командной строки. Если у вас есть доступ к консоли сервера, это самый быстрый и безопасный способ удалить черновики.
Команда для удаления всех записей со статусом draft выглядит так:
wp post delete $(wp post list --post_status=draft --format=ids) --forceОбъяснение:
wp post list --post_status=draft --format=ids— получает список ID всех черновиков;wp post delete ... --force— удаляет эти записи без помещения в корзину.
Важно: перед выполнением команды рекомендуется сделать резервную копию базы данных.
Преимущества этого способа:
- Очень быстро и эффективно;
- Безопасно, если есть резервная копия;
- Можно запускать через cron для автоматизации;
- Не требует изменения кода сайта.
Удаление всех черновиков через кастомный PHP-код для wp-1.ru
Если нет доступа к WP-CLI, можно написать собственную функцию для удаления всех черновиков. Важно понимать, что удаление производится с помощью функции wp_delete_post(), которая корректно очищает все связанные данные.
Пример функции для удаления всех черновиков:
function wp1ru_delete_all_drafts() {
// Получаем все черновики
$drafts = get_posts(array(
'post_status' => 'draft',
'numberposts' => -1,
'post_type' => 'post', // Можно указать любой тип записи
'fields' => 'ids',
));
if (empty($drafts)) {
return 'Черновики не найдены';
}
foreach ($drafts as $draft_id) {
// Удаляем запись навсегда
wp_delete_post($draft_id, true);
}
return count($drafts) . ' черновиков удалено';
}Как использовать:
- Добавьте эту функцию в файл
functions.phpвашей темы или в отдельный плагин. - Вызовите функцию, например, временно добавив вызов
echo wp1ru_delete_all_drafts();в шаблоне или запустив её через AJAX/REST API.
Важно: не забывайте, что удаление происходит навсегда, без возможности восстановления из корзины.
Альтернативный вариант — удаление пачками
Если черновиков очень много, лучше удалять их частями, чтобы избежать превышения лимита памяти или времени выполнения скрипта. Например, удалять по 50 записей за раз:
function wp1ru_delete_drafts_batch($batch_size = 50) {
$drafts = get_posts(array(
'post_status' => 'draft',
'numberposts' => $batch_size,
'post_type' => 'post',
'fields' => 'ids',
));
if (empty($drafts)) {
return 'Нет черновиков для удаления';
}
foreach ($drafts as $draft_id) {
wp_delete_post($draft_id, true);
}
return count($drafts) . ' черновиков удалено';
}Такую функцию можно запускать периодически, например через AJAX-запросы или CRON воркер.
Плагины для массового удаления черновиков
Если вы предпочитаете графический интерфейс, рекомендуем обратить внимание на плагины:
- Bulk Delete — мощный плагин для массового удаления записей по статусам, категориям, тегам и другим параметрам. Позволяет фильтровать и удалять черновики.
- WP-Sweep — плагин для очистки базы данных, в том числе удаления черновиков, ревизий, спама и мусорных комментариев.
Использовать плагины удобно, но они могут быть менее производительными на больших сайтах, чем WP-CLI или кастомный код.
Рекомендации по безопасности и бэкапам
Перед удалением любых данных обязательно сделайте резервную копию базы данных. Особенно если удаляете записи навсегда без возврата в корзину.
Для создания резервной копии можно использовать плагины, например, UpdraftPlus, или делать дамп базы через phpMyAdmin, WP-CLI или консоль MySQL.
Также рекомендуется тестировать удаление на тестовом сайте, чтобы избежать случайной потери важных данных.
Выводы: когда и как лучше удалять черновики
Удаление черновиков — полезная операция для поддержания сайта в оптимальном состоянии. Если черновиков немного, можно удалять вручную или с помощью плагинов. Для больших сайтов лучше использовать WP-CLI или кастомные скрипты.
WP-CLI — самый быстрый и безопасный способ, если есть доступ к серверу. Кастомный PHP-код даёт гибкость и возможность встроить процесс в другие задачи.
Не забывайте про регулярные бэкапы и тестирование перед массовыми удалениями.