Работа с черновиками – важная часть управления контентом в WordPress. Иногда возникает необходимость автоматизировать процессы создания и удаления черновиков, чтобы облегчить работу редакторов или оптимизировать базу данных сайта. В этой статье рассмотрим, как с помощью плагинов и пользовательских функций автоматически создавать черновики по расписанию и удалять устаревшие черновики, используя примеры кода и лучшие практики.
Зачем автоматизировать создание и удаление черновиков в WordPress?
Черновики позволяют сохранять незавершённые или планируемые публикации, но со временем их количество может неуклонно расти, захламляя базу данных и усложняя администрирование. Автоматизация помогает:
- Снизить ручной труд по созданию заготовок контента;
- Избавиться от устаревших и ненужных черновиков, сохраняя чистоту базы данных;
- Поддерживать порядок и актуальность в списке публикаций;
- Улучшить производительность сайта за счёт уменьшения объёма данных.
Автоматическое создание черновиков по расписанию
Иногда редакторам требуется регулярно создавать шаблоны постов или напоминания в виде черновиков. Решить эту задачу можно с помощью WP Cron или специальных плагинов.
Пример функции для автоматического создания черновика
function wp5_create_scheduled_draft() {
$args = [
'post_title' => 'Автоматически созданный черновик '.date('Y-m-d H:i:s'),
'post_content' => 'Это черновик, созданный автоматически по расписанию',
'post_status' => 'draft',
'post_author' => 1,
'post_type' => 'post'
];
wp_insert_post($args);
}
// Запускаем функцию один раз в день
if (! wp_next_scheduled('wp5_daily_draft_event')) {
wp_schedule_event(time(), 'daily', 'wp5_daily_draft_event');
}
add_action('wp5_daily_draft_event', 'wp5_create_scheduled_draft');
В этом коде мы добавляем задачу в планировщик WP Cron, которая ежедневно создаёт новый черновик с уникальным названием и фиксированным содержимым. Вы можете адаптировать содержимое и частоту под свои нужды.
Использование плагина для создания черновиков
Если вы не хотите писать код, можно использовать плагины, например, Auto Post Scheduler. Он позволяет автоматически публиковать или создавать посты и черновики с заданной периодичностью и условиями.
Автоматическое удаление старых черновиков
Удаление устаревших черновиков помогает поддерживать базу данных в порядке. Рассмотрим, как реализовать автоматическую очистку черновиков старше определённого времени.
Пример функции для удаления черновиков старше 30 дней
function wp5_delete_old_drafts() {
global $wpdb;
$days = 30; // Количество дней
$date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$drafts = $wpdb->get_results(
$wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_date < %s",
$date_limit
)
);
foreach ($drafts as $draft) {
wp_delete_post($draft->ID, true); // true - без перемещения в корзину
}
}
// Планируем еженедельное выполнение
if (! wp_next_scheduled('wp5_weekly_delete_drafts')) {
wp_schedule_event(time(), 'weekly', 'wp5_weekly_delete_drafts');
}
add_action('wp5_weekly_delete_drafts', 'wp5_delete_old_drafts');
Этот скрипт ищет все черновики старше 30 дней и удаляет их без возможности восстановления (без помещения в корзину). Частоту запуска можно скорректировать под свои нужды.
Плагины для удаления черновиков
Для тех, кто не хочет писать код, подойдёт плагин Cleanup Optimizer, позволяющий удалять старые черновики и оптимизировать базу данных в один клик или по расписанию.
Комбинированное решение: автоматизация создания и удаления черновиков
Можно объединить оба сценария для полной автоматизации. Добавьте код создания черновиков и удаления старых в functions.php вашей темы или в собственный плагин. Это обеспечит регулярное пополнение черновиков и очистку устаревших записей.
Кроме того, если на вашем сайте используется плагин My Popup от WPSHOP, вы можете автоматически создавать черновики с анонсами всплывающих окон для тестирования и удалять устаревшие заготовки.
Практические рекомендации и советы
- Всегда тестируйте код на локальном или тестовом сервере, чтобы избежать потери данных;
- Резервное копирование базы данных перед автоматическими удалениями – обязательное условие;
- При использовании WP Cron учитывайте, что он запускается при посещении сайта, что может влиять на точность расписания;
- Для критически важных задач лучше настроить системный cron с вызовом wp-cron.php;
- Используйте метаданные или пользовательские поля, если нужно более гибко фильтровать черновики для удаления.
Пример расширенного фильтра с пользовательским полем
function wp5_delete_custom_old_drafts() {
$args = [
'post_type' => 'post',
'post_status' => 'draft',
'meta_query' => [
[
'key' => '_wp5_custom_flag',
'value' => '1',
'compare' => '='
]
],
'date_query' => [
[
'column' => 'post_date',
'before' => '30 days ago'
]
],
'fields' => 'ids',
'nopaging' => true
];
$drafts = get_posts($args);
foreach ($drafts as $draft_id) {
wp_delete_post($draft_id, true);
}
}
Такой подход позволяет удалять только те черновики, которые вы пометили специальным метаполем, например, автоматически созданные для внутреннего использования.