В процессе ведения сайта на WordPress часто накапливаются черновики, которые уже не нужны и занимают место в базе данных. Удаление этих старых черновиков вручную — рутинная задача, которую можно автоматизировать. В этой статье я расскажу, как настроить автоматическое удаление черновиков, которые не редактировались более определённого времени. Это поможет поддерживать базу данных в порядке и снизить нагрузку на сайт.
Почему важно удалять старые черновики WordPress
Черновики — это незавершённые или отложенные к публикации записи. Со временем их может накопиться несколько десятков или сотен, особенно если активно ведётся блог или новостной сайт. Вот основные причины, почему стоит регулярно очищать старые черновики:
- Оптимизация базы данных: Черновики занимают место в таблице
wp_posts, что замедляет запросы и увеличивает размер резервных копий. - Улучшение производительности: Чем меньше записей в базе, тем быстрее работают административные запросы и интерфейс WordPress.
- Чистота и порядок: Меньше лишних записей — удобнее ориентироваться в админке.
Автоматизация удаления избавит вас от необходимости делать это вручную, а также поможет избежать случайного удаления нужных черновиков.
Как настроить автоматическое удаление черновиков через wpstandart_cron
Для решения задачи мы реализуем функцию wpstandart_auto_delete_old_drafts, которая будет запускаться по расписанию с помощью wp_cron. Она удалит все черновики старше 30 дней. Разумеется, вы можете изменить период под свои нужды.
Шаг 1. Добавляем функцию удаления
В файл functions.php вашей темы или в собственный плагин добавьте следующий код:
function wpstandart_auto_delete_old_drafts() {
global $wpdb;
$days = 30; // количество дней для хранения черновиков
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$query = $wpdb->prepare(
"DELETE FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_modified < %s",
$date_threshold
);
$deleted = $wpdb->query($query);
if ($deleted !== false) {
error_log("wpstandart: Удалено {$deleted} старых черновиков.");
}
}Этот код удаляет записи с post_status = 'draft', которые не редактировались более 30 дней. Для безопасности и отладки результат записывается в лог ошибок.
Шаг 2. Запускаем функцию по расписанию
Чтобы функция запускалась регулярно, создадим событие wp_cron. Добавьте следующий код:
function wpstandart_schedule_delete_old_drafts() {
if (!wp_next_scheduled('wpstandart_delete_old_drafts_hook')) {
wp_schedule_event(time(), 'daily', 'wpstandart_delete_old_drafts_hook');
}
}
add_action('wp', 'wpstandart_schedule_delete_old_drafts');
add_action('wpstandart_delete_old_drafts_hook', 'wpstandart_auto_delete_old_drafts');Этот код проверяет, запланировано ли событие, и если нет — добавляет ежедневный запуск очистки.
Альтернативный способ: использование плагина для удаления старых черновиков
Если вы не хотите писать код, можно использовать готовые решения. Вот несколько плагинов, которые помогут автоматически удалять старые черновики:
- WP-Optimize — мощный инструмент для очистки и оптимизации базы данных. Позволяет удалять старые ревизии и черновики.
- Clearfy Pro — плагин для оптимизации и очистки WordPress с возможностью настроить удаление устаревших записей.
Оба решения имеют удобный интерфейс и дополнительные функции для поддержания сайта в тонусе.
Как избежать случайного удаления важных черновиков
Удаление черновиков — операция, которая может повредить рабочим материалам, если не контролировать процесс. Вот советы, как обезопасить себя:
- Резервное копирование: Перед включением автоматического удаления создавайте резервную копию базы данных.
- Используйте метки или категории: Если у вас есть важные черновики, помечайте их специальной меткой, и модифицируйте функцию удаления, чтобы пропускать такие записи.
- Тестируйте на тестовом сайте: Перед запуском на боевом ресурсе проверьте работу функции в тестовой среде.
Например, чтобы исключить черновики с меткой important, можно изменить запрос:
function wpstandart_auto_delete_old_drafts() {
global $wpdb;
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$query = "DELETE p FROM {$wpdb->posts} p"
. " LEFT JOIN {$wpdb->term_relationships} tr ON (p.ID = tr.object_id)"
. " LEFT JOIN {$wpdb->term_taxonomy} tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)"
. " LEFT JOIN {$wpdb->terms} t ON (tt.term_id = t.term_id)"
. " WHERE p.post_status = 'draft'"
. " AND p.post_modified < %s"
. " AND (t.slug IS NULL OR t.slug != 'important')";
$prepared = $wpdb->prepare($query, $date_threshold);
$deleted = $wpdb->query($prepared);
if ($deleted !== false) {
error_log("wpstandart: Удалено {$deleted} старых черновиков, исключая важные.");
}
}Выводы и рекомендации по поддержке чистоты черновиков
Автоматическое удаление старых черновиков — простой и эффективный способ поддерживать базу данных WordPress в чистоте. С помощью приведённого кода или плагинов вы сможете настроить регулярную очистку без лишних усилий.
Рекомендуется:
- Регулярно делать резервные копии перед массовыми изменениями.
- Настраивать период хранения черновиков под особенности вашего проекта.
- Использовать метки для защиты важных материалов от удаления.
Если вы хотите более продвинутые инструменты оптимизации, обратите внимание на Clearfy Pro — этот плагин значительно упрощает управление базой и ускоряет сайт.