В процессе работы с WordPress накапливаются различные записи, ревизии, черновики и другие типы контента, которые со временем могут замедлять сайт и нагружать базу данных. Ручное удаление таких записей неудобно и требует постоянного контроля. В этой статье мы подробно разберём, как использовать встроенную систему WP-Cron для автоматизации удаления старых записей, что позволит поддерживать базу данных в чистоте и улучшить производительность сайта.
Что такое WP-Cron и зачем он нужен для автоматизации задач
WP-Cron — это имитация системного планировщика задач cron, встроенная в WordPress. Он запускает запланированные задачи (хук-обработчики) при загрузке сайта, если пришло время их выполнения. С его помощью можно автоматизировать множество рутинных процессов, включая очистку старых записей.
В отличие от системного cron, WP-Cron зависит от посещаемости сайта: задача запустится только при заходе пользователя. Для сайтов с низкой посещаемостью это может быть недостатком, но для большинства проектов этого достаточно.
Подготовка: определяем, какие записи нужно удалять автоматически
Перед тем как писать код, важно определить критерии удаления. Обычно это могут быть:
- Черновики, которые не обновлялись длительное время
- Старые ревизии записей
- Записи определённого кастомного типа, устаревшие по дате публикации
- Неопубликованные записи, забытые авторами
Для примера в этой статье мы создадим задачу, которая будет удалять черновики старше 30 дней.
Создание пользовательского хука для удаления старых черновиков
Для начала добавим функцию, которая будет искать и удалять черновики старше 30 дней. Поместите этот код в файл functions.php вашей темы или в отдельный плагин.
function wpmentor_delete_old_drafts() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
// Получаем ID черновиков старше 30 дней
$old_drafts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_date < %s",
$date_threshold
));
if (!empty($old_drafts)) {
foreach ($old_drafts as $post_id) {
// Удаляем запись без возможности восстановления
wp_delete_post($post_id, true);
}
}
}
Эта функция получает ID всех черновиков старше 30 дней и удаляет их.
Регистрация события WP-Cron и планирование задачи
Теперь нужно зарегистрировать событие, которое будет вызывать нашу функцию, и настроить расписание. Сначала добавим хук:
add_action('wpmentor_delete_old_drafts_hook', 'wpmentor_delete_old_drafts');
Далее запланируем запуск задачи раз в сутки. Добавьте следующий код, который проверяет, есть ли уже запланированное событие, и если нет — создаёт его:
function wpmentor_schedule_old_drafts_deletion() {
if (!wp_next_scheduled('wpmentor_delete_old_drafts_hook')) {
wp_schedule_event(time(), 'daily', 'wpmentor_delete_old_drafts_hook');
}
}
add_action('wp', 'wpmentor_schedule_old_drafts_deletion');
Этот код запускается при хук wp, проверяет наличие задачи и ставит её, если она отсутствует.
Как отменить задачу, если она больше не нужна
В некоторых случаях может понадобиться отключить автоматическое удаление. Для этого используйте функцию:
function wpmentor_clear_old_drafts_schedule() {
$timestamp = wp_next_scheduled('wpmentor_delete_old_drafts_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpmentor_delete_old_drafts_hook');
}
}
// Раскомментируйте для отмены расписания
// add_action('wp', 'wpmentor_clear_old_drafts_schedule');
Расширение: удаление ревизий и неопубликованных записей
По аналогии с удалением черновиков можно добавить обработку ревизий. Пример функции для удаления ревизий старше 60 дней:
function wpmentor_delete_old_revisions() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-60 days'));
$old_revisions = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_date < %s",
$date_threshold
));
if (!empty($old_revisions)) {
foreach ($old_revisions as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpmentor_delete_old_drafts_hook', 'wpmentor_delete_old_revisions');
Таким образом, одна задача WP-Cron будет очищать и черновики, и ревизии.
Использование плагина Clearfy Pro для автоматизации очистки
Если вы предпочитаете готовые решения с удобным интерфейсом, обратите внимание на плагин Clearfy Pro. Он позволяет автоматизировать удаление ревизий, черновиков, спама и других ненужных данных, а также оптимизировать базу данных без навыков программирования.
Практические рекомендации и безопасность
При автоматическом удалении данных важно учитывать следующие моменты:
- Всегда делайте резервное копирование базы данных перед настройкой автоматической очистки.
- Тестируйте функции на тестовом сайте, чтобы избежать случайного удаления важных данных.
- Настраивайте интервалы удаления в зависимости от активности сайта и объёма записей.
- Следите за логами и уведомлениями, чтобы контролировать работу автоматизации.
Таким образом, автоматизация удаления старых записей через WP-Cron — это эффективный способ поддерживать сайт WordPress в порядке, улучшать производительность и экономить время на рутинных задачах.