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

В WordPress часто возникает задача очистки базы данных от устаревших записей — будь то посты, кастомные записи или любые другие типы записей. Если у вас есть регулярно обновляемый контент, но устаревшие записи уже не нужны, их можно автоматически удалять, чтобы не засорять базу и не снижать производительность.

Почему стоит использовать шорткод для удаления старых записей

Автоматизация процессов в WordPress — залог удобства и экономии времени. Обычно удаление старых записей происходит вручную через админ-панель, что неудобно при большом объеме контента. Использование шорткода позволяет запускать удаление по запросу, например, при посещении определенной страницы, или интегрировать процесс в другие участки сайта.

Кроме того, шорткод можно ограничить по правам пользователей, чтобы не допустить случайного удаления важных данных.

Основные преимущества решения через шорткод

  • Гибкость — можно вызывать удаление в нужное время;
  • Контроль — можно фильтровать записи по дате, типу и другим параметрам;
  • Безопасность — можно ограничить запуск шорткода только администраторам;
  • Простота интеграции — вставляете шорткод в любую страницу или запись.

Создаем шорткод для автоматического удаления записей старше N дней

Рассмотрим пример создания шорткода [wpdevelop_delete_old_posts days=30 post_type=post], который удаляет записи указанного типа, старше заданного количества дней. По умолчанию будет удалять записи типа post, старше 30 дней.

function wpdevelop_delete_old_posts_shortcode($atts) {
    // Разрешаем запуск только администраторам
    if (!current_user_can('manage_options')) {
        return 'У вас нет прав для удаления записей.';
    }

    // Получаем атрибуты с дефолтами
    $atts = shortcode_atts(
        array(
            'days' => 30,
            'post_type' => 'post',
        ),
        $atts,
        'wpdevelop_delete_old_posts'
    );

    $days = intval($atts['days']);
    $post_type = sanitize_text_field($atts['post_type']);

    if ($days <= 0) {
        return 'Параметр days должен быть больше 0.';
    }

    // Дата, старше которой нужно удалить записи
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    // Получаем записи для удаления
    $args = array(
        'post_type' => $post_type,
        'post_status' => 'any',
        'date_query' => array(
            array(
                'before' => $date_threshold,
                'inclusive' => true,
            ),
        ),
        'fields' => 'ids', // Получаем только ID для оптимизации
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

    if (empty($old_posts)) {
        return 'Старые записи для удаления не найдены.';
    }

    $deleted_count = 0;

    foreach ($old_posts as $post_id) {
        // Удаляем запись без помещения в корзину
        if (wp_delete_post($post_id, true)) {
            $deleted_count++;
        }
    }

    return "Удалено записей: " . $deleted_count;
}
add_shortcode('wpdevelop_delete_old_posts', 'wpdevelop_delete_old_posts_shortcode');

Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин.

Как использовать шорткод

Вставьте в любую страницу или запись такой шорткод:

[wpdevelop_delete_old_posts days=60 post_type=custom_post]

Он удалит все записи типа custom_post, которые старше 60 дней.

Как сделать процесс безопаснее и удобнее

Ограничение доступа

В нашем примере запуск доступен только администраторам — это важно, чтобы избежать случайных удалений. Если у вас есть своя роль с правами управления записями, можно расширить проверку.

Логирование удалений

Для контроля полезно вести лог удаленных записей. Можно добавить запись в файл или в отдельный пользовательский тип записи.

Автоматизация по расписанию

Если нужно удалять записи регулярно, лучше использовать WP-Cron и запускать функцию удаления по расписанию. В этом случае шорткод можно использовать для разового ручного запуска или отладки.

Пример интеграции с плагином Clearfy Pro для оптимизации базы

Плагин Clearfy Pro позволяет оптимизировать базу WordPress, включая удаление ревизий, спам-комментариев и автосохранений. Наш шорткод дополняет эти возможности, давая точечный контроль над удалением старых записей по типу и дате.

Альтернатива: использование WP-CLI для удаления старых записей

Если у вас есть доступ к командной строке сервера, можно использовать WP-CLI для удаления записей. Команда:

wp post delete $(wp post list --post_type=post --date_query_column=post_date --before='30 days ago' --format=ids) --force

Удалит все записи типа post, старше 30 дней. Это быстрый и безопасный способ при наличии SSH-доступа.

Выводы и рекомендации

Удаление старых записей — важная часть поддержания производительности и чистоты базы данных WordPress. Использование шорткода с контролем доступа — удобный вариант для сайтов без доступа к серверу или командной строке. Для более сложных задач рекомендуется комбинировать ручной запуск с автоматизированным удалением через WP-Cron.

Автоматическая регистрация пользователей в WordPress: как настроить и автоматизировать процесс
02.12.2025
Как создать динамический виджет WordPress с поддержкой AJAX
27.12.2025
Как создать виджет очистки кеша Redis в WordPress
29.01.2026
Как создать автоматический сбор отзывов в WordPress
16.02.2026
Как правильно отключить Gutenberg для отдельных типов записей в WordPress
03.05.2026