Ведение сайта на WordPress часто сопровождается накоплением большого объёма контента, который со временем становится устаревшим или ненужным. Чтобы поддерживать сайт в актуальном состоянии и не перегружать базу данных, важно автоматизировать процесс удаления такого контента. В этой статье подробно рассмотрим, как настроить автоматическое удаление старых записей и пользовательских типов записей (custom post types) с помощью WP-Cron и полезных плагинов, а также приведём примеры кода для реализации гибких решений.
Почему важно удалять старый контент в WordPress
Накопление устаревших материалов на сайте может негативно повлиять на несколько ключевых аспектов:
- Производительность сайта. Большое количество записей увеличивает размер базы данных, что замедляет её работу и загрузку страниц.
- Удобство управления. Чем больше контента, тем сложнее находить актуальные материалы и управлять ими.
- SEO-показатели. Устаревшие или нерелевантные страницы могут негативно влиять на ранжирование в поисковых системах.
Автоматизация удаления позволяет сэкономить время и избежать ошибок при ручном управлении.
Настройка автоматического удаления записей с помощью WP-Cron
WP-Cron — это встроенный планировщик задач в WordPress, который позволяет запускать функции по расписанию. Мы можем использовать WP-Cron для удаления записей, старше определённого времени.
Создание кастомной функции удаления
Пример функции, которая удаляет записи типа post, опубликованные более 90 дней назад:
function wptest_delete_old_posts() {
// Определяем дату, старше которой нужно удалить записи
$date = date('Y-m-d H:i:s', strtotime('-90 days'));
// Получаем ID постов, которые нужно удалить
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => $date,
),
),
'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 задачи
Чтобы запускать функцию ежедневно, добавим событие в WP-Cron и хук:
function wptest_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wptest_daily_old_posts_cleanup')) {
wp_schedule_event(time(), 'daily', 'wptest_daily_old_posts_cleanup');
}
}
add_action('wp', 'wptest_schedule_old_posts_deletion');
add_action('wptest_daily_old_posts_cleanup', 'wptest_delete_old_posts');Теперь функция wptest_delete_old_posts будет запускаться автоматически каждый день и удалять устаревшие записи.
Удаление пользовательских типов записей (custom post types)
Часто на сайте используются кастомные типы записей, например, events или products. Автоматизация удаления для них аналогична, достаточно изменить параметр post_type в запросе.
function wptest_delete_old_custom_posts() {
$date = date('Y-m-d H:i:s', strtotime('-180 days'));
$args = array(
'post_type' => 'events',
'post_status' => 'publish',
'date_query' => array(
array('before' => $date),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_events = get_posts($args);
if (!empty($old_events)) {
foreach ($old_events as $post_id) {
wp_delete_post($post_id, true);
}
}
}Добавьте соответствующий хук для планирования задачи, аналогично предыдущему примеру.
Использование плагинов для автоматизации удаления старого контента
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- Auto Delete Posts — позволяет настроить удаление постов по дате, категории, типу записи и другим параметрам.
- Clearfy Pro — мощный набор инструментов для оптимизации и автоматизации WordPress, включая управление устаревшим контентом.
Преимущество плагинов в удобном интерфейсе и дополнительных настройках без необходимости писать код.
Рекомендации по безопасности и резервному копированию
При автоматическом удалении данных важно соблюдать осторожность и предусмотреть возможность восстановления:
- Резервное копирование. Регулярно делайте бэкапы базы данных, особенно перед настройкой автоматического удаления.
- Логирование. Записывайте в лог информацию об удалённых записях для контроля.
- Тестирование. Перед включением в рабочем режиме протестируйте функцию на тестовом сайте.
Для логирования можно добавить простую запись в файл:
function wptest_log_deleted_post($post_id) {
$log = '[' . date('Y-m-d H:i:s') . '] Deleted post ID: ' . $post_id . "\n";
file_put_contents(WP_CONTENT_DIR . '/wptest_deleted_posts.log', $log, FILE_APPEND);
}
// Вызов внутри цикла удаления
wp_delete_post($post_id, true);
wptest_log_deleted_post($post_id);Заключение
Автоматизация удаления старого контента в WordPress — важная задача для поддержания здоровья сайта и удобства управления. С помощью WP-Cron и кастомных функций можно гибко настроить удаление любых типов записей по заданным критериям. Для тех, кто предпочитает готовые решения, существуют удобные плагины вроде Auto Delete Posts и Clearfy Pro. Не забывайте о бэкапах и тестировании, чтобы не потерять важные данные.