В процессе ведения сайта на WordPress часто накапливаются черновики, которые уже не нужны, но занимают место в базе данных и могут замедлять работу сайта. Особенно это актуально для крупных проектов и сайтов с частым обновлением контента. В этой статье разберем, как автоматически удалять старые черновики WordPress, используя как встроенные возможности, так и примеры кода, а также рассмотрим подходящие плагины.
Почему важно удалять старые черновики в WordPress
Черновики — это записи с типом post_status = 'draft'. Они создаются при написании и сохранении контента, но не публикуются. Если их накопилось слишком много, это приводит к нескольким проблемам:
- Увеличение размера базы данных и замедление запросов к ней;
- Загромождение административной панели, что усложняет поиск нужных записей;
- Потенциальные проблемы с плагинами и бэкапами из-за больших объемов данных.
Регулярное удаление старых черновиков помогает поддерживать базу данных в чистоте и ускоряет работу сайта.
Автоматическое удаление черновиков через WP-Cron
WordPress поддерживает встроенный планировщик задач WP-Cron, который можно использовать для регулярного запуска кастомных функций. Ниже пример функции, которая удаляет все черновики старше 30 дней, и регистрация задачи в WP-Cron.
Пример функции и регистрация cron-задачи
function wpstudy_delete_old_drafts() {
global $wpdb;
$days = 30; // количество дней старше которых удалять
$date_threshold = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));
$query = $wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_status = %s AND post_type = %s AND post_date < %s",
'draft', 'post', $date_threshold
);
$deleted = $wpdb->query($query);
if ($deleted !== false) {
error_log("[wpstudy] Удалено старых черновиков: " . $deleted);
}
}
// Хук для запуска задачи
add_action('wpstudy_daily_drafts_cleanup', 'wpstudy_delete_old_drafts');
// Регистрация задачи при активации темы/плагина
function wpstudy_setup_cron_job() {
if (!wp_next_scheduled('wpstudy_daily_drafts_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpstudy_daily_drafts_cleanup');
}
}
add_action('wp', 'wpstudy_setup_cron_job');
// Очистка задачи при деактивации
function wpstudy_remove_cron_job() {
$timestamp = wp_next_scheduled('wpstudy_daily_drafts_cleanup');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpstudy_daily_drafts_cleanup');
}
}
// Например, подключить к деактивации плагина или темы
// register_deactivation_hook(__FILE__, 'wpstudy_remove_cron_job');
Этот код удаляет все черновики, которые были созданы более 30 дней назад. Запуск происходит раз в сутки благодаря WP-Cron. Для подключения в плагин или файл functions.php темы нужно добавить этот код, не забывая корректно регистрировать и удалять задачу при активации и деактивации.
Использование плагинов для удаления старых черновиков
Если вы не хотите писать свой код, можно использовать готовые плагины, которые автоматизируют удаление старых записей с определенным статусом.
Плагин WP Sweep
WP Sweep позволяет очистить базу данных от мусора, включая старые черновики. После установки и активации перейдите в панель «Инструменты »→ «Sweep», где можно выбрать очистку черновиков. Есть возможность запускать очистку автоматически через WP-Cron.
Плагин Advanced Database Cleaner
Еще один мощный инструмент для оптимизации базы данных. Позволяет настроить удаление старых черновиков по расписанию, а также удалять ревизии, спам и т.п. Имеет удобный интерфейс для мониторинга состояния базы.
Как настроить удаление черновиков с помощью Clearfy Pro
Для пользователей плагина Clearfy Pro есть встроенные возможности оптимизации базы данных, включая удаление старых черновиков. В настройках плагина можно задать время хранения черновиков и включить автоматическую очистку.
Это удобный способ держать сайт в порядке без дополнительного кода и плагинов.
Советы по безопасному удалению черновиков
Перед автоматическим удалением черновиков рекомендуется:
- Создавать резервные копии базы данных;
- Проверять, что удаляются именно нужные записи (проверить статус и дату создания);
- Использовать отложенный период удаления (например, 30 дней), чтобы случайно не потерять полезный материал;
- Проводить удаление в тихое время, чтобы не нагружать сервер.
При грамотной настройке автоматическое удаление старых черновиков поможет поддерживать сайт в оптимальном состоянии и уменьшит нагрузку на базу.