Зачем нужна автоматизация удаления постов старше 30 дней
Ведение блога или новостного сайта часто сопровождается накоплением большого количества контента, который со временем становится неактуальным или нерелевантным. Ручное удаление таких материалов отнимает много времени и сил. Автоматизация процесса позволяет поддерживать сайт в актуальном состоянии, улучшать производительность и оптимизировать базу данных.
Автоматическое удаление постов старше 30 дней особенно актуально для сайтов с временно значимой информацией: акции, новости, события, обзоры. Это помогает избежать накопления устаревшего контента и улучшить пользовательский опыт.
Варианты решения задачи: плагины и код
Существует несколько способов реализовать удаление постов старше 30 дней. Рассмотрим как готовые плагины, так и примеры кастомного кода для WordPress.
Использование плагина WP Cleaner
Плагин WP Cleaner позволяет настроить автоматическое удаление контента по заданным критериям, включая возраст постов.
- Настройте правило удаления для постов старше 30 дней
- Выберите типы записей (например, post или custom post type)
- Установите периодичность запуска задачи
Этот плагин прост в использовании и подходит для большинства проектов без необходимости программирования.
Использование плагина Clearfy Pro для автоматизации
В Clearfy Pro есть модуль для автоматизации и оптимизации, который можно настроить для удаления устаревших постов. Это комплексное решение, если вы уже используете Clearfy для оптимизации сайта.
Кастомное решение на PHP с wp-cron
Если вы хотите больше контроля и минимизировать количество плагинов, можно реализовать удаление через wp-cron и собственный код. Ниже пример функции, удаляющей посты старше 30 дней и запускающейся ежедневно.
function wpshab_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true для полного удаления, без корзины
}
}
}
// Регистрация ежедневного события
if (!wp_next_scheduled('wpshab_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpshab_daily_delete_old_posts');
}
add_action('wpshab_daily_delete_old_posts', 'wpshab_delete_old_posts');Этот скрипт можно добавить в functions.php вашей темы или в отдельный плагин. Он запускает ежедневную проверку и удаляет все опубликованные посты старше 30 дней.
Дополнительные настройки и нюансы
Перед внедрением автоматического удаления рекомендуем:
- Создать резервную копию базы данных — на случай ошибочного удаления
- Проверить, что удаление не затрагивает важный контент
- Если используете кастомные типы записей, добавить их в параметры функции
- Убедиться, что wp-cron работает корректно на вашем хостинге
Можно дополнить функцию фильтрацией по категориям или меткам, чтобы исключить определённые записи из удаления. Например, добавить параметр 'category__not_in' или 'tax_query'.
Пример расширенной функции с исключением категории
function wpshab_delete_old_posts_exclude_category() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'post_type' => 'post',
'post_status' => 'publish',
'category__not_in' => array(10), // ID категории, которую не удаляем
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpshab_daily_delete_old_posts', 'wpshab_delete_old_posts_exclude_category');Как проверить и отладить работу скрипта
Чтобы убедиться, что автоматическое удаление работает корректно, можно добавить логирование в функцию:
function wpshab_delete_old_posts_with_log() {
$args = array(
'date_query' => array(
array('before' => '30 days ago'),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
$result = wp_delete_post($post_id, true);
if ($result) {
error_log("wpshab: Удалён пост ID: " . $post_id);
} else {
error_log("wpshab: Ошибка при удалении поста ID: " . $post_id);
}
}
} else {
error_log("wpshab: Нет постов для удаления");
}
}Логи можно просматривать в файле error.log сервера или через плагин для просмотра логов.
Заключение по теме
Автоматизация удаления старых постов в WordPress через 30 дней — это простой и эффективный способ поддерживать сайт в актуальном состоянии и освобождать ресурсы сервера. Выбор метода зависит от ваших навыков и предпочтений: плагин для быстрого решения или кастомный код для гибкой настройки.
Для тех, кто хочет комплексно оптимизировать сайт, рекомендую обратить внимание на Clearfy Pro — в нём есть инструменты для автоматизации рутинных задач и поддержания сайта в чистоте.