Почему важно удалять неиспользуемые посты в WordPress
В процессе ведения сайта на WordPress часто накапливаются посты, которые больше не актуальны или были созданы для тестирования, но так и не были опубликованы или использованы. Такие записи занимают место в базе данных, замедляют работу админки и могут усложнять SEO-оптимизацию сайта. Регулярное удаление неиспользуемых постов помогает поддерживать сайт в чистоте и улучшать производительность.
При больших объемах контента ручное удаление становится непрактичным, поэтому целесообразно автоматизировать этот процесс. В этой статье рассмотрим, как автоматически находить и удалять неиспользуемые посты, а также полезные плагины и пример собственного кода для решения задачи.
Определение неиспользуемых постов: критерии и подходы
Перед удалением важно четко определить, какие записи считать неиспользуемыми. Вот распространённые критерии:
- Черновики — записи, которые не были опубликованы.
- Записи с определённым статусом — например, «ожидающие проверки» или «авто-сохранения».
- Посты без просмотров или комментариев за длительный период, что может свидетельствовать о низкой ценности.
- Посты без категорий или тегов, которые не интегрированы в структуру сайта.
Чаще всего достаточно удалить старые черновики и авто-сохранения, поскольку они не нужны для сайта.
Плагины для автоматического удаления неиспользуемых постов
1. WP Helper Auto Cleanup
Этот бесплатный плагин (условное название) позволяет автоматически удалять черновики и авто-сохранения по расписанию. Он интегрируется с WP-Cron и легко настраивается через админку.
Основные возможности:
- Выбор типов постов для удаления.
- Настройка возраста постов для удаления (например, старше 30 дней).
- Журнал удалённых постов с возможностью восстановления.
Скачать и настроить можно на странице WP Helper Auto Cleanup.
2. Clearfy Pro
Clearfy Pro — многофункциональный плагин для оптимизации WordPress, в котором есть модуль автоматического удаления мусорных записей, включая черновики и авто-сохранения. В дополнение к этому Clearfy умеет чистить транзиенты, ревизии и оптимизировать базу данных.
Это удобное решение, если вы хотите комплексно ухаживать за сайтом.
Подробнее на Clearfy Pro.
Пример кода: автоматическое удаление черновиков старше 30 дней
Для тех, кто предпочитает решение без плагинов, можно добавить в файл functions.php темы или создать мини-плагин следующий код:
function wphelper_delete_old_drafts() {
global $wpdb;
$days = 30; // Возраст черновиков для удаления в днях
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$drafts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_status = 'draft' AND post_date < %s",
$date
));
if (!empty($drafts)) {
foreach ($drafts as $post_id) {
wp_delete_post($post_id, true); // true — удалить без перемещения в корзину
}
}
}
// Запускаем функцию ежедневно через WP-Cron
if (!wp_next_scheduled('wphelper_daily_delete_old_drafts')) {
wp_schedule_event(time(), 'daily', 'wphelper_daily_delete_old_drafts');
}
add_action('wphelper_daily_delete_old_drafts', 'wphelper_delete_old_drafts');Этот код находит все черновики старше 30 дней и удаляет их безвозвратно. Запуск происходит ежедневно через системный планировщик WordPress — WP-Cron.
Как проверить работу
Для теста можно временно изменить период на пару минут назад и вручную запустить событие с помощью плагина WP Crontrol или аналогичных инструментов. Это позволит убедиться, что удаление происходит корректно.
Расширенные методы: удаление постов по кастомным условиям
Если нужно более тонко контролировать удаление, например, удалять посты без комментариев и просмотров, можно использовать мета-запросы и дополнительные проверки.
Пример расширенного запроса с использованием WP_Query:
function wphelper_delete_unused_posts() {
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'column' => 'post_date',
'before' => '60 days ago',
],
],
'meta_query' => [
[
'key' => 'post_views_count',
'value' => 10,
'compare' => '<=',
'type' => 'NUMERIC',
],
],
'fields' => 'ids',
'posts_per_page' => -1,
];
$query = new WP_Query($args);
if ($query->have_posts()) {
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}В этом примере удаляются опубликованные посты старше 60 дней с количеством просмотров менее или равным 10, что указывает на низкую активность.
Для подсчёта просмотров можно использовать плагины вроде WP-PostViews или реализовать собственный счётчик через мета-поля.
Рекомендации и предосторожности при автоматическом удалении
Удаление постов — необратимый процесс, особенно при удалении без перемещения в корзину. Рекомендуется:
- Перед запуском автоматического удаления сделать полный бэкап базы данных.
- Тестировать скрипт на тестовом сайте или с ограниченным числом записей.
- Настраивать условия удаления максимально чётко, чтобы избежать потери важного контента.
- Периодически проверять логи и уведомления о работе скриптов.
Для удобства можно добавить уведомления на почту или в админку о количестве удалённых записей за период.
Заключение
Автоматическое удаление неиспользуемых постов в WordPress — важный шаг к поддержанию быстродействия и чистоты сайта. Используйте готовые плагины, такие как WP Helper Auto Cleanup и Clearfy Pro, или создавайте собственные решения на PHP для гибкого управления контентом.
Обязательно учитывайте специфику вашего сайта и правила работы с данными, чтобы не потерять важную информацию.