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

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

Со временем на сайте накапливается большое количество устаревших или неактуальных записей, которые занимают место в базе данных и могут замедлять работу сайта. Особенно это актуально для образовательных сайтов с большим количеством курсов и материалов, как на wpfreecourses.ru. Регулярное удаление устаревших записей помогает поддерживать базу данных в оптимальном состоянии, снижать нагрузку на сервер и улучшать производительность.

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

Что такое WP-CLI и как его установить

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

Чтобы установить WP-CLI, нужно выполнить несколько простых шагов (пример для Linux-сервера):

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

После этого в терминале доступна команда wp. Проверьте, что WP-CLI работает, вызвав wp --info.

Как удалить старые записи по дате с помощью WP-CLI

Для удаления записей в WP-CLI используется команда wp post delete. Чтобы выбрать только старые записи, можно использовать параметры фильтрации, например, по дате публикации.

Пример: удалить все записи, опубликованные более двух лет назад:

wp post delete $(wp post list --post_type=post --date_query_column=post_date --before='2 years ago' --format=ids) --force
<

Здесь происходит следующее:

  • wp post list возвращает список ID постов типа post, опубликованных раньше чем два года назад;
  • --format=ids выводит только ID через пробел;
  • Полученные ID передаются в команду wp post delete, которая удаляет записи с опцией --force (без отправки в корзину).

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

wp post delete $(wp post list --post_type=course --date_query_column=post_date --before='3 years ago' --format=ids) --force

Автоматизация удаления с помощью cron

Чтобы не запускать команды вручную, можно настроить регулярное удаление через cron — планировщик задач в Linux. Создайте bash-скрипт delete-old-posts.sh с командой удаления:

#!/bin/bash
cd /path/to/wordpress
wp post delete $(wp post list --post_type=post --date_query_column=post_date --before='2 years ago' --format=ids) --force

Дайте права на выполнение:

chmod +x delete-old-posts.sh

Добавьте в cron задание, например, для ежемесячного запуска:

0 3 1 * * /path/to/delete-old-posts.sh

Это будет запускать скрипт в 3 часа ночи первого числа каждого месяца.

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

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

WP-CLI позволяет фильтровать записи по таксономиям, например, удалить старые записи из категории «Новости»:

wp post delete $(wp post list --post_type=post --category_name=news --date_query_column=post_date --before='1 year ago' --format=ids) --force

Это полезно, если вы хотите чистить контент только из определённых разделов.

Удаление записей с учетом пользовательских полей

Если записи имеют метаданные, например, статус курса, можно использовать WP-CLI с помощью дополнительных скриптов на PHP:

wp eval '
$args = array(
    "post_type" => "course",
    "meta_query" => array(
        array(
            "key" => "course_status",
            "value" => "archived",
        ),
    ),
    "fields" => "ids",
    "date_query" => array(
        array(
            "before" => "2 years ago",
        ),
    ),
);
$posts = get_posts($args);
if (!empty($posts)) {
    foreach ($posts as $post_id) {
        wp_delete_post($post_id, true);
    }
}'

Этот код удалит архивные курсы старше двух лет.

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

  • Перед удалением всегда делайте резервную копию базы данных.
  • Тестируйте команды на тестовом сайте, чтобы избежать потери нужного контента.
  • Используйте опцию --dry-run (при наличии в плагинах или скриптах) для проверки, какие записи будут удалены.
  • Для сайтов с большим количеством записей сначала удаляйте частями, чтобы избежать таймаутов.

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

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

  • Clearfy Pro — оптимизирует сайт и дает инструменты для удаления мусора.
  • WPRemark — помогает с модерацией и очисткой комментариев, что тоже важно для базы.

Однако для массового удаления записей по дате и кастомным критериям WP-CLI остается самым быстрым и гибким инструментом.

WooCommerce: автоматическое удаление неактивных заказов по расписанию с помощью WP-Cron
19.07.2026
WooCommerce: как автоматически изменять статус заказа при автоматическом возврате денег
04.06.2026
WooCommerce: автоматическое создание скидки при покупке N товаров без использования плагинов
11.05.2026
Как создать уникальные заголовки и мета описания в WordPress для улучшения SEO
15.04.2026
Как разрешить доступ к файлам в WordPress через .htaccess: практические решения
21.11.2025