wpcompany.ru wordpress WPCompany

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

В процессе ведения сайта на WordPress часто возникает необходимость регулярно удалять устаревшие записи — например, новости, акции или события, которые потеряли актуальность. Ручное удаление подобных записей неудобно и занимает много времени, особенно если их много. В этой статье мы рассмотрим, как автоматизировать процесс удаления старых записей, используя как готовые плагины, так и собственные решения на PHP с использованием cron и WP-Cron.

Зачем нужна автоматизация удаления устаревших записей в WordPress

Удаление неактуального контента помогает поддерживать сайт в порядке, улучшает производительность базы данных и повышает релевантность для посетителей и поисковых систем. Если на вашем сайте есть типы записей с ограниченным сроком жизни (например, объявления, события, акции), то автоматизация процесса удаления позволит:

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

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

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

Основные возможности Clearfy Pro для автоматизации:

  • Удаление записей по дате создания или последнего обновления;
  • Автоматическое удаление черновиков и мусорных записей;
  • Настройка периодичности удаления через WP-Cron;
  • Поддержка кастомных типов записей и таксономий.

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

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

Для более гибкого контроля можно написать собственный код, который будет удалять записи старше определенного количества дней. Такой код добавляется в файл functions.php вашей темы или в отдельный плагин.

Создаем функцию для удаления записей по дате

Пример функции для удаления записей постов, которым больше 30 дней:

function wpcompany_remove_old_posts() {
    $days_old = 30; // количество дней, после которых записи удаляются
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date_threshold,
                'inclusive' => true,
            ),
        ),
        '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 - удалить без отправки в корзину
        }
    }
}

Добавляем задачу в WP-Cron

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

function wpcompany_schedule_old_posts_removal() {
    if (!wp_next_scheduled('wpcompany_remove_old_posts_hook')) {
        wp_schedule_event(time(), 'daily', 'wpcompany_remove_old_posts_hook');
    }
}
add_action('wp', 'wpcompany_schedule_old_posts_removal');

add_action('wpcompany_remove_old_posts_hook', 'wpcompany_remove_old_posts');

Этот код настроит ежедневный запуск функции удаления устаревших записей.

Удаление записей кастомного типа

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

function wpcompany_remove_old_events() {
    $today = date('Y-m-d');

    $args = array(
        'post_type'      => 'events',
        'post_status'    => 'publish',
        'meta_query'     => array(
            array(
                'key'     => 'event_date', // кастомное поле с датой события
                'value'   => $today,
                'compare' => '<',
                'type'    => 'DATE',
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_events = get_posts($args);

    if (!empty($old_events)) {
        foreach ($old_events as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}

И аналогично добавить вызов в WP-Cron.

Отладка и безопасность автоматического удаления

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

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

function wpcompany_remove_old_posts_with_log() {
    $days_old = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date_threshold,
                'inclusive' => true,
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            $title = get_the_title($post_id);
            wp_delete_post($post_id, true);
            error_log('WPCompany: Deleted old post ID ' . $post_id . ' Title: ' . $title);
        }
    }
}

Логи можно просматривать в файле debug.log при включенном WP_DEBUG_LOG.

Выводы

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

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее