В процессе эксплуатации сайта на WordPress со временем накапливаются устаревшие записи и посты, которые уже не актуальны и только засоряют базу данных. В этой статье мы подробно разберём, как автоматически удалять старые записи по дате публикации, чтобы поддерживать сайт в чистоте и улучшать производительность.
Почему важно удалять старые записи в WordPress
Накопление большого количества устаревшего контента негативно влияет на несколько аспектов работы сайта:
- Увеличение объёма базы данных, что замедляет запросы и работу сервера.
- Падение удобства навигации и ухудшение пользовательского опыта.
- Риск проблем с индексацией в поисковых системах из-за неактуального контента.
Регулярное удаление старых записей позволяет решить эти проблемы и поддерживать сайт в оптимальном состоянии.
Настройка автоматического удаления записей по дате с помощью кода
Для автоматического удаления записей, старше определённого срока, можно использовать WP-Cron — встроенную систему планировщика задач в WordPress. Ниже показан пример кода, который удаляет записи старше 365 дней из категории "Новости".
Пример функции для удаления старых записей
function wpweb_delete_old_posts() {
$days = 365; // количество дней, после которых записи считаются устаревшими
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'date_query' => array(
array(
'before' => $date_threshold,
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'category_name' => 'novosti', // замените на нужную категорию или уберите для всех записей
'fields' => 'ids',
'posts_per_page' => -1
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true — принудительное удаление без перемещения в корзину
}
}
}
Этот код можно добавить в файл functions.php вашей темы или создать отдельный плагин.
Регистрация задачи WP-Cron для регулярного запуска
Чтобы функция запускалась автоматически, зарегистрируем событие WP-Cron:
function wpweb_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpweb_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wpweb_delete_old_posts_hook');
}
}
add_action('wp', 'wpweb_schedule_old_posts_deletion');
add_action('wpweb_delete_old_posts_hook', 'wpweb_delete_old_posts');
Этот код планирует ежедневный запуск функции удаления старых записей.
Особенности и рекомендации при автоматическом удалении
Важно учитывать несколько нюансов:
- Перед автоматическим удалением создайте резервную копию базы данных, чтобы избежать потери важных данных.
- Если не хотите полностью удалять записи, можно вместо
wp_delete_postиспользовать изменение статуса на черновик или архив. - Подстраивайте параметры фильтрации (категории, типы записей) под свои нужды, чтобы не случайно удалить полезный контент.
- Для больших сайтов с тысячами записей можно реализовать удаление порциями, чтобы избежать превышения лимита времени выполнения скрипта.
Использование плагинов для автоматического удаления записей
Если вы не хотите писать код, можно использовать готовые плагины с расширенными настройками:
- Auto Post Scheduler — позволяет автоматически удалять или изменять статус старых записей по расписанию.
- Delete Expired Transients — хотя предназначен для удаления устаревших временных данных, иногда полезен в связке с очисткой сайта.
- Clearfy Pro — многофункциональный плагин для оптимизации сайта, включая очистку базы данных от устаревших данных и записей.
Использование плагинов облегчает настройку и контроль процесса удаления, но всегда проверяйте их совместимость с вашей версией WordPress и другими плагинами.
Как расширить функционал: удаление записей по пользовательским условиям
Иногда нужна более тонкая фильтрация. Например, удалять записи старше определённого срока, но только если у них нет комментариев или просмотров.
Пример расширения функции для проверки количества комментариев:
function wpweb_delete_old_posts_with_no_comments() {
$days = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'date_query' => array(
array(
'before' => $date_threshold,
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
if (get_comments_number($post_id) == 0) {
wp_delete_post($post_id, true);
}
}
}
}
Такой подход позволяет сохранить записи, которые продолжают заинтересовывать аудиторию, и удалить действительно устаревший и неактивный контент.
Выводы и лучшие практики
Автоматическое удаление старых записей — отличный способ поддерживать сайт чистым, быстрым и удобным для пользователей. Настраивайте автоматизацию с учётом особенностей вашего контента и не забывайте о резервных копиях.
Если хотите комплексное решение, обратите внимание на Clearfy Pro, который поможет не только с удалением, но и с оптимизацией базы данных и безопасности.