В процессе эксплуатации сайта на WordPress часто накапливаются устаревшие записи, которые уже не нужны и замедляют работу базы данных. Ручное удаление таких записей неудобно и занимает много времени. В этой статье расскажем, как с помощью WP-Cron автоматизировать удаление старых записей, чтобы поддерживать базу в чистоте без вашего вмешательства.
Что такое WP-Cron и почему он удобен для автоматизации удаления записей
WP-Cron — это встроенный механизм планировщика задач в WordPress. Он позволяет запускать определённые функции в заданное время или с определённым интервалом. В отличие от системного cron, WP-Cron запускается при посещении сайта, что делает его простым в настройке для большинства хостингов.
Использование WP-Cron для удаления старых записей позволяет регулярно очищать базу от устаревших данных без необходимости ручного вмешательства или установки дополнительных системных задач.
Однако важно помнить, что WP-Cron зависит от посещаемости сайта — если трафик низкий, задачи могут запускаться с задержками.
Как определить, какие записи считать старыми для удаления
Перед созданием автоматического удаления нужно определить критерии, по которым записи будут удаляться. Обычно это посты определенного типа, опубликованные более N дней назад и не имеющие важного статуса.
Например, можно удалять все записи типа post со статусом draft или pending, которые старше 30 дней, либо все записи конкретного кастомного типа данных, которые не обновлялись длительное время.
Важно не удалять записи, которые могут понадобиться, поэтому стоит тщательно продумать условия фильтрации.
Пример кода: создание WP-Cron задачи для удаления старых записей
Ниже представлен пример кода, который можно добавить в файл functions.php вашей темы или в отдельный плагин. Он автоматически удаляет записи типа post, опубликованные более 30 дней назад.
function wpteam_schedule_old_posts_deletion() {
if ( ! wp_next_scheduled( 'wpteam_delete_old_posts_event' ) ) {
wp_schedule_event( time(), 'daily', 'wpteam_delete_old_posts_event' );
}
}
add_action( 'wp', 'wpteam_schedule_old_posts_deletion' );
function wpteam_delete_old_posts() {
global $wpdb;
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$posts_to_delete = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND post_status = %s AND post_date < %s",
'post', 'publish', $date_threshold
) );
foreach ( $posts_to_delete as $post_id ) {
wp_delete_post( $post_id, true ); // true — без перемещения в корзину
}
}
add_action( 'wpteam_delete_old_posts_event', 'wpteam_delete_old_posts' );В этом коде:
- Функция
wpteam_schedule_old_posts_deletionпроверяет и планирует ежедневное выполнение задачи. - Функция
wpteam_delete_old_postsвыбирает посты старше 30 дней и удаляет их без отправки в корзину. - Использование
wp_delete_postс параметромtrueпозволяет полностью удалить запись.
Как проверить и отменить запланированные задачи WP-Cron
Для управления WP-Cron полезно использовать плагины, например WP Crontrol. Он позволяет смотреть список запланированных задач, запускать их вручную и удалять.
Если нужно отменить автоматическое удаление, используйте следующий код, который отменит задачу:
function wpteam_clear_old_posts_deletion_schedule() {
$timestamp = wp_next_scheduled( 'wpteam_delete_old_posts_event' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'wpteam_delete_old_posts_event' );
}
}
add_action( 'switch_theme', 'wpteam_clear_old_posts_deletion_schedule' );<Этот код отменит задачу при смене темы. Можно вызвать функцию вручную или адаптировать под другие события.
Рекомендации по безопасности и производительности
Перед автоматическим удалением всегда делайте резервную копию базы данных. Ошибки в фильтрах могут привести к потере нужных записей.
Если записей очень много, не стоит удалять все за один проход — это нагрузит сервер. Можно реализовать удаление порциями с помощью параметров posts_per_page и смещений.
Также стоит ограничить права выполнения задачи, чтобы только администраторы могли активировать или изменять её.
Использование плагинов для расширения функционала
Если хочется избежать кодинга, можно использовать плагины, например:
- Clearfy Pro — содержит инструменты для чистки базы, оптимизации и удаления ревизий.
- WP Cron Manager — для управления и мониторинга WP-Cron задач.
Однако если нужны точные условия удаления — лучше реализовывать свой код.