wppartner.ru wordpress WP Partner

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

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

Зачем удалять старые записи по дате в WordPress

Ведение блога или новостного сайта подразумевает постоянное добавление контента. Однако не всегда старые записи остаются актуальными или полезными. Их удаление позволяет:

  • Оптимизировать базу данных и ускорить работу сайта;
  • Уменьшить нагрузку при создании резервных копий;
  • Облегчить навигацию для пользователей;
  • Сфокусироваться на актуальном контенте.

При этом важно настроить автоматизацию, чтобы не тратить время на ручное удаление старых материалов.

Способы автоматизации удаления записей

1. Использование WP-Cron для регулярного удаления

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

Пример функции, которая удаляет записи старше 365 дней:

function wppartner_delete_old_posts() {
    global $wpdb;
    $days = 365;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    $posts = get_posts([
        'date_query' => [
            ['before' => $date_threshold],
        ],
        'post_type' => 'post',
        'posts_per_page' => -1,
        'fields' => 'ids',
        'post_status' => 'publish',
    ]);
    if (!empty($posts)) {
        foreach ($posts as $post_id) {
            wp_delete_post($post_id, true); // true для полного удаления
        }
    }
}

// Регистрация крон-задачи
function wppartner_schedule_delete_old_posts() {
    if (!wp_next_scheduled('wppartner_delete_old_posts_hook')) {
        wp_schedule_event(time(), 'daily', 'wppartner_delete_old_posts_hook');
    }
}
add_action('wp', 'wppartner_schedule_delete_old_posts');
add_action('wppartner_delete_old_posts_hook', 'wppartner_delete_old_posts');

Этот код добавляем в functions.php вашей темы или в кастомный плагин. Он будет запускать функцию удаления старых записей ежедневно.

2. Использование WP-CLI для удаления через командную строку

WP-CLI позволяет управлять WordPress через терминал. Для удаления записей старше определённого времени используйте команду:

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

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

3. Плагины для автоматизации удаления старого контента

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

  • Auto Delete Posts — позволяет настроить автоматическое удаление записей по возрасту;
  • Post Expirator — не удаляет, а архивирует или меняет статус поста по истечении срока;
  • WP Bulk Delete — удобный плагин с возможностью массового удаления по различным фильтрам, включая дату.

Например, с помощью WP Bulk Delete можно создать расписание для удаления записей старше нужного срока без программирования.

Особенности и рекомендации

Как избежать случайного удаления важных данных

Перед автоматизацией важно удостовериться, что удаляемые записи действительно не нужны. Рекомендуется:

  • Создать резервную копию базы данных;
  • Исключить из удаления определённые категории или теги, если это необходимо;
  • Проверять логи удаления при помощи плагинов или самостоятельно.

В нашем коде можно добавить проверку по категориям, например:

function wppartner_delete_old_posts() {
    $days = 365;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    $posts = get_posts([
        'date_query' => [ ['before' => $date_threshold] ],
        'post_type' => 'post',
        'posts_per_page' => -1,
        'fields' => 'ids',
        'post_status' => 'publish',
        'category__not_in' => [1,2], // ID категорий, которые не удаляем
    ]);
    foreach ($posts as $post_id) {
        wp_delete_post($post_id, true);
    }
}

Как контролировать процесс удаления и логировать операции

Добавьте запись в лог перед удалением:

function wppartner_delete_old_posts() {
    $log_file = WP_CONTENT_DIR . '/delete_old_posts.log';
    $days = 365;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    $posts = get_posts([
        'date_query' => [ ['before' => $date_threshold] ],
        'post_type' => 'post',
        'posts_per_page' => -1,
        'fields' => 'ids',
        'post_status' => 'publish',
    ]);
    if (!empty($posts)) {
        foreach ($posts as $post_id) {
            $title = get_the_title($post_id);
            error_log("Удаление поста ID: $post_id, Заголовок: $title\n", 3, $log_file);
            wp_delete_post($post_id, true);
        }
    }
}

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

Интеграция с плагинами WPShop для расширения возможностей

Если на вашем сайте установлен WPRemark, можно дополнительно анализировать активность пользователей и автоматически удалять записи с низкой вовлечённостью, расширяя критерии очистки.

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

Заключение

Автоматизация удаления старых записей по дате — важный шаг для поддержания здоровья WordPress-сайта. Используйте WP-Cron для регулярных задач, WP-CLI для быстрой очистки через терминал и плагины для удобства и расширенных функций. Не забывайте про резервные копии и логи, чтобы избежать потерь.

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

×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙