В процессе ведения сайта на WordPress накопление большого количества черновиков может замедлять работу административной панели и усложнять управление контентом. Особенно это актуально для сайтов с большим объемом публикаций и нескольких авторов. В этой статье мы разберем, как автоматически удалять старые черновики, чтобы поддерживать базу данных в порядке и не тратить время на ручное удаление.
Почему важно удалять старые черновики в WordPress
Черновики — это записи, которые не были опубликованы, но при этом сохраняются в базе данных. Со временем их количество может достигать сотен или тысяч, особенно если на сайте работает несколько редакторов. Это приводит к ряду проблем:
- Увеличение размера базы данных и замедление запросов;
- Загромождение административной панели, что усложняет поиск нужных записей;
- Риск случайного опубликования устаревшего контента;
- Общее снижение производительности сайта.
Поэтому регулярное удаление неактуальных черновиков — важная задача для поддержания сайта в рабочем состоянии.
Автоматическое удаление старых черновиков с помощью WP-Cron
WordPress имеет встроенную систему планировщика задач — WP-Cron, которая позволяет запускать произвольный код по расписанию. Мы можем использовать WP-Cron для автоматического удаления черновиков старше определенного периода.
Ниже пример функции wordpressy_delete_old_drafts, которая удаляет все черновики старше 30 дней, и регистрирует ее в планировщике.
function wordpressy_delete_old_drafts() {
global $wpdb;
$days = 30; // количество дней
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Получаем ID черновиков старше порога
$drafts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_status = 'draft' AND post_date < %s",
$date_threshold
));
if (!empty($drafts)) {
foreach ($drafts as $post_id) {
wp_delete_post($post_id, true); // true — без перемещения в корзину
}
}
}
// Регистрируем событие, если оно еще не зарегистрировано
if (!wp_next_scheduled('wordpressy_delete_old_drafts_event')) {
wp_schedule_event(time(), 'daily', 'wordpressy_delete_old_drafts_event');
}
// Привязываем функцию к событию
add_action('wordpressy_delete_old_drafts_event', 'wordpressy_delete_old_drafts');Данный код нужно добавить в файл functions.php вашей темы или в собственный плагин. Он будет запускаться один раз в сутки и удалять все черновики старше 30 дней.
Что учесть при использовании такого метода
- Удаление происходит безвозвратно — убедитесь, что вам не нужны эти черновики.
- Если у вас очень большой сайт, запрос к базе может занять время, стоит протестировать нагрузку.
- Можно изменить период удаления, например, на 15 или 60 дней, заменив значение переменной
$days. - Для отладки можно сначала выводить список удаляемых постов вместо удаления.
Использование плагинов для управления черновиками
Если не хочется писать код, можно воспользоваться готовыми плагинами, которые позволяют автоматически удалять старые черновики и другую неиспользуемую информацию.
Рассмотрим два популярных варианта:
1. Clearfy
Плагин Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wordpressy.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-udaljat-starye-chernoviki-v-wordpress) содержит модуль оптимизации базы данных, который может автоматически очищать черновики, ревизии, спам и мусорные комментарии. Настройка — через админку плагина, можно задать периодичность и типы удаляемых данных.
2. WP-Sweep
WP-Sweep — бесплатный плагин с открытым исходным кодом, который позволяет очищать базу от неиспользуемых данных. Он предлагает возможность удаления черновиков, ревизий и других устаревших элементов одним кликом или по расписанию с помощью WP-Cron.
Расширенный пример: удаление черновиков с уведомлением администратора
Для более продвинутого сценария можно добавить отправку email с отчетом после удаления. Это удобно для контроля за процессом очистки.
function wordpressy_delete_old_drafts_with_report() {
global $wpdb;
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$drafts = $wpdb->get_col($wpdb->prepare(
"SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'draft' AND post_date < %s",
$date_threshold
));
if (!empty($drafts)) {
$deleted_titles = [];
foreach ($drafts as $post_id) {
$post = get_post($post_id);
wp_delete_post($post_id, true);
$deleted_titles[] = $post->post_title;
}
$to = get_option('admin_email');
$subject = 'Отчет об удалении старых черновиков';
$message = "Удалены следующие черновики, старше {$days} дней:\n" . implode("\n", $deleted_titles);
wp_mail($to, $subject, $message);
}
}
if (!wp_next_scheduled('wordpressy_delete_old_drafts_report_event')) {
wp_schedule_event(time(), 'daily', 'wordpressy_delete_old_drafts_report_event');
}
add_action('wordpressy_delete_old_drafts_report_event', 'wordpressy_delete_old_drafts_with_report');Этот код работает аналогично предыдущему, но дополнительно отправляет письмо администратору с перечнем удаленных черновиков.
Практические советы по работе с черновиками в WordPress
Чтобы минимизировать накопление бесполезных черновиков, стоит придерживаться нескольких правил:
- Настраивайте права доступа редакторов, чтобы они не создавали лишние дубли и не сохраняли черновики без надобности;
- Используйте плагины для автоматической очистки базы, чтобы не нагружать себя ручным контролем;
- Регулярно проверяйте список черновиков и удаляйте ненужные;
- Для крупных проектов внедряйте процессы ревизии контента, чтобы черновики переходили в публикации быстрее или удалялись;
- Оптимизируйте WP-Cron, если у вас много задач, чтобы очистка не замедляла сайт.
Автоматизация удаления старых черновиков — простой, но эффективный способ поддерживать WordPress в чистоте и порядке, обеспечивая стабильную работу и удобство для редакторов.