В повседневной работе с WordPress часто возникает необходимость управлять частичными публикациями — черновиками, которые создаются при редактировании или автосохранении контента. Со временем их количество может существенно вырасти, замедляя работу сайта и создавая путаницу в админке. В этой статье мы подробно разберём, как удалить или скрыть частичные (черновики) посты в WordPress, как автоматизировать этот процесс и какие плагины могут помочь.
Что такое частичные (черновики) посты в WordPress и почему их нужно контролировать
В WordPress каждое сохранение записи, не опубликованной на сайте, создаёт черновик. Кроме того, редактор Gutenberg сохраняет автосохранения, которые тоже можно рассматривать как частичные посты. Большое количество таких записей занимает место в базе данных, замедляет запросы и затрудняет навигацию по админке.
Контроль над черновиками важен, чтобы поддерживать производительность сайта и упрощать управление контентом. Удаление ненужных черновиков — это не просто уборка, а оптимизация, которая напрямую влияет на скорость загрузки страниц и стабильность.
Удаление черновиков вручную и через админку WordPress
Самый простой способ удаления черновиков — сделать это через раздел «Записи» в админке WordPress. Там можно отфильтровать записи по статусу «Черновик» и массово удалить ненужные.
- Зайдите в «Записи» → «Все записи».
- Вверху нажмите на фильтр «Черновики».
- Выберите ненужные посты и нажмите «Удалить».
Однако при большом количестве черновиков этот способ неудобен. Тогда стоит прибегнуть к автоматизации.
Автоматическое удаление старых черновиков с помощью WPID функции
Если на вашем сайте копится много старых черновиков, можно периодически удалять их программно. Добавьте в functions.php вашей темы или в свой плагин следующий код:
function wpid_delete_old_drafts() {
global $wpdb;
$days = 30; // Удалять черновики старше 30 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$wpdb->query($wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_status = 'draft' AND post_modified < %s",
$date_threshold
));
}
// Запускать ежедневно через wp_cron
add_action('wp_scheduled_delete_drafts', 'wpid_delete_old_drafts');
if (!wp_next_scheduled('wp_scheduled_delete_drafts')) {
wp_schedule_event(time(), 'daily', 'wp_scheduled_delete_drafts');
}
Этот код настроит ежедневное удаление черновиков старше 30 дней, что поможет поддерживать базу данных в чистоте без вашего участия.
Как скрыть частичные (черновики) посты из списка в админке WordPress
Иногда нужно не удалить черновики, а просто скрыть их из списка записей, чтобы не мешали работе. Для этого можно использовать фильтр pre_get_posts и исключить черновики из основного запроса админки.
function wpid_exclude_drafts_from_admin($query) {
if (is_admin() && $query->is_main_query() && $query->get('post_type') == 'post') {
$post_status = $query->get('post_status');
if (empty($post_status) || $post_status === 'publish') {
$query->set('post_status', array('publish', 'pending', 'future', 'private'));
}
}
}
add_action('pre_get_posts', 'wpid_exclude_drafts_from_admin');
Этот код скроет все черновики из списка постов в админке, оставляя только опубликованные и другие активные статусы.
Плагины для управления черновиками и частичными постами
Если вы предпочитаете не писать код, можно использовать проверенные плагины для управления черновиками:
- Clearfy Pro — оптимизационный плагин, который включает функции автоматического удаления старых черновиков и ревизий. Подробнее на официальной странице.
- WP Bulk Delete — позволяет массово удалять записи по различным параметрам, включая статус черновика. Удобный графический интерфейс и расписание задач.
- Revision Control — для управления ревизиями, которые часто связаны с черновиками и автосохранениями.
Используя эти плагины, вы получите гибкие инструменты для очистки и контроля базы данных без необходимости писать код.
Работа с автосохранениями в WordPress
Автосохранения — это особый тип частичных постов, которые WordPress создаёт для предотвращения потери данных. Они хранятся в той же таблице, что и посты, с типом revision. Иногда их количество чрезмерно растёт.
Для удаления старых ревизий и автосохранений можно использовать следующий код:
function wpid_delete_old_revisions() {
global $wpdb;
$days = 15; // Удалять ревизии старше 15 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$wpdb->query($wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_modified < %s",
$date_threshold
));
}
add_action('wp_scheduled_delete_revisions', 'wpid_delete_old_revisions');
if (!wp_next_scheduled('wp_scheduled_delete_revisions')) {
wp_schedule_event(time(), 'daily', 'wp_scheduled_delete_revisions');
}
Этот код помогает поддерживать базу данных в порядке, удаляя устаревшие автосохранения.
Заключение по теме управления частичными постами
Удаление и скрытие частичных постов — важная задача для поддержания производительности и удобства работы с WordPress. Используйте как ручные методы через админку, так и автоматические — через код и плагины. Особенно рекомендуем внедрять автоматические задачи, которые будут регулярно чистить базу без вашего участия.
Для более глубокой оптимизации и расширенных функций обратите внимание на Clearfy Pro, который включает комплексные решения для очистки базы и оптимизации сайта. Подробнее — на сайте WPShop.