wpcat.ru wordpress WPCat.ru

Автоматическое удаление старых записей в WordPress через Cron

В процессе ведения сайта на 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 и простого кода можно легко настроить эту задачу под свои нужды, а при необходимости расширить возможности с помощью специализированных плагинов.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙