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

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

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

С течением времени на сайте накапливаются записи, которые уже не актуальны или не нужны пользователям. Ручная очистка — трудоемкий процесс, который легко забыть. Автоматизация позволяет:

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

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

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

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

Код функции и шорткода

function wpstart_delete_old_posts_shortcode($atts) {
    // Проверка прав: только администраторы могут запускать удаление
    if (!current_user_can('manage_options')) {
        return '<p>У вас нет прав для выполнения этой операции.</p>';
    }

    // Получаем параметры шорткода
    $atts = shortcode_atts(array(
        'days' => 30,
        'post_type' => 'post'
    ), $atts, 'wpstart_delete_old_posts');

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

    if ($days <= 0) {
        return '<p>Параметр days должен быть положительным числом.</p>';
    }

    global $wpdb;

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

    // Получаем ID записей для удаления
    $posts_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND post_date < %s AND post_status IN ('publish', 'draft', 'pending')",
        $post_type, $date_threshold
    ));

    if (empty($posts_to_delete)) {
        return "<p>Нет записей старше {$days} дней для удаления.</p>";
    }

    $deleted_count = 0;
    foreach ($posts_to_delete as $post_id) {
        // Безопасное удаление с обходом мусорной корзины
        if (wp_delete_post($post_id, true)) {
            $deleted_count++;
        }
    }

    return "<p>Удалено записей: {$deleted_count}.</p>";
}
add_shortcode('wpstart_delete_old_posts', 'wpstart_delete_old_posts_shortcode');

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

Безопасность и ограничения использования шорткода

Поскольку удаление контента — критичная операция, важно ограничить доступ к шорткоду:

  • Проверяем, что пользователь имеет права администратора.
  • Не используем этот шорткод в публичных постах или страницах, доступных всем.
  • Рекомендуется запускать шорткод на страницах в админ-панели или защищенных паролем.

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

Примеры расширения функционала

Добавление логирования удаления

Чтобы отслеживать, какие записи удаляются, можно добавить запись в лог файл или в отдельную таблицу базы данных. Например, простой лог в файл:

function wpstart_log_deleted_post($post_id) {
    $log_file = WP_CONTENT_DIR . '/wpstart_deleted_posts.log';
    $post_title = get_the_title($post_id);
    $date = date('Y-m-d H:i:s');
    $entry = "{$date} - Удалена запись #{$post_id} - {$post_title}\n";
    file_put_contents($log_file, $entry, FILE_APPEND);
}

// В цикле удаления добавляем вызов:
if (wp_delete_post($post_id, true)) {
    wpstart_log_deleted_post($post_id);
    $deleted_count++;
}

Удаление по кастомному полю

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

// В SQL добавить условие:
// AND meta_key = 'wpstart_expired' AND meta_value = '1'

// Для этого используем WP_Query с meta_query:

Или можно модифицировать запрос, но для простоты лучше делать отдельную функцию с WP_Query и циклом удаления.

Полезные плагины для автоматизации и очистки базы данных

Для управления устаревшим контентом и оптимизации базы данных можно использовать плагины:

  • Clearfy Pro — оптимизация и очистка базы данных, удаление мусора.
  • WPRemark — управление мета-данными и чистка базы.
  • ABC Pagination — удобная пагинация при работе с большим объемом записей.

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

Итоговые рекомендации по использованию шорткода

Перед применением шорткода на рабочем сайте обязательно:

  • Создайте резервную копию базы данных.
  • Тестируйте шорткод на локальной копии или тестовом сервере.
  • Проверяйте права доступа и безопасность.
  • Следите за логами и результатами удаления.

Так вы сохраните контроль над процессом и избежите потери важных данных.

Автоматическое удаление неактивных пользователей WordPress
08.02.2026
Как установить ограничения на загрузку файлов в WordPress
15.04.2026
Как создать автоматическую резервную копию WordPress с помощью плагинов и собственного кода
20.11.2025
Как запретить доступ к страницам в WordPress по IP адресу
12.03.2026
Как добавить автоматическое удаление старых записей через шорткод в WordPress
04.03.2026