В процессе ведения сайта на WordPress скапливается множество черновиков, которые со временем становятся ненужными и занимают место в базе данных. Если регулярно не очищать эти записи, это может привести к замедлению работы сайта и увеличению нагрузки на сервер. В этой статье мы подробно рассмотрим, как автоматизировать удаление старых черновиков с помощью PHP-кода и встроенного планировщика задач WordPress (WP-Cron).
Почему важно удалять старые черновики в WordPress
Черновики — это незавершённые записи, которые сохраняются в базе данных. Они не видны посетителям сайта, но их большое количество может негативно повлиять на производительность базы данных. Это особенно актуально для крупных сайтов с большим объёмом контента и активной редакторской работой.
Удаление старых черновиков позволяет:
- Снизить нагрузку на базу данных;
- Упростить администрирование и управление контентом;
- Уменьшить размер резервных копий;
- Избежать путаницы при редактировании.
Настройка автоматического удаления черновиков с помощью WP-Cron
WordPress имеет встроенную систему планировщика задач — WP-Cron. С ее помощью можно запускать периодические задачи, например, скрипт удаления старых черновиков.
Рассмотрим пример функции, которая удаляет все черновики старше 30 дней. Код нужно добавить в файл functions.php вашей темы или в отдельный плагин.
Код функции удаления старых черновиков
function wpcode_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); // Принудительно удаляем
}
}
}
Регистрация задачи в WP-Cron
Чтобы функция выполнялась автоматически, добавим задачу в планировщик WordPress.
function wpcode_schedule_draft_cleanup() {
if (!wp_next_scheduled('wpcode_daily_draft_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcode_daily_draft_cleanup');
}
}
add_action('wp', 'wpcode_schedule_draft_cleanup');
add_action('wpcode_daily_draft_cleanup', 'wpcode_delete_old_drafts');
Этот код проверяет, запланирована ли уже задача, и если нет — создает её для ежедневного запуска. При срабатывании задачи будет вызвана функция wpcode_delete_old_drafts, которая удалит старые черновики.
Как изменить интервал запуска и период удаления
По умолчанию задача запускается ежедневно, а черновики удаляются, если им больше 30 дней. Вы можете изменить эти параметры под свои нужды.
- Для изменения интервала запуска можно добавить собственный интервал в WP-Cron:
function wpcode_custom_cron_intervals($schedules) {
$schedules['weekly'] = array(
'interval' => 604800, // 7 дней в секундах
'display' => __('Once Weekly')
);
return $schedules;
}
add_filter('cron_schedules', 'wpcode_custom_cron_intervals');
wpcode_schedule_draft_cleanup.$days в функции wpcode_delete_old_drafts.Использование плагинов для управления черновиками
Если вы не хотите писать код, можно воспользоваться готовыми плагинами, которые помогают управлять черновиками и автоматизировать их удаление.
- WP-Sweep — плагин для очистки базы данных, включая удаление старых черновиков. Позволяет вручную запускать очистку и настраивать автоматизацию.
- Auto Delete Posts — позволяет автоматически удалять посты по заданным правилам, включая черновики.
- Clearfy Pro (доступен на wpshop.ru) — расширенный плагин для оптимизации WordPress, имеет функции очистки базы данных и управления контентом.
Эти плагины особенно полезны, если вы хотите получить гибкий контроль без необходимости писать и поддерживать собственный код.
Рекомендации по безопасности и тестированию
Перед добавлением кода на рабочий сайт обязательно протестируйте его на тестовой среде. Удаление записей — необратимая операция, поэтому важно быть уверенным, что удаляются только нужные элементы.
Рекомендуется делать резервные копии базы данных перед запуском автоматических очисток.
Также убедитесь, что задача WP-Cron корректно запускается. На некоторых хостингах WP-Cron может работать некорректно, тогда стоит настроить системный cron для вызова wp-cron.php.
Подытожим
Автоматическое удаление старых черновиков — простое, но эффективное решение для поддержания производительности и чистоты базы данных WordPress. Используя приведенный выше код и настройки, вы сможете легко настроить регулярную очистку без лишних усилий.