При ведении блога или сайта на WordPress часто скапливается большое количество черновиков, которые уже не актуальны и занимают место в базе данных. Регулярное удаление старых черновиков помогает поддерживать базу данных в чистоте и улучшает производительность сайта. В этой статье мы рассмотрим, как автоматизировать процесс удаления черновиков, используя собственный код и готовые плагины.
Почему важно удалять старые черновики в WordPress
Черновики — это записи, которые создаются, но не публикуются. Они могут накапливаться месяцами и годами, особенно если вы часто сохраняете промежуточные варианты статей. Со временем это приводит к:
- Увеличению размера базы данных, что замедляет работу сайта и увеличивает время резервного копирования.
- Загромождению административной панели WordPress, что затрудняет поиск нужных записей.
- Риску случайного восстановления или публикации устаревших материалов.
Очистка старых черновиков — важный шаг для поддержания сайта в хорошем состоянии.
Как автоматически удалять старые черновики с помощью кода
Для автоматического удаления черновиков старше определенного количества дней можно использовать wp-cron и кастомную функцию. Ниже пример кода, который удаляет черновики старше 30 дней:
function wpnote_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_modified < %s",
$date_threshold
));
if (!empty($drafts)) {
foreach ($drafts as $draft_id) {
wp_delete_post($draft_id, true); // Безопасное удаление с обходом корзины
}
}
}
// Регистрируем событие wp-cron на ежедневный запуск
if (!wp_next_scheduled('wpnote_daily_delete_old_drafts')) {
wp_schedule_event(time(), 'daily', 'wpnote_daily_delete_old_drafts');
}
add_action('wpnote_daily_delete_old_drafts', 'wpnote_delete_old_drafts');Этот код добавляет в WordPress ежедневное задание, которое автоматически удаляет все черновики, не изменявшиеся более 30 дней. Вы можете изменить значение переменной $days под свои требования.
Где добавить этот код?
Рекомендуется поместить этот код в файл functions.php вашей дочерней темы или создать небольшой плагин для повышения удобства и безопасности.
Использование плагинов для автоматизации удаления черновиков
Если вы не хотите писать код, можно использовать плагины с похожим функционалом. Рассмотрим несколько популярных решений:
1. WP Bulk Delete
Плагин позволяет массово удалять записи разных типов, в том числе старые черновики, по различным критериям — дате, статусу, категории и другим.
Как настроить:
- Установите и активируйте WP Bulk Delete.
- Перейдите в раздел Bulk WP > Bulk Delete Posts.
- Выберите фильтр по статусу "Draft" и укажите дату создания/изменения.
- Настройте периодические задачи для автоматизации.
Подробнее и загрузить плагин можно на WPSHOP.
2. Clearfy Pro
Это мультифункциональный плагин для оптимизации WordPress, который среди прочих возможностей позволяет автоматически чистить базу данных от мусора, включая старые черновики.
Преимущества Clearfy Pro:
- Удобный интерфейс для настройки автоматической очистки.
- Поддержка очистки различных типов данных.
- Минимальное влияние на производительность.
Подробнее: Clearfy Pro на WPSHOP.
Расширение функционала: уведомления об удалении черновиков
Чтобы контролировать процесс автоматического удаления, можно добавить уведомления на email администратору. Для этого модифицируем функцию из примера:
function wpnote_delete_old_drafts_with_notification() {
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_modified < %s",
$date_threshold
));
if (!empty($drafts)) {
$deleted_titles = [];
foreach ($drafts as $draft_id) {
$post = get_post($draft_id);
$deleted_titles[] = $post->post_title;
wp_delete_post($draft_id, true);
}
$to = get_option('admin_email');
$subject = 'Автоматическое удаление старых черновиков';
$message = "Удалены следующие черновики старше $days дней:\n" . implode("\n", $deleted_titles);
wp_mail($to, $subject, $message);
}
}
// Регистрация события wp-cron
if (!wp_next_scheduled('wpnote_daily_delete_old_drafts_notify')) {
wp_schedule_event(time(), 'daily', 'wpnote_daily_delete_old_drafts_notify');
}
add_action('wpnote_daily_delete_old_drafts_notify', 'wpnote_delete_old_drafts_with_notification');Теперь администратор будет получать список удаленных черновиков на email, что удобно для контроля и аудита.
Заключение
Автоматическое удаление старых черновиков — простое, но важное улучшение для любого сайта на WordPress. Вы можете выбрать решение на основе кода, если любите кастомные настройки, или воспользоваться готовыми плагинами, такими как WP Bulk Delete или Clearfy Pro. В любом случае регулярная чистка базы данных повысит скорость и стабильность вашего сайта.