Ведение сайта на WordPress часто сопровождается накоплением большого количества черновиков, которые постепенно превращаются в цифровой мусор. Ручное удаление таких черновиков занимает время и неэффективно, особенно если сайт ведётся активно. В этой статье мы подробно рассмотрим, как автоматизировать удаление старых черновиков в WordPress без использования дополнительных плагинов, используя собственные функции и планировщик задач WordPress (WP-Cron).
Почему важно удалять старые черновики в WordPress
Черновики — это записи, которые ещё не опубликованы и зачастую не нуждаются в дальнейшем редактировании. Со временем их количество может значительно вырасти, что приводит к:
- Загромождению базы данных, что может снизить производительность сайта.
- Усложнению навигации в админ-панели, затрудняя поиск нужных записей.
- Потере контроля над актуальностью контента.
Автоматизация удаления удалит устаревшие черновики без вашего участия и поддержит чистоту в базе данных.
Использование WP-Cron для удаления старых черновиков
WP-Cron — это встроенный планировщик заданий в WordPress, который позволяет запускать функции по расписанию. Для удаления старых черновиков мы создадим кастомное задание, которое будет запускаться, например, ежедневно и удалять черновики старше определённого срока.
Создаём функцию удаления старых черновиков
Ниже пример функции, которая ищет черновики (post_status = 'draft'), созданные более 30 дней назад, и удаляет их:
function wpzoom_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_date < %s",
$date_threshold
));
if (!empty($drafts)) {
foreach ($drafts as $draft_id) {
wp_delete_post($draft_id, true); // true — принудительное удаление без перемещения в корзину
}
}
}
Функция использует прямой SQL-запрос к базе данных для выбора подходящих записей и функцию WordPress wp_delete_post для удаления.
Регистрация события в WP-Cron
Для запуска функции по расписанию нужно зарегистрировать событие. Добавим код в файл functions.php вашей темы или в кастомный плагин:
// Регистрируем ежедневное событие при активации темы/плагина
function wpzoom_activate_cron() {
if (!wp_next_scheduled('wpzoom_daily_delete_old_drafts')) {
wp_schedule_event(time(), 'daily', 'wpzoom_daily_delete_old_drafts');
}
}
add_action('wp', 'wpzoom_activate_cron');
// Хук для запуска нашей функции
add_action('wpzoom_daily_delete_old_drafts', 'wpzoom_delete_old_drafts');
// Очистка расписания при деактивации темы/плагина
function wpzoom_deactivate_cron() {
$timestamp = wp_next_scheduled('wpzoom_daily_delete_old_drafts');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpzoom_daily_delete_old_drafts');
}
}
Обратите внимание, что запуск WP-Cron зависит от посещений сайта, то есть событие сработает при первом посещении после времени запуска.
Настройка и тестирование
Чтобы проверить работоспособность, можно временно уменьшить значение $days до 0 или 1, чтобы сразу удалить все черновики старше одного дня. После тестов рекомендуем вернуть значение обратно.
Если хотите, чтобы удаление происходило чаще, можно добавить собственный интервал в расписание WP-Cron. Например, каждые 12 часов:
function wpzoom_custom_cron_intervals($schedules) {
$schedules['twicedaily'] = array(
'interval' => 12 * 60 * 60, // 12 часов в секундах
'display' => __('Каждые 12 часов')
);
return $schedules;
}
add_filter('cron_schedules', 'wpzoom_custom_cron_intervals');
И в wp_schedule_event вместо 'daily' укажите 'twicedaily'.
Альтернативы: плагины для автоматического удаления черновиков
Хотя мы рассмотрели, как делать это без плагинов, есть готовые решения, если хотите минимизировать ручной код:
- Clearfy Pro — плагин для оптимизации сайта, который может автоматически очищать черновики и мусор.
- WP-Optimize — популярный плагин для очистки базы данных, включая удаление старых черновиков.
Если у вас стоит задача комплексной оптимизации базы данных, лучше рассмотреть такие инструменты.
Заключение
Автоматизация удаления старых черновиков в WordPress помогает поддерживать порядок и улучшать производительность сайта. Использование WP-Cron и собственной функции — простой и эффективный способ решить эту задачу без установки дополнительных плагинов. Внимательно тестируйте код на тестовом сайте и не забывайте делать резервные копии базы данных перед внедрением подобных решений.