Ведение сайта на WordPress часто сопровождается накоплением большого количества устаревшего контента: старых записей, неактуальных страниц, черновиков и ревизий. Со временем это влияет на производительность сайта, увеличивает размер базы данных и усложняет администрирование. В этой статье мы разберем, как автоматизировать удаление старого контента в WordPress с помощью собственных функций и готовых плагинов. Это поможет поддерживать сайт в актуальном состоянии без лишних затрат времени.
Почему важно удалять старый контент в WordPress
Удаление старых и неактуальных записей позволяет:
- Снизить нагрузку на базу данных, что ускоряет работу сайта.
- Уменьшить размер резервных копий и упростить их хранение.
- Избавиться от нежелательного контента, который может ухудшать пользовательский опыт.
- Облегчить навигацию и поиск актуальной информации.
Автоматизация этого процесса особенно полезна для крупных блогов, новостных ресурсов и сайтов с частым обновлением контента.
Как автоматизировать удаление старого контента с помощью кода
WordPress предоставляет удобный функционал для создания пользовательских крон-задач (WP-Cron), которые позволяют запускать PHP-код по расписанию. Ниже приведен пример, как с помощью собственного кода удалять записи старше определенного количества дней.
Пример кода для удаления записей старше 180 дней
function wpcource_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => date('Y-m-d', strtotime('-180 days')),
'inclusive' => true,
),
),
'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 - удаляет без перемещения в корзину
}
}
}
// Регистрируем задачу в WP-Cron
if (!wp_next_scheduled('wpcource_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wpcource_delete_old_posts_hook');
}
add_action('wpcource_delete_old_posts_hook', 'wpcource_delete_old_posts');
Этот код создаст ежедневное задание, которое будет удалять опубликованные записи старше 180 дней без возможности восстановления из корзины. Вы можете изменить параметры post_type, post_status и дату, чтобы адаптировать под свои нужды.
Удаление старых черновиков и ревизий
Кроме опубликованных записей, полезно удалять устаревшие черновики и ревизии, которые занимают место в базе данных.
function wpcource_delete_old_drafts_and_revisions() {
global $wpdb;
// Удаление черновиков старше 30 дней
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_status = 'draft' AND post_date < %s",
date('Y-m-d H:i:s', strtotime('-30 days'))
)
);
// Удаление ревизий старше 30 дней
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_date < %s",
date('Y-m-d H:i:s', strtotime('-30 days'))
)
);
}
// Регистрируем задачу в WP-Cron
if (!wp_next_scheduled('wpcource_delete_old_drafts_and_revisions_hook')) {
wp_schedule_event(time(), 'weekly', 'wpcource_delete_old_drafts_and_revisions_hook');
}
add_action('wpcource_delete_old_drafts_and_revisions_hook', 'wpcource_delete_old_drafts_and_revisions');
Такой подход позволяет поддерживать базу данных в оптимальном состоянии без необходимости ручной чистки.
Использование плагинов для автоматического удаления старого контента
Если вы не хотите писать код самостоятельно, можно использовать специализированные плагины. Ниже — несколько проверенных решений с описанием.
1. Auto Delete Posts
Плагин позволяет задавать правила для автоматического удаления записей по дате публикации, статусу и типу записи. Можно настроить удаление записей старше определенного количества дней, а также исключить нужные категории или теги.
Скачать и настроить плагин можно на официальной странице плагина.
2. WP Bulk Delete
Этот мощный инструмент позволяет массово удалять записи, страницы, пользователей и другие объекты по различным критериям: по дате, таксономиям, статусу. Можно настроить расписание для автоматического удаления.
Полезно для сайтов с разными типами контента. Подробнее и установка — на странице плагина.
3. Clearfy Pro для оптимизации базы данных
Если вы уже знакомы с Clearfy Pro, то знаете, что он содержит функции для удаления ревизий, черновиков, спам-комментариев и других данных, которые замедляют сайт. Clearfy можно настроить для автоматической очистки базы данных по расписанию, что частично решает проблему.
Советы по безопасному удалению контента
Перед автоматическим удалением старого контента важно соблюдать несколько правил:
- Резервное копирование. Всегда делайте бэкап базы данных перед запуском автоматических задач удаления.
- Тестирование. Запускайте код или плагины на тестовом сайте, чтобы избежать критичных ошибок.
- Исключения. Учитывайте, что не весь старый контент обязательно должен удаляться (например, важные страницы, архивы).
- Логирование. Добавляйте в свои функции логирование удаленных записей, чтобы отслеживать процесс.
Например, можно доработать функцию удаления с логированием:
function wpcource_delete_old_posts_with_log() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => date('Y-m-d', strtotime('-180 days')),
'inclusive' => true,
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
$title = get_the_title($post_id);
if(wp_delete_post($post_id, true)) {
error_log("[wpcource] Deleted post ID: $post_id, Title: $title");
}
}
}
}
Заключение
Автоматизация удаления старого контента в WordPress — полезная практика для поддержания сайта в актуальном и быстром состоянии. Вы можете реализовать это как собственными функциями через WP-Cron, так и с использованием готовых плагинов, таких как Auto Delete Posts или WP Bulk Delete. Для комплексной оптимизации рекомендуем обратить внимание на Clearfy Pro, который расширит возможности по очистке базы данных и ускорению сайта.
Важно всегда делать резервные копии и тестировать изменения перед внедрением на рабочем сайте.