В процессе эксплуатации сайта на WordPress часто возникает необходимость автоматически удалять устаревшие записи, чтобы поддерживать актуальность контента и уменьшать нагрузку на базу данных. В этой статье разберём, как реализовать удаление записей по возрасту с помощью WP Cron, а также рассмотрим примеры кода и полезные плагины для автоматизации задачи.
Зачем нужно автоматическое удаление старых записей WordPress
Удаление устаревших записей помогает:
- Поддерживать актуальность информации для посетителей.
- Уменьшать размер базы данных, что ускоряет работу сайта.
- Автоматизировать рутинные процессы администрирования.
Например, на новостных сайтах или блогах, где информация быстро устаревает, это особенно важно. Автоматизация избавляет от необходимости вручную искать и удалять старый контент.
Основы работы с WP Cron для удаления записей
WP Cron — встроенный механизм планирования задач в WordPress. Он позволяет запускать функции по расписанию. Для удаления записей по возрасту нам понадобится:
- Создать функцию, которая будет искать и удалять записи старше заданного времени.
- Зарегистрировать событие в WP Cron, чтобы функция запускалась автоматически, например, раз в сутки.
Пример функции для удаления записей старше 30 дней
function wplike_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'before' => '30 days ago',
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'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 - удаление без возможности восстановления
}
}
}
Эта функция получает все публикации старше 30 дней и удаляет их без перемещения в корзину.
Регистрация задачи в WP Cron
Для запуска функции по расписанию добавим регистрацию события:
function wplike_schedule_delete_old_posts() {
if (!wp_next_scheduled('wplike_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wplike_daily_delete_old_posts');
}
}
add_action('wp', 'wplike_schedule_delete_old_posts');
add_action('wplike_daily_delete_old_posts', 'wplike_delete_old_posts');
Так мы настроим ежедневный запуск удаления старых записей.
Дополнительные настройки и варианты удаления
Можно расширить функционал, чтобы удалять записи определённых типов, категорий или с метаполями. Например, удаление только из категории «Новости»:
function wplike_delete_old_news_posts() {
$args = array(
'category_name' => 'novosti',
'date_query' => array(
array('before' => '30 days ago', 'inclusive' => true),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_news = get_posts($args);
foreach ($old_news as $post_id) {
wp_delete_post($post_id, true);
}
}
Или, например, удалять записи с определённым метаполем:
function wplike_delete_posts_by_meta() {
$args = array(
'meta_key' => 'wplike_expire_date',
'meta_value' => current_time('Y-m-d'),
'meta_compare' => '<=',
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
);
$expired_posts = get_posts($args);
foreach ($expired_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
Полезные плагины для автоматизации удаления записей
Если хотите использовать готовые решения без написания кода, обратите внимание на следующие плагины:
- Auto Delete Posts — позволяет настроить удаление постов по дате публикации с гибкими фильтрами.
- Clearfy Pro — многофункциональный плагин оптимизации, включая управление автоматическим удалением и очисткой базы.
- WPRemark — для управления отзывами, который можно использовать для удаления устаревших комментариев и записей.
Рекомендации по безопасности и тестированию
Перед внедрением автоматического удаления обязательно создайте резервную копию базы данных. Тестируйте код на тестовом сайте, чтобы избежать случайного удаления важных данных. В функции удаления используйте параметр wp_delete_post($post_id, false) для перемещения в корзину, если хотите иметь возможность восстановления.
Выводы и полезные советы
Автоматизация удаления старых записей — простой способ поддерживать сайт в актуальном состоянии и оптимизировать производительность. Используйте WP Cron и функции WordPress для гибкой настройки, а при необходимости — готовые плагины с расширенными возможностями. Главное — внимательно тестировать и создавать резервные копии.