В процессе ведения блога или сайта на WordPress со временем накапливается большое количество устаревших записей, которые могут занимать место в базе данных и замедлять работу сайта. В этой статье рассмотрим, как настроить автоматическое удаление старых записей через задачу Cron — это позволит поддерживать базу в актуальном состоянии без вашего участия.
Что такое WP Cron и зачем нужен автоматический удалитель записей
WP Cron — это встроенный планировщик задач WordPress, который позволяет запускать функции по расписанию. Автоматическое удаление старых записей помогает:
- Сократить размер базы данных.
- Улучшить производительность сайта.
- Поддерживать актуальность контента.
Особенно полезно для новостных сайтов или блогов, где старый контент быстро теряет ценность.
Создаем функцию для удаления старых записей
Для начала напишем функцию, которая будет удалять записи, старше определенного количества дней. Например, удалим записи старше 180 дней.
function wpbloger_delete_old_posts() {
global $wpdb;
$days = 180; // количество дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$old_posts = $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($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // принудительно удаляем без перемещения в корзину
}
}
}Данная функция ищет опубликованные записи старше 180 дней и удаляет их безвозвратно.
Регистрация Cron задачи для запуска функции
Теперь нужно добавить задачу в WP Cron, чтобы функция запускалась, например, раз в сутки. Для этого добавим следующие хуки в файл functions.php вашей темы или в отдельный плагин:
function wpbloger_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpbloger_delete_old_posts_event')) {
wp_schedule_event(time(), 'daily', 'wpbloger_delete_old_posts_event');
}
}
add_action('wp', 'wpbloger_schedule_old_posts_deletion');
add_action('wpbloger_delete_old_posts_event', 'wpbloger_delete_old_posts');Объяснение:
wpbloger_schedule_old_posts_deletion— проверяет, есть ли уже запланированная задача, и если нет, создаёт новую с интерваломdaily.- Событие
wpbloger_delete_old_posts_event— привязано к функции удаленияwpbloger_delete_old_posts.
Как проверить и удалить Cron задачу при необходимости
Если потребуется отменить автозадачу (например, для отладки), используйте код:
function wpbloger_clear_old_posts_deletion_schedule() {
$timestamp = wp_next_scheduled('wpbloger_delete_old_posts_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpbloger_delete_old_posts_event');
}
}Вызовите wpbloger_clear_old_posts_deletion_schedule() один раз, чтобы удалить задачу. После этого можно удалить или изменить функцию.
Дополнительные советы и плагины для управления автоматическим удалением
Если вы не хотите писать код, можно использовать плагины с подобной функциональностью:
- Auto Delete Posts — позволяет настроить автоматическое удаление постов по возрасту.
- Expired Post — плагин для управления сроком жизни публикаций.
Среди платных решений обратите внимание на Clearfy Pro, который включает расширенные инструменты оптимизации и очистки базы.
Резюме и рекомендации по безопасности
Автоматическое удаление старых записей через Cron — эффективный способ поддерживать сайт в порядке. Однако:
- Обязательно делайте резервные копии перед внедрением таких функций.
- Проверяйте работу функции на тестовом сайте, чтобы избежать случайной потери ценных данных.
- Для больших сайтов стоит оптимизировать запросы и учитывать нагрузку на сервер.
Внедрив описанный механизм, вы сможете поддерживать базу данных WordPress в актуальном и оптимизированном состоянии без лишних затрат времени.