Ведение сайта на WordPress требует регулярного обновления контента. Иногда старые записи становятся неактуальными или мешают оптимизации сайта, и их лучше удалять автоматически по определённым правилам. В этой статье мы подробно рассмотрим, как добавить автоматическое удаление старого контента в WordPress с помощью кода и плагинов, а также разберёмся с различными сценариями использования.
Почему важно автоматизировать удаление старого контента в WordPress
На больших сайтах ручное удаление устаревших материалов может занимать много времени и приводить к ошибкам. Автоматизация помогает:
- Поддерживать актуальность сайта без лишних затрат времени.
- Оптимизировать базу данных, уменьшая размер и ускоряя запросы.
- Избегать показа пользователям устаревшей информации.
- Обеспечить соответствие политике компании или законодательным требованиям.
Использовать можно различные критерии для удаления: по дате публикации, по категории, по меткам, по статусу публикации или по кастомным полям.
Как автоматически удалять записи старше определённого срока: пример кода
Для автоматического удаления записей WordPress можно использовать встроенную систему Cron вместе с пользовательской функцией. Ниже пример кода, который удаляет публикации старше 180 дней.
function wpreboot_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '180 days ago'
)
),
'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 ) {
wp_delete_post( $post_id, true ); // true — жесткое удаление
}
}
}
// Регистрируем событие cron, если оно не запущено
if ( ! wp_next_scheduled( 'wpreboot_daily_old_post_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpreboot_daily_old_post_cleanup' );
}
add_action( 'wpreboot_daily_old_post_cleanup', 'wpreboot_delete_old_posts' );Этот код создает ежедневное задание, которое находит и удаляет все опубликованные записи старше 180 дней. Вы можете изменить параметр 'before' на любое значение, например, '90 days ago' или '1 year ago'.
Как использовать этот код:
- Добавьте его в файл
functions.phpвашей темы или в отдельный плагин. - Убедитесь, что WP Cron работает корректно на вашем хостинге.
- Проверьте, что у вас есть резервные копии базы данных — удаление жёсткое и необратимо.
Удаление старого контента по категории или метке
Иногда нужно удалять устаревшие записи не просто по дате, а по определённой категории или метке. Для этого расширим запрос:
function wpreboot_delete_old_category_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '90 days ago'
)
),
'category_name' => 'novosti', // замените на вашу категорию
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1
);
$old_posts = get_posts( $args );
foreach ( $old_posts as $post_id ) {
wp_delete_post( $post_id, true );
}
}
if ( ! wp_next_scheduled( 'wpreboot_daily_old_category_post_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpreboot_daily_old_category_post_cleanup' );
}
add_action( 'wpreboot_daily_old_category_post_cleanup', 'wpreboot_delete_old_category_posts' );Этот код удалит записи старше 90 дней только из категории «новости».
Использование плагинов для автоматизации удаления контента
Если вы предпочитаете готовые решения с удобным интерфейсом, обратите внимание на следующие плагины:
- Auto Delete Posts — позволяет настроить автоматическое удаление постов по дате, категории и другим параметрам.
- Clearfy Pro — комплексный плагин для оптимизации WordPress, в том числе с функциями очистки и удаления устаревшего контента.
- WPRemark — плагин для управления комментариями, но также может быть полезен для контроля активности и удаления старого контента.
Преимущество плагинов в том, что вы получаете настройки из админки и можете легко менять условия без правки кода.
Советы по безопасному удалению и резервному копированию
Удаление контента — серьёзная операция. Чтобы избежать потерь, придерживайтесь следующих рекомендаций:
- Всегда делайте резервные копии базы данных перед запуском автоматических удалений.
- Тестируйте код или плагин на тестовом сайте.
- Используйте мягкое удаление (
wp_trash_post()) перед жёстким удалением, чтобы можно было восстановить записи из корзины. - Логируйте действия удаления — это поможет отследить, что именно было удалено.
Расширенные сценарии удаления с WP-CLI
Если у вас есть доступ к командной строке сервера, можно использовать WP-CLI для пакетного удаления старого контента. Пример команды для удаления всех постов старше 1 года из категории "news":
wp post delete $(wp post list --post_type=post --category_name=news --date_query_column=post_date --before='1 year ago' --format=ids) --forceЭта команда сначала получает ID постов, подходящих под условие, а затем удаляет их жёстко. Это удобно для разовых операций или скриптов автоматизации.
Выводы
Автоматическое удаление старого контента в WordPress — незаменимый инструмент для поддержания сайта в актуальном состоянии и оптимизации работы. Вы можете реализовать его как с помощью простого PHP-кода и WP Cron, так и используя готовые плагины с расширенными настройками. Обязательно используйте резервное копирование и тестируйте решения перед применением на рабочем сайте.