В WordPress со временем накапливается множество черновиков, которые занимают место в базе данных и могут замедлять работу сайта. Особенно это актуально для сайтов с большим количеством авторов или сценариев автоматического создания контента. В этой статье разберём, как автоматически удалять старые черновики, используя как готовые решения, так и собственный код.
Почему важно удалять старые черновики WordPress
Черновики — это записи, которые были созданы, но не опубликованы. Если их много, они увеличивают размер таблиц базы данных wp_posts и wp_postmeta, что может влиять на производительность сайта. Также это усложняет управление контентом и увеличивает время резервного копирования.
Регулярное удаление устаревших черновиков помогает:
- Сократить размер базы данных.
- Улучшить скорость работы панели администратора.
- Поддерживать порядок в списках записей.
Удаление черновиков с помощью плагинов
Плагин WP-Optimize
WP-Optimize — популярный плагин для очистки и оптимизации базы данных. Он умеет удалять старые ревизии, спам, транзиенты и черновики.
Для настройки автоматического удаления черновиков:
- Установите и активируйте WP-Optimize с официального сайта.
- Перейдите в раздел Database и выберите опцию удаления черновиков.
- Настройте расписание автоматической оптимизации в разделе Settings > Scheduled clean-up.
Плагин Advanced Database Cleaner
Этот плагин предоставляет тонкую настройку очистки базы данных, включая удаление старых черновиков по дате. Он поддерживает планировщик задач и удобный интерфейс.
Преимущества:
- Можно выбрать сроки удаления (например, черновики старше 30 дней).
- Просмотр и выбор конкретных записей перед удалением.
- Поддержка мультисайтов.
Автоматическое удаление черновиков с помощью PHP-кода
Если вы предпочитаете не использовать дополнительные плагины, можно добавить кастомный код в файл functions.php вашей темы или в плагин-сниппет.
Пример функции для удаления черновиков старше 30 дней
function wproot_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
));
if (!empty($drafts)) {
foreach ($drafts as $post_id) {
wp_delete_post($post_id, true); // true — без перемещения в корзину
}
}
}
// Запускаем функцию ежедневно через WP-Cron
if (!wp_next_scheduled('wproot_daily_delete_old_drafts')) {
wp_schedule_event(time(), 'daily', 'wproot_daily_delete_old_drafts');
}
add_action('wproot_daily_delete_old_drafts', 'wproot_delete_old_drafts');Этот код создаёт ежедневное задание, которое удаляет черновики старше 30 дней прямо из базы данных. Обратите внимание, что удаление происходит без перемещения в корзину, так что будьте осторожны.
Как изменить период удаления
В переменной $days можно указать любое количество дней. Например, для удаления черновиков старше 7 дней замените 30 на 7.
Дополнительные рекомендации по управлению черновиками
Оповещения о накоплении черновиков
Чтобы не допустить чрезмерного накопления, можно добавить уведомление в админ-панель, когда их становится слишком много. Вот пример кода для вывода предупреждения:
function wproot_warn_about_drafts() {
$count = wp_count_posts()->draft;
$limit = 50; // порог
if ($count > $limit) {
echo '<div class="notice notice-warning is-dismissible">'
. 'Внимание! На сайте накопилось ' . $count . ' черновиков. Рекомендуется их удалить для оптимизации.'
. '</div>';
}
}
add_action('admin_notices', 'wproot_warn_about_drafts');Автоматизация удаления с плагином Clearfy Pro
Если вы используете плагин Clearfy Pro, то в нём есть инструменты для очистки базы данных, включая удаление старых черновиков и ревизий. Это удобно, если хотите комплексно оптимизировать сайт без написания кода.
Выводы и лучшие практики
Автоматическое удаление старых черновиков — важная часть технического обслуживания WordPress. Выбор метода зависит от ваших навыков и предпочтений:
- Для большинства пользователей подойдут готовые плагины WP-Optimize или Advanced Database Cleaner.
- Для опытных разработчиков простой и эффективный способ — добавить собственный код с использованием WP-Cron.
- Обязательно делайте резервные копии базы данных перед массовым удалением записей.
- Настройте уведомления, чтобы контролировать количество черновиков.
Используя описанные методы, вы сможете поддерживать базу данных в чистоте и улучшать производительность сайта без лишних усилий.