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

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

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

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

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

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

Используем WP_Query для поиска записей по мета-полю с датой

Первый шаг — получить список записей, у которых дата в мета-поле меньше нужной. Предположим, что мета-поле называется wpin_event_date, и в нём хранится дата в формате YYYY-MM-DD.

Для выборки используем класс WP_Query с параметром meta_query:

$args = [
    'post_type' => 'post', // или ваш тип записи
    'meta_query' => [
        [
            'key' => 'wpin_event_date',
            'value' => '2023-01-01', // дата отсечки
            'compare' => '<',
            'type' => 'DATE',
        ]
    ],
    'posts_per_page' => -1,
    'fields' => 'ids', // чтобы получить только ID
];

$query = new WP_Query($args);
$old_post_ids = $query->posts;

Так мы получим ID всех записей с датой в мета-поле раньше 1 января 2023 года.

Удаление найденных записей через wp_delete_post

Теперь, когда у нас есть массив ID, можно пройтись по ним и удалить записи программно. Важно использовать функцию wp_delete_post с параметром $force_delete = true, если нужна полная физическая очистка без перемещения в корзину.

foreach ($old_post_ids as $post_id) {
    wpin_delete_old_records_wp_delete_post($post_id);
}

function wpin_delete_old_records_wp_delete_post($post_id) {
    wp_delete_post($post_id, true); // Удаляет запись без корзины
}

Такой подход безопасен, так как запускает все хуки и очищает связанные данные.

Автоматизация задачи с помощью WP-CLI и планировщика задач WordPress

Если необходимо регулярно удалять устаревшие записи, лучше автоматизировать процесс:

  • Создать WP-CLI команду, которая запускает удаление;
  • Добавить планировщик событий через wp_schedule_event, чтобы запускать её ежедневно или еженедельно;
  • Либо настроить cron на сервере для вызова WP-CLI команды.

Пример регистрации планировщика для удаления:

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

add_action('wpin_delete_old_records_cron', function() {
    $args = [
        'post_type' => 'post',
        'meta_query' => [
            [
                'key' => 'wpin_event_date',
                'value' => date('Y-m-d', strtotime('-1 year')),
                'compare' => '<',
                'type' => 'DATE',
            ],
        ],
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];

    $query = new WP_Query($args);
    foreach ($query->posts as $post_id) {
        wp_delete_post($post_id, true);
    }
});

Плагины для управления и удаления записей с условиями по мета-полям

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

  • Bulk Delete — позволяет создавать условия по мета-полям, дате, категориям и массово удалять записи;
  • WP Bulk Delete — похожий функционал с возможностью автоматизации;
  • Advanced Database Cleaner — помогает чистить базу, в том числе устаревшие записи и метаданные.

Минус плагинов — иногда сложнее настроить точные условия, а код даёт максимальную гибкость и контроль.

Особенности и предостережения при удалении записей по мета-дате

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

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

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

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

Удаление записей по дате в мета-поле — частая задача при работе с кастомными типами записей и метаданными. Использование WP_Query с мета-запросом и функция wp_delete_post дают полный контроль и надежность.

Автоматизация через WP-CLI и планировщик позволяет не забывать про чистку и поддерживать базу в порядке.

Если код кажется сложным — плагины Bulk Delete и аналоги помогут быстро решить задачу с минимальными усилиями.

Как удалить неиспользуемые таблицы в базе данных WordPress
01.12.2025
WooCommerce: как правильно настроить возвраты и обмены товаров
02.05.2026
Как установить разные версии PHP для сайтов на WordPress на одном сервере
11.12.2025
Как правильно использовать AJAX в WordPress для обновления контента без перезагрузки страницы
28.12.2025
WooCommerce: Обновление стоимости в корзине при изменении атрибутов товара
13.05.2026