Автоматизация публикации контента — важная задача для многих сайтов на WordPress. Часто требуется запланировать публикацию постов на определённое время, особенно если контент создаётся заранее или импортируется из внешних источников. В этой статье разберём, как создавать и публиковать записи автоматически, используя встроенный механизм WP-Cron, а также рассмотрим примеры кода и полезные плагины.
Что такое WP-Cron и почему он важен для автоматизации
WP-Cron — это встроенный в WordPress планировщик задач (cron), который позволяет запускать определённые функции по расписанию. В отличие от системного cron на сервере, WP-Cron срабатывает при посещении сайта, что имеет свои особенности и ограничения. Однако для большинства задач автоматизации он подходит идеально.
Основные преимущества WP-Cron:
- Не требует настройки на уровне сервера.
- Позволяет запускать задачи с нужной периодичностью.
- Интегрирован с системой WordPress и её хуками.
Для автоматической публикации постов мы можем зарегистрировать собственное событие в WP-Cron, которое будет проверять запланированные записи и публиковать их.
Создание функции для автоматической публикации постов
Для начала создадим функцию, которая найдет все записи со статусом future (запланированные на будущее) и опубликует их, если наступило время публикации.
function wpstandart_publish_scheduled_posts() {
$args = [
'post_status' => 'future',
'post_type' => 'post',
'posts_per_page' => -1,
'date_query' => [
[
'before' => current_time('mysql'),
'inclusive' => true,
],
],
];
$scheduled_posts = get_posts($args);
foreach ($scheduled_posts as $post) {
wp_publish_post($post->ID);
}
}Эта функция получает все отложенные записи, у которых дата публикации уже наступила, и публикует их с помощью функции wp_publish_post. Важно использовать current_time('mysql'), чтобы учитывать часовой пояс сайта.
Регистрация события WP-Cron для автоматической публикации
Теперь нужно создать событие, которое будет запускать нашу функцию по расписанию. Например, пусть это будет каждые 15 минут.
function wpstandart_schedule_cron_event() {
if (!wp_next_scheduled('wpstandart_publish_cron_hook')) {
wp_schedule_event(time(), 'fifteen_minutes', 'wpstandart_publish_cron_hook');
}
}
add_action('wp', 'wpstandart_schedule_cron_event');
add_action('wpstandart_publish_cron_hook', 'wpstandart_publish_scheduled_posts');
// Регистрируем интервал 15 минут
function wpstandart_cron_schedules($schedules) {
if (!isset($schedules['fifteen_minutes'])) {
$schedules['fifteen_minutes'] = [
'interval' => 15 * 60,
'display' => 'Каждые 15 минут'
];
}
return $schedules;
}
add_filter('cron_schedules', 'wpstandart_cron_schedules');В этом коде мы добавляем новый интервал для WP-Cron — 15 минут, регистрируем событие wpstandart_publish_cron_hook и подключаем к нему нашу функцию публикации. Хук wp проверяет, запланировано ли событие, и если нет — создает его.
Рекомендации по отладке и контролю работы WP-Cron
WP-Cron зависит от посещаемости сайта, и если трафик низкий, задачи могут запускаться с задержкой. Для критичных задач можно настроить системный cron на сервере, вызывающий WP-Cron по URL, например:
wget -q -O - https://your-site.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1Для отладки удобно использовать плагин WP Crontrol, который позволяет просматривать и управлять запланированными событиями WP-Cron из панели администратора.
Автоматическая публикация с импортом контента: пример с плагином WPRemark
Если вы используете плагин WPRemark для автоматического импорта отзывов или контента из внешних источников, можно объединить его с нашим скриптом автоматической публикации. Например, настроить импорт с отложенной публикацией, а WP-Cron — для своевременного вывода записей в публичную часть.
Пример интеграции с WPRemark:
1. Импортируйте отзывы с датой публикации в будущем.
2. Используйте функцию wpstandart_publish_scheduled_posts() в событии WP-Cron для их автоматической публикации.
Таким образом, вы сможете без дополнительного вмешательства публиковать отзывы или импортируемый контент по расписанию.
Заключение
Настройка автоматической публикации постов в WordPress с помощью WP-Cron — мощный инструмент для оптимизации работы сайта. Вы можете создавать отложенные записи вручную, импортировать контент с будущей датой публикации или полностью автоматизировать процесс с помощью собственного кода и плагинов.
Используйте приведённые примеры кода, чтобы быстро внедрить автоматизацию, и не забывайте контролировать работу WP-Cron с помощью инструментов вроде WP Crontrol. Если возникнут вопросы или нужны дополнительные функции, можно расширить функционал, добавив уведомления о публикации или логи.