Ведение бизнеса на WordPress подразумевает регулярное создание и управление контентом. Иногда возникает необходимость автоматизировать задачи, связанные с черновиками: создавать их по расписанию или удалять старые, чтобы не захламлять базу данных. В этой статье разберём, как с помощью CRON-задач в WordPress автоматизировать создание и удаление черновиков, рассмотрим примеры кода и полезные плагины для упрощения процесса.
Почему нужна автоматизация черновиков в WordPress
Ведение большого сайта или бизнес-проекта часто сопровождается необходимостью быстро создавать новые материалы или, наоборот, чистить базу от устаревших или ненужных черновиков. Ручное управление черновиками занимает время, увеличивает риск ошибок и снижает производительность. Автоматизация с помощью CRON-задач позволяет:
- Создавать шаблонные черновики для регулярных публикаций (например, для новостных блоков, рассылок, обзоров).
- Удалять автоматически черновики, которые не были опубликованы длительное время, освобождая место в базе.
- Оптимизировать работу редакторов и контент-менеджеров.
- Обеспечить стабильность и чистоту данных на сайте.
Давайте рассмотрим, как это реализовать на практике.
Создание черновиков по расписанию: пример кода с использованием CRON WordPress
WordPress имеет собственный механизм планировщика задач — WP-Cron, который позволяет запускать функции по расписанию. Рассмотрим пример, как автоматически создавать черновик с заранее заданным заголовком и содержимым.
Регистрация и запуск CRON задачи
add_action('wpbusiness_create_draft_cron', 'wpbusiness_create_scheduled_draft');
function wpbusiness_create_scheduled_draft() {
$new_post = array(
'post_title' => 'Шаблон для публикации '.date('Y-m-d'),
'post_content' => 'Это автоматически созданный черновик для дальнейшего редактирования.',
'post_status' => 'draft',
'post_author' => 1, // ID автора
'post_type' => 'post'
);
// Проверяем, нет ли уже такого черновика на сегодня
$existing = get_posts(array(
'title' => $new_post['post_title'],
'post_status' => 'draft',
'post_type' => 'post'
));
if(empty($existing)) {
wp_insert_post($new_post);
}
}
// Планируем CRON задачу при активации темы или плагина
if (!wp_next_scheduled('wpbusiness_create_draft_cron')) {
wp_schedule_event(time(), 'daily', 'wpbusiness_create_draft_cron');
}
// Очистка при деактивации
register_deactivation_hook(__FILE__, function() {
wp_clear_scheduled_hook('wpbusiness_create_draft_cron');
});
В данном примере задача wpbusiness_create_draft_cron запускается ежедневно и создаёт черновик с уникальным заголовком на текущую дату, если такой ещё не существует.
Как настроить расписание CRON для нестандартных интервалов
В WordPress можно добавить собственные интервалы для CRON, если стандартных (hourly, daily, twicedaily) недостаточно.
add_filter('cron_schedules', 'wpbusiness_custom_cron_schedules');
function wpbusiness_custom_cron_schedules($schedules) {
$schedules['weekly'] = array(
'interval' => 604800, // 7 дней в секундах
'display' => __('Еженедельно')
);
return $schedules;
}
Далее в wp_schedule_event можно указать ваш новый интервал 'weekly'.
Автоматическое удаление старых черновиков: как очистить базу
Если на сайте скапливается множество черновиков, которые не планируется публиковать, это может негативно сказаться на производительности. Удалять их вручную неудобно, поэтому автоматизация удаления — отличный выход.
Пример функции удаления черновиков старше 30 дней
add_action('wpbusiness_delete_old_drafts_cron', 'wpbusiness_delete_old_drafts');
function wpbusiness_delete_old_drafts() {
global $wpdb;
$days = 30;
$date_threshold = 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_threshold
));
if(!empty($drafts)) {
foreach($drafts as $draft) {
wp_delete_post($draft->ID, true); // true — удаление без возможности восстановления
}
}
}
// Планируем задачу для удаления
if (!wp_next_scheduled('wpbusiness_delete_old_drafts_cron')) {
wp_schedule_event(time(), 'daily', 'wpbusiness_delete_old_drafts_cron');
}
// Очистка при деактивации
register_deactivation_hook(__FILE__, function() {
wp_clear_scheduled_hook('wpbusiness_delete_old_drafts_cron');
});
Данный код ежедневно удаляет черновики, которым более 30 дней, что помогает поддерживать базу в чистоте.
Важные моменты при автоматическом удалении
Перед внедрением автоматического удаления убедитесь, что:
- Вы понимаете, какие черновики будут удалены, чтобы случайно не потерять важный контент.
- Сделайте резервное копирование базы данных — на случай ошибок.
- Можно добавить фильтры по авторам или категориям, чтобы исключить определённые записи из удаления.
Полезные плагины для автоматизации управления черновиками
Если не хочется писать код самостоятельно, можно использовать готовые плагины. Например:
- WP Bulk Delete — позволяет массово удалять записи по статусу, дате, таксономиям, авторам и другим параметрам. Имеет поддержку CRON для автоматизации.
- Auto Post Scheduler — автоматически публикует или обновляет черновики по расписанию, что удобно для регулярного контента.
- Clearfy Pro — комплексный плагин для оптимизации WordPress, в том числе с возможностями управления черновиками и их очисткой.
Использование плагинов удобно для тех, кто не хочет углубляться в код, но при этом нуждается в гибких настройках.
Советы по отладке и мониторингу CRON-задач в WordPress
WP-Cron работает не как системный CRON, а запускается при посещении сайта, что иногда приводит к пропуску задач. Чтобы избежать этого:
- Настройте системный CRON на сервере для вызова
wp-cron.phpпо расписанию, отключив при этом встроенный WP-Cron, добавив вwp-config.phpdefine('DISABLE_WP_CRON', true);. - Используйте плагины для мониторинга CRON-задач, например WP Crontrol, чтобы видеть расписание и запускать задачи вручную.
- Добавляйте логирование в ваши функции, чтобы отслеживать успешное выполнение и возможные ошибки.
Заключительный пример: комбинированный плагин для wpbusiness.ru
Пример минимального плагина, который объединяет создание и удаление черновиков, который можно адаптировать под свои задачи:
/**
* Plugin Name: WPBusiness Draft Manager
* Description: Автоматическое создание и удаление черновиков по расписанию.
* Version: 1.0
* Author: WPBusiness
*/
// Создание черновика
add_action('wpbusiness_create_draft_cron', 'wpbusiness_create_scheduled_draft');
function wpbusiness_create_scheduled_draft() {
$title = 'Авто-черновик '.date('Y-m-d');
$exists = get_posts(['title' => $title, 'post_status' => 'draft']);
if(empty($exists)) {
wp_insert_post([
'post_title' => $title,
'post_content' => 'Содержание автоматически созданного черновика.',
'post_status' => 'draft',
'post_author' => 1,
'post_type' => 'post'
]);
}
}
// Удаление черновиков старше 30 дней
add_action('wpbusiness_delete_old_drafts_cron', 'wpbusiness_delete_old_drafts');
function wpbusiness_delete_old_drafts() {
global $wpdb;
$threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
$drafts = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_date < %s",
$threshold
));
foreach($drafts as $draft) {
wp_delete_post($draft->ID, true);
}
}
// Планируем задачи
register_activation_hook(__FILE__, function() {
if (!wp_next_scheduled('wpbusiness_create_draft_cron')) {
wp_schedule_event(time(), 'daily', 'wpbusiness_create_draft_cron');
}
if (!wp_next_scheduled('wpbusiness_delete_old_drafts_cron')) {
wp_schedule_event(time(), 'daily', 'wpbusiness_delete_old_drafts_cron');
}
});
// Убираем задачи при деактивации
register_deactivation_hook(__FILE__, function() {
wp_clear_scheduled_hook('wpbusiness_create_draft_cron');
wp_clear_scheduled_hook('wpbusiness_delete_old_drafts_cron');
});
Этот пример можно расширить, добавив интерфейс в админке, настройки интервалов и фильтры по типам записей или авторам.