WordPress: как автоматически удалять старые записи через мета-данные

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

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

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

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

Однако стоит подходить к удалению с осторожностью, чтобы не потерять важные данные и не повредить SEO.

Использование мета-данных для хранения даты удаления

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

Например, при создании или редактировании записи можно добавить мета-ключ wp_puzzle_expiry_date с датой в формате YYYY-MM-DD. Эта дата будет служить триггером для удаления.

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

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

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wp_puzzle_delete_expired_posts() {
    $today = date('Y-m-d');
    
    $args = array(
        'post_type'      => 'post',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => 'wp_puzzle_expiry_date',
                'value'   => $today,
                'compare' => '<=',
                'type'    => 'DATE'
            ),
        ),
        'fields' => 'ids',
        'post_status' => 'publish',
    );

    $expired_posts = get_posts($args);

    if (!empty($expired_posts)) {
        foreach ($expired_posts as $post_id) {
            wp_delete_post($post_id, true); // true — без возможности восстановления
        }
    }
}

// Запускаем функцию раз в сутки через wp-cron
if (!wp_next_scheduled('wp_puzzle_daily_expired_posts_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wp_puzzle_daily_expired_posts_cleanup');
}
add_action('wp_puzzle_daily_expired_posts_cleanup', 'wp_puzzle_delete_expired_posts');

Данный код:

  • Ищет записи с мета-полем wp_puzzle_expiry_date, дата которого меньше или равна сегодняшнему дню;
  • Удаляет такие записи без возможности восстановления (параметр true в wp_delete_post);
  • Использует wp-cron для запуска проверки ежедневно.

Как добавить поле даты истечения срока в редактор записи

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

function wp_puzzle_add_expiry_date_metabox() {
    add_meta_box(
        'wp_puzzle_expiry_date',
        'Дата удаления записи',
        'wp_puzzle_expiry_date_metabox_callback',
        'post',
        'side'
    );
}
add_action('add_meta_boxes', 'wp_puzzle_add_expiry_date_metabox');

function wp_puzzle_expiry_date_metabox_callback($post) {
    $value = get_post_meta($post->ID, 'wp_puzzle_expiry_date', true);
    echo '<label for="wp_puzzle_expiry_date_field">Выберите дату:</label>';
    echo '<input type="date" id="wp_puzzle_expiry_date_field" name="wp_puzzle_expiry_date_field" value="' . esc_attr($value) . '" />';
    wp_nonce_field('wp_puzzle_expiry_date_save', 'wp_puzzle_expiry_date_nonce');
}

function wp_puzzle_save_expiry_date_meta($post_id) {
    if (!isset($_POST['wp_puzzle_expiry_date_nonce']) || !wp_verify_nonce($_POST['wp_puzzle_expiry_date_nonce'], 'wp_puzzle_expiry_date_save')) {
        return;
    }
    if (array_key_exists('wp_puzzle_expiry_date_field', $_POST)) {
        update_post_meta($post_id, 'wp_puzzle_expiry_date', sanitize_text_field($_POST['wp_puzzle_expiry_date_field']));
    }
}
add_action('save_post', 'wp_puzzle_save_expiry_date_meta');

Теперь при редактировании записи в боковой панели появится поле для выбора даты удаления.

Практические советы и рекомендации

  • Перед включением автоматического удаления рекомендуем создать резервную копию базы данных.
  • Если нужно временно отключить удаление, можно закомментировать или удалить регистрацию wp-cron задачи.
  • Для других типов записей (кастомные post types) измените параметр post_type в запросе.
  • При необходимости можно вместо удаления помечать записи как черновик или изменять их статус с помощью wp_update_post.

Плагины для автоматического удаления и управления контентом

Если вы предпочитаете готовые инструменты, обратите внимание на следующие плагины:

  • Auto Post Delete — позволяет удалять записи по дате создания или кастомным мета-данным.
  • WP Bulk Delete — мощный инструмент для массового удаления записей по различным критериям, включая дату и мета-поля.
  • Clearfy Pro — многофункциональный плагин для оптимизации WordPress, в том числе с возможностями автоматической очистки.

Заключение

Автоматическое удаление старых записей по мета-данным — отличный способ держать сайт в порядке и ускорить его работу. Использование кастомного поля для указания даты удаления обеспечивает гибкость и контроль. Приведённый пример кода легко адаптируется под любые типы записей и задачи. А при необходимости можно дополнить функционал удобным интерфейсом и готовыми плагинами.

Если хотите более подробно разобраться с оптимизацией и автоматизацией WordPress, рекомендуем изучить продукты на WPShop.ru.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WordPress: решение проблемы с блокировкой сервисных роботов через robots.txt
24.01.2026
WordPress: как автоматически отключать неиспользуемые плагины для оптимизации сайта
07.03.2026
WooCommerce: как настроить авторизацию пользователей через Telegram-бота с помощью webhook
28.04.2026
Как отключить Emoji в WordPress для ускорения сайта
17.01.2026
Как использовать метаданные для улучшения поиска в WordPress
21.12.2025
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее