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

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

Зачем использовать PHP CLI для удаления записей WordPress

PHP CLI — это командная строка для запуска PHP-скриптов. В WordPress она позволяет выполнять задачи без загрузки веб-интерфейса, что значительно экономит ресурсы и ускоряет выполнение. Автоматизация через PHP CLI позволяет запускать скрипты по расписанию (через cron), что удобно для регулярного удаления записей.

Основные преимущества:

  • Высокая производительность без нагрузки на веб-сервер
  • Возможность тонкой настройки условий удаления
  • Безопасное выполнение вне веб-сессии пользователя

Пример скрипта для удаления записей старше определённой даты

Ниже приведён пример PHP-скрипта для удаления записей типа post, опубликованных более 180 дней назад. Скрипт можно запускать через консоль.

<?php
// wp-delete-old-posts-cli.php

// Подключаем загрузчик WordPress
require_once '/путь/к/wordpress/wp-load.php';

// Количество дней для удаления
$days = 180;

// Формируем дату
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

// Получаем ID записей для удаления
$args = [
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'date_query'     => [
        [
            'column' => 'post_date',
            'before' => $date_threshold,
        ],
    ],
    'fields'         => 'ids',
    'posts_per_page' => -1,
];

$old_posts = get_posts($args);

if(empty($old_posts)) {
    echo "Нет записей для удаления.\n";
    exit;
}

foreach($old_posts as $post_id) {
    $deleted = wp_delete_post($post_id, true); // true для безвозвратного удаления
    if($deleted) {
        echo "Удалена запись с ID: {$post_id}\n";
    } else {
        echo "Ошибка при удалении записи с ID: {$post_id}\n";
    }
}

Скрипт можно сохранить в корне сайта или в отдельной папке и запускать в терминале командой:

php wp-delete-old-posts-cli.php

Как настроить автоматический запуск с помощью cron

Для регулярного удаления старых записей удобно настроить cron-задачу. Например, чтобы запускать скрипт каждый день в 3 часа ночи, добавьте в crontab:

0 3 * * * /usr/bin/php /путь/к/вашему/скрипту/wp-delete-old-posts-cli.php >> /var/log/wp-delete-old-posts.log 2>&1

Обратите внимание, что путь к PHP и скрипту должен быть абсолютным. Логи помогут отслеживать процесс удаления и возможные ошибки.

Рекомендации по безопасности и оптимизации

При работе с удалением записей важно соблюдать осторожность:

  • Всегда делайте резервные копии базы данных перед массовым удалением.
  • Тестируйте скрипт на локальной копии сайта или на тестовом сервере.
  • Если нужно удалить записи определённого кастомного типа, измените параметр post_type в запросе.
  • Для снижения нагрузки можно удалить записи порциями, например, по 50 штук за запуск, используя параметры posts_per_page и пагинацию.

Использование плагинов для автоматизации удаления

Если вы предпочитаете готовые решения, можно использовать плагины с поддержкой WP CLI и cron, например:

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

Однако использование собственного скрипта даёт больше контроля и гибкости под специфические задачи.

Расширение функционала: удаление по метаданным и кастомным таксономиям

Иногда нужно удалять записи не только по дате, но и по определённым метаданным или таксономиям. В таком случае запрос можно дополнить параметрами:

$args = [
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'date_query'     => [
        [
            'column' => 'post_date',
            'before' => $date_threshold,
        ],
    ],
    'meta_query'     => [
        [
            'key'     => 'custom_meta_key',
            'value'   => 'some_value',
            'compare' => '=',
        ],
    ],
    'tax_query'      => [
        [
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => ['news', 'events'],
        ],
    ],
    'fields'         => 'ids',
    'posts_per_page' => -1,
];

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

Как добавить автоматическое удаление спама в комментариях WordPress
15.03.2026
Как отключить AJAX пагинацию в WordPress: практические решения
07.12.2025
WooCommerce: как изменить цену товара без повышения суммы платежа при изменении заказа
29.04.2026
Как изменить метод AJAX обработки формы на REST API в WordPress
30.03.2026
Как изменить AJAX обработку формы в WordPress на REST API
13.02.2026