В процессе работы с WordPress накапливаются черновики, которые со временем перестают быть актуальными. Это не только создает беспорядок в админке, но и может замедлять работу сайта из-за увеличения объема базы данных. В этой статье разберем, как настроить автоматическое удаление старых черновиков в WordPress с помощью собственного кода и полезных плагинов.
Почему важно удалять старые черновики в WordPress
Накопление большого количества черновиков ведет к нескольким проблемам:
- Увеличение размера базы данных, что может замедлить запросы и работу сайта.
- Засорение админки, усложняющее поиск актуальных записей.
- Повышение нагрузки при бэкапах и миграциях.
Регулярное удаление черновиков помогает поддерживать базу данных в чистоте и улучшать производительность.
Автоматическое удаление старых черновиков с помощью кастомного кода
Самый гибкий способ — добавить в файл functions.php вашей темы или создать отдельный плагин, который будет удалять черновики старше определенного времени.
Создаем функцию удаления черновиков
Пример функции, которая удаляет черновики старше 30 дней:
function wpkit_delete_old_drafts() {
global $wpdb;
$days = 30; // количество дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$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 $post_id) {
wp_delete_post($post_id, true); // true — удаление без возможности восстановления
}
}
}
// Запускаем функцию раз в сутки
if (!wp_next_scheduled('wpkit_daily_delete_old_drafts')) {
wp_schedule_event(time(), 'daily', 'wpkit_daily_delete_old_drafts');
}
add_action('wpkit_daily_delete_old_drafts', 'wpkit_delete_old_drafts');Код делает следующее:
- Определяет дату 30 дней назад.
- Получает ID всех черновиков, которые не менялись дольше 30 дней.
- Удаляет каждый из них без помещения в корзину.
- Настраивает запуск функции один раз в сутки через WP Cron.
Вы можете изменить значение $days по своему усмотрению.
Как отключить автоматическое удаление
Для отмены запланированного события воспользуйтесь таким кодом:
function wpkit_clear_delete_old_drafts_cron() {
$timestamp = wp_next_scheduled('wpkit_daily_delete_old_drafts');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpkit_daily_delete_old_drafts');
}
}Использование плагинов для удаления старых черновиков
Если вы не хотите добавлять код вручную, можно использовать плагины с функциями очистки базы данных и управления черновиками.
1. WP Rocket
Хотя WP Rocket — это плагин для кэширования, он включает функцию очистки базы данных, которая позволяет удалять старые ревизии и черновики. Для активации:
- Перейдите в «Настройки» → «WP Rocket» → «База данных».
- Выберите «Удалить все черновики» или «Удалить старые черновики».
- Настройте периодичность очистки.
Подробнее: WP Rocket на WPSHOP
2. Clearfy Pro
Clearfy Pro — многофункциональный плагин для оптимизации WordPress, включая очистку базы данных. Он позволяет удалять неиспользуемые черновики по расписанию.
Настройка происходит в разделе очистки базы данных с выбором категорий элементов для удаления.
Подробнее: Clearfy Pro на WPSHOP
Советы по безопасному удалению черновиков
Перед тем как запускать автоматическое удаление, учтите следующие рекомендации:
- Резервное копирование базы данных. Это защитит от случайной потери важных данных.
- Тестирование на тестовом сайте. Проверьте работу функции удаления, чтобы убедиться, что нужные записи не удаляются.
- Настройка периодичности. Чаще всего достаточно удаления раз в неделю или месяц.
- Логирование действий. Для отладки можно добавить запись в лог при удалении постов.
Пример добавления логирования
function wpkit_delete_old_drafts_with_log() {
global $wpdb;
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$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 $post_id) {
if (wp_delete_post($post_id, true)) {
error_log("[WPKit] Удален черновик с ID: " . $post_id);
}
}
}
}
add_action('wpkit_daily_delete_old_drafts', 'wpkit_delete_old_drafts_with_log');Заключение
Автоматическое удаление старых черновиков — простая, но эффективная мера для поддержания чистоты и производительности WordPress сайта. Комбинируя кастомный код и проверенные плагины, вы сможете настроить гибкую систему очистки базы данных, которая будет работать без вашего постоянного вмешательства.