Зачем удалять старые черновики в WordPress
Во время работы над сайтом в WordPress часто создается множество черновиков, которые со временем теряют актуальность. Оставленные без внимания, эти черновики занимают место в базе данных, замедляют работу административной панели и создают беспорядок в списке записей. Особенно это актуально для крупных сайтов с большим количеством авторов и контента.
Ручное удаление черновиков — трудоемкий и неэффективный процесс, поэтому разумно автоматизировать эту задачу. В этой статье мы рассмотрим, как с помощью простого кода и стандартного WP-Cron настроить автоматическое удаление черновиков старше определенного срока.
Создание функции автоматического удаления старых черновиков
Для начала создадим функцию, которая будет удалять черновики старше заданного количества дней. Мы добавим префикс wpabout_ к имени функции, чтобы избежать конфликтов.
function wpabout_delete_old_drafts() {
global $wpdb;
$days = 30; // Срок в днях для удаления
$date = 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_modified < %s",
$date
));
if (!empty($drafts)) {
foreach ($drafts as $post_id) {
wp_delete_post($post_id, true); // Удаляем без возможности восстановления
}
}
}В этом коде мы используем глобальный объект $wpdb для запроса к базе данных, выбираем ID черновиков, дата изменения которых старше 30 дней, и удаляем их с помощью функции wp_delete_post с параметром true, чтобы удалить посты без помещения в корзину.
Настройка WP-Cron для автоматизации удаления
Теперь необходимо настроить системное задание WP-Cron, чтобы функция wpabout_delete_old_drafts запускалась автоматически, например, раз в сутки.
Добавим следующий код в файл functions.php вашей темы или в собственный плагин:
function wpabout_schedule_draft_cleanup() {
if (!wp_next_scheduled('wpabout_daily_draft_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpabout_daily_draft_cleanup');
}
}
add_action('wp', 'wpabout_schedule_draft_cleanup');
add_action('wpabout_daily_draft_cleanup', 'wpabout_delete_old_drafts');Объяснение кода:
- Функция
wpabout_schedule_draft_cleanupпроверяет, есть ли уже запланированное событие с именемwpabout_daily_draft_cleanup. Если нет — создаёт его с интерваломdaily(раз в сутки). - Хук
add_action('wpabout_daily_draft_cleanup', 'wpabout_delete_old_drafts')связывает событие с функцией удаления черновиков.
Таким образом, WordPress будет запускать очистку автоматически каждый день.
Как проверить работу и отладить
Для отладки можно временно изменить интервал запуска на более частый, например, через wp_schedule_event(time(), 'hourly', 'wpabout_hourly_draft_cleanup') и соответствующе изменить хук и функцию-обработчик.
Также полезно добавлять логирование, чтобы видеть, когда и какие черновики удаляются. Например, через функцию error_log:
function wpabout_delete_old_drafts() {
global $wpdb;
$days = 30;
$date = 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_modified < %s",
$date
));
if (!empty($drafts)) {
foreach ($drafts as $post_id) {
if (wp_delete_post($post_id, true)) {
error_log("[wpabout] Удалён черновик ID: $post_id");
}
}
} else {
error_log("[wpabout] Нет черновиков для удаления");
}
}Логи можно смотреть в файле debug.log при включенном WP_DEBUG_LOG.
Использование плагинов для автоматизации очистки базы
Если вы не хотите писать код, можно использовать готовые плагины для управления черновиками и оптимизации базы данных:
- Clearfy Pro — содержит модуль очистки базы, включая удаление черновиков старше определённого срока. Подробнее на wpshop.ru.
- WPOptimize — популярный плагин для очистки и оптимизации базы данных, умеет удалять старые черновики и ревизии.
- Advanced Database Cleaner — позволяет настроить автоматическую очистку базы и удаление неиспользуемых данных.
Плагины подходят для тех, кто не хочет внедрять кастомный код, но они могут быть избыточны, если нужна только именно очистка черновиков.
Советы по безопасности и производительности
Удаление черновиков — необратимая операция, поэтому убедитесь, что:
- Вы выбрали адекватный срок хранения — 30 дней достаточно, чтобы авторы могли вернуться к работе.
- Сделали резервную копию базы данных перед внедрением автоматической очистки.
- Тестировали функцию на тестовом сайте, чтобы избежать случайного удаления нужного контента.
Кроме того, не ставьте слишком частый интервал запуска — это может увеличить нагрузку на сервер без существенной пользы.
Итог
Автоматизация удаления старых черновиков в WordPress — простой и эффективный способ поддерживать базу данных в чистоте и упрощать работу с сайтом. Используя приведённый код и настройку WP-Cron, вы сможете решить эту задачу без сторонних плагинов. При необходимости можно использовать и готовые решения, например, Clearfy Pro с официального каталога wpshop.ru.