Ведение сайта на WordPress со временем приводит к накоплению большого количества устаревших записей, страниц и ревизий, которые не только загромождают базу данных, но и могут негативно влиять на производительность и SEO. В этой статье рассмотрим, как автоматизировать удаление старого контента в WordPress, используя практические методы и примеры кода.
Почему важно удалять старый контент
Старый контент, который уже не актуален или не приносит трафик, может:
- Загромождать базу данных и увеличивать время отклика сайта;
- Снижать качество SEO из-за большого количества неактуальных страниц;
- Увеличивать нагрузку на сервер и усложнять администрирование;
- Создавать путаницу для посетителей и редакторов сайта.
Автоматизация удаления помогает поддерживать сайт в чистоте без необходимости ручного мониторинга.
Как определить, какой контент удалить
Перед автоматизацией важно определить критерии удаления. Обычно к старому контенту относятся:
- Записи старше определённого времени (например, 1-2 года);
- Черновики и авто-сохранения без активности;
- Неопубликованные записи, не обновлявшиеся долгое время;
- Ревизии, которые занимают место в базе;
- Комментарии со статусом «спам» или «ожидающие» давно;
- Пользователи, неактивные длительное время, если это применимо.
В зависимости от вашей ситуации, критерии могут варьироваться.
Автоматическое удаление старых записей по дате
Для удаления записей старше, например, 365 дней, можно использовать wp_cron и функцию, которая будет регулярно запускаться и удалять такие записи.
Создание функции удаления старого контента
function wplock_delete_old_posts() {
global $wpdb;
$days = 365; // Количество дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID постов, старше порога
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_date < %s AND post_status='publish' AND post_type='post'",
$date_threshold
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удаление без возможности восстановления
}
}
}
Функция wplock_delete_old_posts() удаляет все опубликованные записи старше 365 дней без возможности восстановления.
Регистрация периодического задания через wp_cron
function wplock_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wplock_daily_old_posts_deletion')) {
wp_schedule_event(time(), 'daily', 'wplock_daily_old_posts_deletion');
}
}
add_action('wp', 'wplock_schedule_old_posts_deletion');
add_action('wplock_daily_old_posts_deletion', 'wplock_delete_old_posts');
Этот код создаёт ежедневное задание, которое будет запускать функцию удаления старых постов.
Удаление старых ревизий для оптимизации базы данных
Ревизии записей тоже со временем накапливаются и могут занимать много места.
Функция для удаления ревизий старше определённого срока
function wplock_delete_old_revisions() {
global $wpdb;
$days = 90; // Удалять ревизии старше 90 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$old_revisions = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type='revision' AND post_date < %s",
$date_threshold
));
if (!empty($old_revisions)) {
foreach ($old_revisions as $revision_id) {
wp_delete_post($revision_id, true);
}
}
}
add_action('wp_scheduled_delete', 'wplock_delete_old_revisions');
Подключение к хуку wp_scheduled_delete позволяет запускать очистку ревизий вместе с другими системными задачами WordPress.
Использование плагина Clearfy Pro для управления контентом и очисткой
Если вы предпочитаете готовые решения, рекомендуем обратить внимание на Clearfy Pro. Этот плагин позволяет:
- Автоматически удалять ревизии и автосохраниния;
- Оптимизировать базу данных;
- Управлять устаревшим контентом и отключать ненужные функции WordPress для ускорения сайта;
- Настраивать периодичность и условия очистки через удобный интерфейс.
Clearfy Pro может значительно упростить задачу автоматического удаления старого контента.
Автоматическое удаление старых черновиков и неопубликованных постов
Черновики и неопубликованные записи долгое время могут занимать место и создавать беспорядок.
Пример функции для удаления черновиков старше 30 дней
function wplock_delete_old_drafts() {
global $wpdb;
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$old_drafts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_status='draft' AND post_date < %s",
$date_threshold
));
if (!empty($old_drafts)) {
foreach ($old_drafts as $draft_id) {
wp_delete_post($draft_id, true);
}
}
}
add_action('wp_scheduled_delete', 'wplock_delete_old_drafts');
Подключение к wp_scheduled_delete гарантирует регулярное выполнение задачи.
Удаление старых комментариев и спама с помощью WPRemark
Комментарии со спамом или неактивные комментарии также могут накапливаться. Плагин WPRemark позволяет эффективно управлять комментариями и автоматизировать очистку спама и старых комментариев.
Пример кода для удаления комментариев старше 180 дней
function wplock_delete_old_comments() {
global $wpdb;
$days = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$old_comments = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM $wpdb->comments WHERE comment_date < %s",
$date_threshold
));
if (!empty($old_comments)) {
foreach ($old_comments as $comment_id) {
wp_delete_comment($comment_id, true);
}
}
}
add_action('wp_scheduled_delete', 'wplock_delete_old_comments');
Такой подход помогает поддерживать базу комментариев в порядке.
Как контролировать и тестировать автоматическое удаление
Важно протестировать все функции на тестовом сайте, прежде чем запускать на боевом. Вот рекомендации:
- Добавьте логирование в функции, чтобы отслеживать удалённые записи;
- Запускайте функции вручную для проверки корректности;
- Создайте резервную копию базы данных перед активацией автоматизации;
- Используйте плагин WPRollback или подобные для отката изменений.
Пример логирования удаления:
function wplock_delete_old_posts_with_logging() {
global $wpdb;
$days = 365;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_date < %s AND post_status='publish' AND post_type='post'",
$date_threshold
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
if (wp_delete_post($post_id, true)) {
error_log('wplock: Deleted post ID ' . $post_id);
}
}
}
}
Заключение
Автоматизация удаления старого контента в WordPress — важный этап в поддержании сайта. Используя wp_cron, собственные функции и готовые плагины, можно эффективно управлять базой данных, улучшать производительность и качество сайта. Приведённые примеры помогут настроить удаление старых постов, ревизий, черновиков и комментариев с минимальными усилиями.