Ведение сайта на WordPress часто подразумевает накопление большого количества устаревшего контента — записей, страниц, черновиков, которые уже не актуальны и лишь загромождают базу данных. Ручное удаление таких материалов неудобно и ресурсоёмко, особенно для крупных проектов. В этой статье мы рассмотрим, как автоматизировать удаление старого контента в WordPress с помощью WP-Cron и кастомных PHP-функций, а также приведём примеры кода и рекомендации по использованию плагинов.
Почему важно удалять старый контент в WordPress
Со временем база данных WordPress увеличивается, что может негативно сказаться на производительности сайта и усложнить его администрирование. Устаревший контент:
- Снижает скорость работы сайта из-за объёма данных.
- Может создавать путаницу среди пользователей и редакторов.
- Увеличивает размер резервных копий, что влияет на их создание и хранение.
Автоматизация удаления помогает поддерживать базу данных в оптимальном состоянии, экономит время и снижает риск ошибок при ручном управлении.
Основные подходы к автоматическому удалению контента
Существует несколько способов решения задачи автоматического удаления устаревших записей:
- Использование WP-Cron для планирования задач — с помощью встроенного планировщика WordPress можно запускать кастомные функции по расписанию.
- Кастомные PHP-функции — пишем свой код, который выбирает и удаляет записи, отвечающие заданным критериям.
- Плагины для очистки базы и удаления контента — например, Clearfy Pro, который включает функции оптимизации и может помочь в автоматизации.
Рассмотрим подробно каждый из вариантов.
Настройка WP-Cron для выполнения задачи удаления
WP-Cron — это механизм планирования задач в WordPress, который позволяет запускать PHP-функции по расписанию. Для автоматического удаления контента нужно зарегистрировать свою задачу и функцию, которая будет выполняться.
Добавьте следующий код в файл functions.php вашей темы или в плагин:
// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wpeducation_delete_old_content_cron')) {
wp_schedule_event(time(), 'daily', 'wpeducation_delete_old_content_cron');
}
// Отписываемся от события при деактивации
function wpeducation_deactivate_cron() {
$timestamp = wp_next_scheduled('wpeducation_delete_old_content_cron');
wp_unschedule_event($timestamp, 'wpeducation_delete_old_content_cron');
}
register_deactivation_hook(__FILE__, 'wpeducation_deactivate_cron');
// Хук на выполнение задачи
add_action('wpeducation_delete_old_content_cron', 'wpeducation_delete_old_content');
function wpeducation_delete_old_content() {
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'column' => 'post_date',
'before' => '1 year ago', // Удаляем записи старше 1 года
],
],
'fields' => 'ids',
'posts_per_page' => -1,
];
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удалить без возможности восстановления
}
}
Этот код ежедневно удаляет все опубликованные записи старше одного года. Вы можете изменить параметры, например, тип поста, дату или статус.
Удаление страниц и кастомных типов постов
Если вам нужно удалять не только записи, но и страницы или кастомные типы, просто добавьте их в параметр post_type:
$args = [
'post_type' => ['post', 'page', 'custom_type'],
'post_status' => 'publish',
'date_query' => [
[
'column' => 'post_date',
'before' => '6 months ago', // например, 6 месяцев
],
],
'fields' => 'ids',
'posts_per_page' => -1,
];
Так вы расширите область удаления.
Использование плагина Clearfy Pro для автоматизации
Плагин Clearfy Pro предлагает множество инструментов для оптимизации и очистки сайта, включая автоматическое удаление ревизий, черновиков и спама. Он не удаляет старый контент по дате, но отлично помогает поддерживать базу в чистоте и ускоряет работу сайта.
Использовать его просто — после установки активируйте необходимые модули в настройках плагина, и очистка будет идти автоматически.
Дополнительные советы по автоматизации удаления контента
Безопасность и резервное копирование
Перед автоматическим удалением контента обязательно настройте регулярные резервные копии сайта и базы данных. Это позволит восстановить данные в случае ошибки или необходимости вернуть удалённый материал.
Логирование и уведомления
Для контроля работы автоматизации полезно добавить логирование удалённых записей и уведомления на почту администратора. Например, расширим функцию удаления:
function wpeducation_delete_old_content() {
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'column' => 'post_date',
'before' => '1 year ago',
],
],
'fields' => 'ids',
'posts_per_page' => -1,
];
$old_posts = get_posts($args);
$deleted_ids = [];
foreach ($old_posts as $post_id) {
if (wp_delete_post($post_id, true)) {
$deleted_ids[] = $post_id;
}
}
if (!empty($deleted_ids)) {
wp_mail(get_option('admin_email'), 'Удалён старый контент на сайте', 'Удалены записи с ID: ' . implode(', ', $deleted_ids));
}
}
Фильтрация по категориям и меткам
Если хотите удалять контент из конкретных категорий или с определёнными метками, используйте параметры category__in или tag__in в запросе:
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => [5, 12], // ID категорий
'date_query' => [
[
'column' => 'post_date',
'before' => '1 year ago',
],
],
'fields' => 'ids',
];
Обработка больших объёмов данных: разбивка на части
Если на сайте сотни или тысячи устаревших записей, удаление всех сразу может вызвать таймауты или нагрузку на сервер. Чтобы избежать этого, делайте удаление партиями:
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'column' => 'post_date',
'before' => '1 year ago',
],
],
'fields' => 'ids',
'posts_per_page' => 50, // по 50 записей за раз
];
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
WP-Cron запустит функцию ежедневно, и каждый день будет удалена очередная партия.
Итоги и рекомендации
Автоматизация удаления старого контента — важный этап поддержания сайта в порядке и повышении его производительности. Используя WP-Cron и кастомные функции, вы получаете гибкое и надёжное решение, которое легко адаптируется.
Не забывайте про резервное копирование и тестирование кода в безопасной среде перед запуском на боевом сайте.
Для более комплексной оптимизации рекомендуем обратить внимание на Clearfy Pro, который расширит возможности по очистке и ускорению вашего WordPress.