Ведение сайта на WordPress часто требует периодической очистки контента — например, удаления устаревших записей, которые уже не актуальны или занимают лишнее место в базе данных. В этой статье мы рассмотрим, как автоматизировать удаление старых постов в WordPress по разным критериям: по дате публикации, категории, пользовательским метаданным и статусу. Ниже вы найдете примеры как с использованием популярных плагинов, так и с помощью собственного кода.
Почему важно автоматизировать удаление старых постов
Ручное удаление постов — трудоемкий и рискованный процесс, особенно на крупных сайтах. Автоматизация позволяет:
- Сэкономить время на рутинных задачах;
- Поддерживать актуальность и качество контента;
- Уменьшить нагрузку на базу данных;
- Избежать накопления мусорных или устаревших записей.
Автоматизация помогает системно управлять контентом, например, удалять записи старше определенного срока, которые помечены определенной меткой или принадлежат к устаревшей категории.
Использование плагинов для автоматического удаления постов
Существует несколько плагинов, которые позволяют настроить автоматическое удаление постов по расписанию и условиям. Рассмотрим два популярных решения.
Плагин WP Auto Delete Posts
WP Auto Delete Posts — простой и гибкий плагин для удаления постов по времени жизни. Он позволяет указать срок хранения записи и настроить удаление по типу поста и статусу.
Преимущества:
- Удаление по дате публикации (например, старше 30 дней);
- Фильтрация по типу и статусу постов;
- Работа по cron-заданиям.
Настройка плагина интуитивна и не требует навыков программирования.
Плагин Advanced Post Manager
Этот плагин позволяет создавать собственные правила для массового управления постами, включая удаление по множеству параметров: категории, автор, дата, метки, пользовательские поля.
Для настройки достаточно задать необходимые фильтры и запустить задачу удаления.
Пример автоматического удаления старых постов с помощью собственного кода
Если вы хотите более гибко контролировать процесс, можно написать собственный код, который будет запускаться по расписанию (wp_cron) и удалять посты по заданным критериям.
Регистрация cron задачи
function wpmeta_cron_activation() {
if (!wp_next_scheduled('wpmeta_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wpmeta_delete_old_posts_hook');
}
}
register_activation_hook(__FILE__, 'wpmeta_cron_activation');
function wpmeta_cron_deactivation() {
wp_clear_scheduled_hook('wpmeta_delete_old_posts_hook');
}
register_deactivation_hook(__FILE__, 'wpmeta_cron_deactivation');
Этот код регистрирует ежедневное событие для удаления постов.
Функция удаления постов по условию
function wpmeta_delete_old_posts() {
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'before' => '30 days ago',
],
],
'posts_per_page' => -1,
'fields' => 'ids',
];
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удаление без корзины
}
}
add_action('wpmeta_delete_old_posts_hook', 'wpmeta_delete_old_posts');
Этот код удалит все опубликованные записи старше 30 дней без помещения их в корзину.
Добавление фильтра по категории и пользовательскому метаполю
Если нужно удалять только посты из определенной категории и с заданным метаполем, добавьте параметры:
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'before' => '30 days ago',
],
],
'category_name' => 'news', // категория 'news'
'meta_query' => [
[
'key' => '_wpmeta_delete_flag',
'value' => '1',
'compare' => '=',
],
],
'posts_per_page' => -1,
'fields' => 'ids',
];
Так вы удалите только записи категории news, которые имеют пользовательское поле _wpmeta_delete_flag со значением 1.
Практические советы по автоматизации удаления постов
При автоматическом удалении важно соблюдать осторожность, чтобы не потерять нужный контент. Вот несколько рекомендаций:
- Обязательно делайте резервные копии базы данных перед настройкой автоматического удаления.
- Тестируйте код или плагин на тестовом сайте, чтобы убедиться, что удаляются только нужные записи.
- Используйте параметр
wp_delete_post($post_id, false), чтобы сначала переместить посты в корзину и иметь возможность восстановить. - Ведите журнал удалений для контроля и аудита.
- Если хотите, можно дополнительно отправлять уведомления администратору о выполнении удаления.
Интеграция с плагином Clearfy Pro для оптимизации
Плагин Clearfy Pro предлагает инструменты для оптимизации и автоматизации WordPress, включая управление метаданными и очистку базы. Его функции можно использовать в связке с собственными скриптами для более эффективного удаления и оптимизации.
Выводы
Автоматизация удаления старых постов позволяет поддерживать сайт в актуальном состоянии и снижать нагрузку на сервер. Вы можете использовать готовые плагины, например WP Auto Delete Posts, или написать собственные решения с гибкими условиями удаления. Главное — тщательно тестировать и резервировать данные перед внедрением.