В WordPress с течением времени накапливается множество устаревших записей, которые могут замедлять работу сайта и занимать лишнее место в базе данных. В этой статье мы рассмотрим, как настроить автоматическое удаление старых записей с помощью Cron задач WordPress и собственного кода. Это поможет поддерживать базу данных в чистоте без ручного вмешательства.
Почему важно автоматически удалять старые записи
Удаление устаревших записей — важная часть оптимизации сайта. Например, если у вас есть записи с временным контентом (акции, события, временные обзоры), они могут потерять актуальность и только загромождать базу. Ручное удаление таких записей неудобно и занимает много времени.
К тому же, большое количество неактуальных записей влияет на скорость выполнения запросов к базе данных, что ухудшает производительность сайта и может негативно сказаться на SEO.
Автоматизация процесса избавит вас от постоянного контроля и позволит экономить ресурсы сервера.
Создание функции для удаления старых записей
Для начала нам нужна функция, которая будет находить и удалять записи старше определенного периода. Например, удалим все записи старше 180 дней.
function wpbit_delete_old_posts() {
global $wpdb;
$days = 180; // Количество дней, старше которых записи будут удалены
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID записей, которые нужно удалить
$post_ids = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_date < %s AND post_status = 'publish' AND post_type = 'post'",
$date_threshold
));
if (!empty($post_ids)) {
foreach ($post_ids as $post_id) {
wp_delete_post($post_id, true); // true - удалить без перемещения в корзину
}
}
}Функция wpbit_delete_old_posts подключается напрямую к базе через $wpdb для выборки всех опубликованных записей (тип post), которые старше 180 дней. Затем каждую запись удаляет без перемещения в корзину.
Настройка Cron задачи для регулярного запуска
Чтобы функция выполнялась автоматически, нужно зарегистрировать Cron событие. WordPress по умолчанию запускает задачи при посещении сайта, что достаточно для большинства случаев.
// Регистрация собственного интервала, если нужно запускать не раз в час
add_filter('cron_schedules', function($schedules) {
if (!isset($schedules['twicedaily'])) {
$schedules['twicedaily'] = [
'interval' => 12 * 60 * 60, // 12 часов
'display' => __('Два раза в день')
];
}
return $schedules;
});
// Планируем событие при активации темы или плагина
function wpbit_schedule_old_posts_cleanup() {
if (!wp_next_scheduled('wpbit_cron_delete_old_posts')) {
wp_schedule_event(time(), 'twicedaily', 'wpbit_cron_delete_old_posts');
}
}
add_action('wp', 'wpbit_schedule_old_posts_cleanup');
// Привязываем функцию к Cron событию
add_action('wpbit_cron_delete_old_posts', 'wpbit_delete_old_posts');Здесь мы добавили новый интервал «twicedaily» — запуск дважды в день. При активации темы или плагина планируется событие, которое дважды в день вызывает функцию удаления.
Как проверить и отладить работу Cron задачи
Чтобы убедиться, что Cron задача работает, можно добавить логирование в файл:
function wpbit_delete_old_posts() {
global $wpdb;
$days = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$post_ids = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_date < %s AND post_status = 'publish' AND post_type = 'post'",
$date_threshold
));
if (!empty($post_ids)) {
foreach ($post_ids as $post_id) {
wp_delete_post($post_id, true);
}
error_log('WPBIT: Deleted ' . count($post_ids) . ' old posts at ' . current_time('mysql'));
} else {
error_log('WPBIT: No old posts to delete at ' . current_time('mysql'));
}
}Логи можно смотреть через wp-content/debug.log, если включен WP_DEBUG и WP_DEBUG_LOG.
Использование плагинов для управления Cron задачами
Если вы не хотите писать код, есть плагины для управления Cron задачами и автоматизацией:
- WP Crontrol — позволяет просматривать, редактировать и запускать задачи Cron прямо из админки.
- Advanced Cron Manager — расширенный менеджер задач cron, с возможностью создавать и настраивать задачи.
С помощью этих плагинов можно добавить свою задачу и подключить функцию удаления старых записей без программирования.
Альтернативный вариант: плагин Clearfy Pro для очистки базы
Плагин Clearfy Pro предлагает удобные инструменты для оптимизации базы данных, включая удаление ревизий, авто-черновиков и устаревших записей. Если вы хотите более комплексное решение без кода, Clearfy Pro будет отличным выбором.
Резюме и полезные рекомендации
Автоматическое удаление старых записей помогает поддерживать производительность сайта и экономит ресурсы. Главное — правильно настроить период удаления и убедиться, что не удаляются важные данные.
Перед внедрением кода всегда делайте резервную копию базы данных, чтобы избежать потери информации.
Если вы используете кастомные типы записей, не забудьте дополнить запросы для их учета.