Старые черновики в WordPress часто накапливаются в базе данных и не нужны владельцам сайтов, но при этом занимают место и могут замедлять работу сайта. В этой статье мы подробно разберем, как организовать автоматическое удаление черновиков старше определенного времени с помощью WP-Cron, а также рассмотрим готовые решения и полезные плагины, которые помогут упростить эту задачу.
Зачем удалять старые черновики в WordPress
Черновики — это записи, которые не опубликованы и находятся в статусе «draft». При активной работе над сайтом их может накопиться очень много, особенно если редакторы часто создают и не публикуют записи. Вот почему стоит регулярно очищать базу от ненужных данных:
- Оптимизация базы данных: меньше записей — быстрее запросы и уменьшение размера БД;
- Улучшение производительности: менее загруженный WP-Cron и админка работают быстрее;
- Упрощение управления контентом: в админке не нужно просматривать сотни устаревших черновиков.
Удалять черновики вручную неудобно, особенно если их много, поэтому автоматизация — оптимальный вариант.
Автоматическое удаление черновиков через WP-Cron
Для автоматизации мы можем написать функцию, которая будет запускаться по расписанию и удалять все черновики старше заданного количества дней. Ниже пример реализации с комментариями.
Регистрация кастомного события WP-Cron
function wpkit_schedule_delete_old_drafts() {
if ( ! wp_next_scheduled( 'wpkit_delete_old_drafts_hook' ) ) {
// Запуск раз в сутки
wp_schedule_event( time(), 'daily', 'wpkit_delete_old_drafts_hook' );
}
}
add_action( 'wp', 'wpkit_schedule_delete_old_drafts' );
Эта функция регистрирует событие, которое запускается ежедневно и вызывает хук wpkit_delete_old_drafts_hook.
Функция удаления старых черновиков
function wpkit_delete_old_drafts() {
global $wpdb;
$days = 30; // Удалять черновики старше 30 дней
$date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );
// Получаем ID черновиков старше даты
$drafts = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_date < %s",
$date_threshold
) );
if ( ! empty( $drafts ) ) {
foreach ( $drafts as $draft_id ) {
wp_delete_post( $draft_id, true ); // true — удаление без возможности восстановления
}
}
}
add_action( 'wpkit_delete_old_drafts_hook', 'wpkit_delete_old_drafts' );
Эта функция получает все черновики старше 30 дней и удаляет их без возможности восстановления.
Использование плагинов для удаления старых черновиков
Если вы не хотите писать код, можно использовать готовые плагины, которые автоматизируют очистку базы данных:
- WP-Optimize — популярный плагин для оптимизации БД, в том числе удаления ревизий, спама, автоматического удаления старых черновиков;
- Clearfy Pro — расширенный инструмент для оптимизации и очистки WordPress, позволяет гибко настраивать удаление временных данных, включая черновики;
- Advanced Database Cleaner — инструмент для планирования очисток и удаления устаревших записей.
Все эти плагины имеют удобный интерфейс и не требуют навыков программирования.
Советы по безопасности и тестированию
Перед внедрением автоматического удаления старых черновиков обязательно сделайте резервную копию базы данных. Даже если вы используете код, стоит сначала проверить его в тестовой среде, чтобы избежать потери важных данных.
Также можно добавить в код логи или уведомления по email, чтобы контролировать процесс удаления:
function wpkit_delete_old_drafts() {
global $wpdb;
$days = 30;
$date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );
$drafts = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_date < %s",
$date_threshold
) );
$deleted_count = 0;
if ( ! empty( $drafts ) ) {
foreach ( $drafts as $draft_id ) {
if ( wp_delete_post( $draft_id, true ) ) {
$deleted_count++;
}
}
}
if ( $deleted_count ) {
wp_mail( 'admin@yourdomain.com', 'Удаление старых черновиков', "Удалено {$deleted_count} старых черновиков." );
}
}
add_action( 'wpkit_delete_old_drafts_hook', 'wpkit_delete_old_drafts' );
Замените admin@yourdomain.com на ваш реальный email.
Как отключить автоматическое удаление
Если потребуется остановить планировщик, используйте код для отмены события:
function wpkit_clear_scheduled_delete_old_drafts() {
$timestamp = wp_next_scheduled( 'wpkit_delete_old_drafts_hook' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'wpkit_delete_old_drafts_hook' );
}
}
add_action( 'switch_theme', 'wpkit_clear_scheduled_delete_old_drafts' );
Этот код отменит запланированное событие, например, при смене темы.
Итоги
Автоматическое удаление старых черновиков в WordPress — простое и полезное решение для поддержания чистоты базы данных и повышения производительности сайта. Вы можете использовать собственный код с WP-Cron или готовые плагины, такие как Clearfy Pro, для автоматизации процесса.
Регулярная оптимизация — залог стабильной и быстрой работы вашего WordPress-сайта.