В процессе ведения сайта на WordPress иногда возникает необходимость автоматически удалять устаревшие записи — например, новости, акции или временные материалы, которые больше не актуальны. В этой статье подробно разберём, как организовать автоматическое удаление записей по дате через WP-Cron, чтобы не забивать базу данных и поддерживать сайт в актуальном состоянии.
Почему стоит использовать автоматическое удаление старых записей в WordPress
Ручное удаление устаревших материалов может быть неудобным и трудоёмким, особенно если таких записей много. Кроме того, со временем накопление большого количества неактуального контента может замедлять работу сайта и усложнять администрирование.
Автоматизация этого процесса через WP-Cron позволяет:
- Экономить время на рутинных задачах;
- Поддерживать базу данных в оптимальном состоянии;
- Избежать ошибок при ручном удалении;
- Гибко управлять условиями удаления.
Как работает WP-Cron и почему он подходит для автоматизации
WP-Cron — это встроенная система планировщика задач в WordPress. Она имитирует системный cron, вызывая запланированные действия при посещении сайта.
Для автоматического удаления записей мы создадим собственное событие, которое будет запускаться раз в сутки и удалять все записи старше определённого срока.
Пример кода для автоматического удаления записей старше 30 дней
Добавьте следующий код в файл functions.php вашей темы или лучше в отдельный плагин:
function wpcat_schedule_delete_old_posts() {
if ( ! wp_next_scheduled( 'wpcat_delete_old_posts_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpcat_delete_old_posts_hook' );
}
}
add_action( 'wp', 'wpcat_schedule_delete_old_posts' );
function wpcat_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => date( 'Y-m-d', strtotime( '-30 days' ) ),
),
),
'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 — безвозвратное удаление
}
}
}
add_action( 'wpcat_delete_old_posts_hook', 'wpcat_delete_old_posts' );Этот код делает следующее:
- При загрузке сайта проверяет, запланировано ли событие
wpcat_delete_old_posts_hook. Если нет — назначает его с интерваломdaily(раз в сутки). - По событию запускается функция
wpcat_delete_old_posts, которая находит все записи старше 30 дней и удаляет их безвозвратно.
Настройка интервалов запуска и типов записей
Если нужно изменить период очистки, например, удалять записи старше 60 дней, достаточно поправить строку с датой:
'before' => date( 'Y-m-d', strtotime( '-60 days' ) ),Чтобы работать не только со стандартным типом post, а, например, с пользовательским типом event, измените параметр post_type:
'post_type' => 'event',Также можно добавить несколько типов одновременно, передав массив:
'post_type' => array( 'post', 'event' ),Предупреждение и создание резервных копий
Автоматическое удаление — операция необратимая, поэтому настоятельно рекомендуется:
- Перед внедрением кода протестировать его на тестовом сайте;
- Регулярно делать резервные копии сайта и базы данных;
- При необходимости в коде изменить параметр
wp_delete_postнаfalseдля перемещения в корзину вместо полного удаления:
wp_delete_post( $post_id, false ); // переместить в корзинуРасширение функционала с помощью плагинов
Если не хочется писать код, можно использовать плагины для управления задачами WP-Cron и автоматизацией. Например, плагин Clearfy Pro позволяет настраивать множество параметров оптимизации, включая управление cron-задачами и очистку базы данных.
Другой вариант — плагин WPRemark, который помогает управлять контентом и может быть полезен при работе с большим количеством записей.
Заключение
Автоматическое удаление старых записей — важный инструмент для поддержания порядка на сайте и оптимизации производительности. С помощью WP-Cron и простого кода можно легко настроить эту задачу под свои нужды, а при необходимости расширить возможности с помощью специализированных плагинов.