Почему важно удалять старый контент в WordPress
Скопление устаревших или неактуальных постов и страниц влияет на производительность сайта и SEO. Кроме того, старый контент может создавать путаницу у пользователей и увеличивать размер базы данных, что замедляет загрузку сайта. Автоматизация удаления помогает систематически поддерживать сайт в актуальном состоянии без ручного труда.
Диагностика: как определить, какой контент подлежит удалению
Для начала нужно выявить контент, который давно не обновлялся или публиковался. Обычно удаляют посты старше определённого срока, например, более 2 лет, или с низкой посещаемостью.
- Используйте SQL-запрос для подсчёта старых записей:
SELECT ID, post_title, post_date FROM wp_posts WHERE post_type = 'post' AND post_date < NOW() - INTERVAL 2 YEAR AND post_status = 'publish';- С помощью плагина Query Monitor можно отследить, какие запросы к базе данных занимают много времени, чтобы не нагружать сайт лишней выборкой.
Практический чек-лист диагностики
- Определите критерии старости контента (дата публикации, отсутствие обновлений).
- Проверьте трафик на страницы с помощью Google Analytics или Matomo.
- Сделайте резервную копию базы данных перед удалением.
- Оцените необходимость хранения контента для SEO или архивных целей.
Пошаговое решение: автоматизация удаления старых постов через WP-CLI и Cron
Для удаления по расписанию используем WP-CLI и стандартный cron Linux, либо WP-Cron в WordPress.
1. Создаём PHP-функцию для удаления старых постов
function hueman_delete_old_posts() {
global $wpdb;
$date_limit = date('Y-m-d H:i:s', strtotime('-2 years'));
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s",
$date_limit
));
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удалять без корзины
}
}2. Создаем WP-CLI команду
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('hueman delete_old_posts', function() {
hueman_delete_old_posts();
WP_CLI::success('Старые посты удалены');
});
}3. Добавляем задание в системный cron (пример для Linux)
# Открыть crontab
crontab -e
# Добавить задачу на еженедельный запуск в понедельник в 3:00
0 3 * * 1 /usr/bin/wp hueman delete_old_posts --path=/var/www/html/wordpress >> /var/log/wp_delete_old_posts.log 2>&14. Альтернативный метод: WP-Cron с хуком
add_action('hueman_delete_old_posts_event', 'hueman_delete_old_posts');
if (!wp_next_scheduled('hueman_delete_old_posts_event')) {
wp_schedule_event(time(), 'weekly', 'hueman_delete_old_posts_event');
}Добавьте этот код в functions.php темы или в собственный плагин.
Проверка результата после внедрения
- Запустите WP-CLI команду вручную:
wp hueman delete_old_postsи убедитесь в отсутствии ошибок. - Проверьте в админке WordPress, что посты старше 2 лет удалены.
- Просмотрите логи задачи cron для подтверждения выполнения.
- Проверьте размер базы данных до и после удаления, уменьшение значит, что удаление сработало.
Частые ошибки при автоматическом удалении контента и их исправление
- Удаление не того контента: Неправильный SQL-запрос или логика функции. Проверьте критерии выборки, используйте безопасный
wp_delete_post(). - Пропуск заданий cron: Системный cron не настроен или WP-Cron отключен. Проверьте статус cron через
crontab -lи включите WP-Cron, если используете его. - Потеря данных без резервной копии: Всегда делайте бэкап базы перед массовым удалением.
- Проблемы с правами доступа: Убедитесь, что пользователь, под которым запускается cron, имеет нужные права для выполнения WP-CLI и доступа к файлам.
Практические советы по безопасности и производительности
- Удаление большого количества постов за один запуск может вызвать таймауты. Разбейте удаление на батчи по 50-100 записей.
- Используйте транзакции базы данных, если вы пишете сложные SQL-запросы.
- Отключайте WP-Cron и используйте системный cron для стабильности на больших сайтах.
- Логируйте все операции удаления с указанием даты и количества удалённых постов.
- Перед удалением проверяйте ссылки на удаляемый контент, чтобы избежать 404 ошибок на сайте.
Сравнение методов автоматизации удаления старого контента
| Метод | Плюсы | Минусы | Пример использования |
|---|---|---|---|
| WP-CLI + системный cron | Высокая производительность, надежность, не зависит от трафика | Требует доступа к серверу и знания командной строки | Скрипт для удаления и cron-задание |
| WP-Cron с хуками | Простота настройки, не требует сервера | Зависит от посещаемости сайта, менее надежен | Код в functions.php с wp_schedule_event |
| Плагины для очистки контента | Удобный интерфейс, дополнительные фильтры | Нагрузка на сайт, ограниченная гибкость | Плагины типа WP Bulk Delete |