Администрирование WordPress-сайта часто требует регулярной очистки устаревшего контента. Старые записи могут не только занимать место в базе данных, но и снижать актуальность и качество сайта. В этом материале рассмотрим, как автоматически удалять записи, которые были опубликованы до определённой даты, с помощью кода и плагинов, а также расскажем о тонкостях настройки.
Почему важно удалять старые записи в WordPress
Со временем на сайте накапливается большое количество публикаций, которые теряют актуальность. Это может привести к следующим проблемам:
- Увеличение размера базы данных, что замедляет работу сайта.
- Появление неактуального или устаревшего контента, который может вводить пользователей в заблуждение.
- Усложнение навигации и поиска нужной информации.
Удаление таких записей помогает поддерживать сайт в актуальном состоянии и оптимизировать его производительность.
Автоматизация удаления записей с помощью PHP-кода
Для автоматического удаления записей, опубликованных до заданной даты, можно использовать WP Cron — встроенный планировщик задач WordPress. Ниже приведён пример функции и её регистрации в расписании.
Пример функции для удаления старых записей
function wp1_delete_old_posts() {
$date_threshold = date('Y-m-d H:i:s', strtotime('-1 year')); // записи старше 1 года
$old_posts = get_posts(array(
'date_query' => array(
array(
'before' => $date_threshold,
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'numberposts' => -1,
'fields' => 'ids',
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удаление без корзины
}
}
}Эта функция получает все публикации старше года и удаляет их без помещения в корзину. Дату можно изменить под свои нужды, например, '-6 months' или конкретную дату.
Регистрация задачи в WP Cron
Чтобы функция запускалась автоматически, нужно создать событие cron и хук:
function wp1_schedule_old_post_deletion() {
if (!wp_next_scheduled('wp1_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wp1_delete_old_posts_hook');
}
}
add_action('wp', 'wp1_schedule_old_post_deletion');
add_action('wp1_delete_old_posts_hook', 'wp1_delete_old_posts');Этот код задаёт ежедневный запуск функции удаления. Убедитесь, что на сайте работает WP Cron (обычно это по умолчанию).
Дополнительные настройки и безопасность
Удаление записей — необратимая операция, поэтому стоит учитывать:
- Перед внедрением кода сделайте резервную копию базы данных.
- Если нужно сначала проверить, какие записи будут удалены, можно вывести их ID или заголовки вместо удаления.
- Можно добавить фильтрацию по категориям или меткам, чтобы удалять только определённые типы контента.
Пример расширения функции фильтрацией по категории с ID 5:
'category' => 5,Обзор плагинов для автоматического удаления старых записей
Если не хочется писать код, можно использовать плагины с похожим функционалом:
- Auto Delete Posts — позволяет настроить удаление записей по возрасту, статусу и категории через удобный интерфейс.
- WP Bulk Delete — мощный инструмент для массового удаления по множеству условий, включая дату публикации, таксономии, метаданные.
- Clearfy Pro — комплексный плагин для оптимизации и очистки WordPress, включая функции по удалению старого контента.
Все эти плагины имеют свои настройки и позволяют планировать регулярную очистку, не углубляясь в код.
Пример расширенного кода с логированием удалённых записей
Для контроля можно добавить логирование в файл, чтобы видеть, какие записи удаляются:
function wp1_delete_old_posts_with_log() {
$date_threshold = date('Y-m-d H:i:s', strtotime('-1 year'));
$old_posts = get_posts(array(
'date_query' => array(
array('before' => $date_threshold, 'inclusive' => true),
),
'post_type' => 'post',
'post_status' => 'publish',
'numberposts' => -1,
'fields' => 'ids',
));
if (!empty($old_posts)) {
$log_file = WP_CONTENT_DIR . '/old_posts_deleted.log';
foreach ($old_posts as $post_id) {
$title = get_the_title($post_id);
wp_delete_post($post_id, true);
error_log(date('[Y-m-d H:i:s]') . " Deleted post ID: $post_id, Title: $title\n", 3, $log_file);
}
}
}Лог будет записан в файл wp-content/old_posts_deleted.log, что удобно для аудита.
Советы по интеграции с WPRemark для отзывов
Если на вашем сайте используется плагин WPRemark для сбора отзывов, важно учитывать, что удаление записей удалит и связанные отзывы. В таких случаях стоит:
- Перед удалением проверять наличие отзывов и при необходимости переносить их или предупреждать администратора.
- Настроить фильтр в функции удаления, чтобы оставить записи с активными отзывами.
Это поможет сохранить важные данные и не потерять обратную связь.
Итог
Автоматическое удаление старого контента — важная задача для поддержания производительности и актуальности WordPress-сайта. Вы можете реализовать её с помощью собственного кода и WP Cron, либо воспользоваться готовыми плагинами, например, WP Bulk Delete или Clearfy Pro. Обязательно тестируйте решения на резервной копии и учитывайте особенности вашего сайта, например, связанные отзывы или другие данные.