При работе с большими сайтами на 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,
];Такой подход позволит гибко настраивать условия удаления и поддерживать порядок в базе данных.