В процессе эксплуатации сайта на WordPress накапливаются посты, которые уже не нужны: черновики, устаревшие статьи, тестовые записи и прочее. Их большое количество замедляет работу сайта и увеличивает размер базы данных. В этой статье мы рассмотрим, как автоматизировать процесс удаления таких постов, используя как готовые плагины, так и собственные решения на PHP.
Почему важно удалять неиспользуемые посты в WordPress
Неиспользуемые посты — это не только лишняя информация, мешающая навигации, но и потенциальный источник нагрузки на базу данных. Чем больше записей, тем дольше выполняются запросы, тем медленнее работает сайт. Кроме того, часто такие записи не проходят SEO-оптимизацию и могут снижать общий рейтинг сайта.
Удаление старых и неактуальных постов помогает:
- Уменьшить размер базы данных.
- Ускорить работу сайта и админки.
- Упростить управление контентом.
- Повысить качество и актуальность информации.
Как определить, какие посты можно удалить
Автоматизировать удаление без предварительной фильтрации опасно, поэтому задайте критерии выбора:
- Посты в статусе
черновикстарше 30 дней. - Посты со статусом
в ожидании(pending review), которые не обновлялись более 60 дней. - Посты, не имеющие комментариев и просмотров за последние 6 месяцев.
- Записи с определённой меткой, например
deprecatedилиtest.
При желании можно комбинировать эти условия для более точного отбора.
Использование плагинов для автоматического удаления постов
Если вы хотите обойтись без программирования, обратите внимание на следующие плагины:
1. Auto Delete Posts
Позволяет настроить автоматическую очистку постов по статусам и дате. Есть возможность исключить записи по категориям или меткам.
Установка и настройка:
- Установите плагин через админку WordPress.
- Перейдите в настройки плагина.
- Выберите условия удаления — статус, возраст, категории.
- Запустите тестовое удаление или настройте расписание.
2. WP Bulk Delete
Этот плагин позволяет массово удалять записи по множеству критериев с удобным интерфейсом и поддержкой расписаний.
Особенности:
- Удаление по типу записи, статусу, категории и меткам.
- Удаление по дате создания, последнему обновлению.
- Поддержка удаления комментариев, пользователей и метаданных.
Автоматизация удаления с помощью PHP-кода
Для контроля и кастомизации процесса можно реализовать собственный код, который будет запускаться по крону WordPress или вручную.
Пример функции для удаления старых черновиков
function wpcoding_delete_old_drafts() {
global $wpdb;
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$query = $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = %s AND post_type = %s AND post_modified < %s",
'draft', 'post', $date_threshold
);
$post_ids = $wpdb->get_col($query);
foreach ($post_ids as $post_id) {
wp_delete_post($post_id, true); // true — полное удаление без перемещения в корзину
}
}
// Запускаем функцию по крону
if (!wp_next_scheduled('wpcoding_cron_delete_old_drafts')) {
wp_schedule_event(time(), 'daily', 'wpcoding_cron_delete_old_drafts');
}
add_action('wpcoding_cron_delete_old_drafts', 'wpcoding_delete_old_drafts');Данная функция удаляет черновики, которые не обновлялись более 30 дней. Вы можете изменить параметры, чтобы фильтровать по другим статусам и типам записей.
Расширение функции с учетом меток и просмотров
Для более сложной логики можно добавить проверку меток и просмотров, используя кастомные поля и таксономии.
function wpcoding_delete_unused_posts() {
$days = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'column' => 'post_modified',
'before' => $date_threshold,
],
],
'meta_query' => [
[
'key' => 'post_views_count',
'value' => 0,
'compare' => '=',
'type' => 'NUMERIC',
],
],
'tax_query' => [
[
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => ['deprecated', 'test'],
'operator' => 'IN',
],
],
'posts_per_page' => -1,
'fields' => 'ids',
];
$query = new WP_Query($args);
if ($query->have_posts()) {
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpcoding_cron_delete_unused_posts', 'wpcoding_delete_unused_posts');
if (!wp_next_scheduled('wpcoding_cron_delete_unused_posts')) {
wp_schedule_event(time(), 'weekly', 'wpcoding_cron_delete_unused_posts');
}В этом примере удаляются опубликованные посты со специальными метками и нулевым количеством просмотров, которые не обновлялись более 6 месяцев.
Рекомендации по безопасности и бэкапу
Перед настройкой автоматического удаления обязательно сделайте резервную копию базы данных. Любая ошибка в фильтрах может привести к потере нужного контента.
Также рекомендуется запускать удаление сначала в тестовом режиме, например, выводить список постов, которые будут удалены, без фактического удаления. Для этого замените wp_delete_post($post_id, true); на error_log('Удаляется пост ID: ' . $post_id); и проверьте логи.
Итоги
Автоматизация удаления неиспользуемых постов — важный этап оптимизации и поддержания чистоты сайта. Используйте плагины для быстрого старта или пишите собственные функции под конкретные задачи. Не забывайте про бэкапы и тестирование, чтобы избежать потерь данных.
Если хотите расширить функциональность и управлять импортом и оптимизацией контента, обратите внимание на решения от WPSHOP.RU, которые помогут автоматизировать многие процессы в WordPress.