Автоматизация обновления публикаций — востребованная задача для владельцев сайтов на WordPress, которые хотят поддерживать актуальность контента без постоянного ручного вмешательства. В этой статье разберём, как с помощью встроенной системы планировщика задач WP-Cron организовать автоматическое обновление постов, а также рассмотрим примеры кода и полезные плагины.
Что такое WP-Cron и как он работает в WordPress
WP-Cron — это механизм планирования и выполнения задач внутри WordPress. В отличие от системного cron на сервере, WP-Cron запускается при посещении сайта, проверяя, есть ли запланированные задачи. Это удобно, но при низкой посещаемости задачи могут выполняться с задержкой, поэтому иногда целесообразно настроить системный cron для запуска wp-cron.php.
WP-Cron позволяет регистрировать задачи с определённым интервалом, например, обновлять метаданные постов, пересчитывать рейтинги, менять статус публикаций и многое другое.
Для автоматизации обновления публикаций нам нужно создать функцию, которая будет изменять нужные поля постов, и зарегистрировать её в WP-Cron с нужной периодичностью.
Автоматическое обновление времени публикации постов
Иногда требуется обновить дату публикации постов, чтобы они поднимались в ленте новостей или на главной странице. Рассмотрим пример, как автоматически сдвигать дату публикации всех записей на текущую дату.
Добавим следующий код в файл functions.php вашей активной темы или в собственный плагин:
function wppartner_update_post_dates() {
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
];
$posts = get_posts($args);
foreach ($posts as $post) {
$post->post_date = current_time('mysql');
$post->post_date_gmt = current_time('mysql', 1);
wp_update_post($post);
}
}
function wppartner_schedule_post_dates_update() {
if (!wp_next_scheduled('wppartner_cron_update_post_dates')) {
wp_schedule_event(time(), 'daily', 'wppartner_cron_update_post_dates');
}
}
add_action('wppartner_cron_update_post_dates', 'wppartner_update_post_dates');
add_action('wp', 'wppartner_schedule_post_dates_update');Этот код создаёт ежедневное событие, которое обновляет дату публикации всех постов на текущий момент. Обратите внимание, что при большом количестве постов выполнение может занять время, поэтому при необходимости можно оптимизировать выборку или обновлять посты партиями.
Обновление определённых полей постов по условию
Часто нужно обновлять только конкретные публикации, например, с определённой категорией или меткой. Расширим предыдущий пример, добавив фильтрацию и обновление пользовательского поля:
function wppartner_update_custom_field_for_category() {
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'category_name' => 'novosti', // заменить на нужную категорию
'posts_per_page' => -1
];
$posts = get_posts($args);
foreach ($posts as $post) {
update_post_meta($post->ID, 'wppartner_last_update', current_time('mysql'));
}
}
function wppartner_schedule_custom_field_update() {
if (!wp_next_scheduled('wppartner_cron_update_custom_field')) {
wp_schedule_event(time(), 'hourly', 'wppartner_cron_update_custom_field');
}
}
add_action('wppartner_cron_update_custom_field', 'wppartner_update_custom_field_for_category');
add_action('wp', 'wppartner_schedule_custom_field_update');В этом примере каждую час обновляется метаполе wppartner_last_update для постов категории «новости». Такой подход полезен для интеграций или индикаторов свежести материала.
Настройка системного cron для надежного запуска WP-Cron
Если у вашего сайта низкая посещаемость, WP-Cron может запускаться с задержкой. Чтобы избежать этого, рекомендуем настроить системный cron на сервере, который будет вызывать wp-cron.php напрямую.
Пример команды для Linux:
* * * * * wget -q -O - https://your-site.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1Или используя curl:
* * * * * curl -s https://your-site.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1Это гарантирует запуск задач каждую минуту. В этом случае в wp-config.php желательно отключить автоматический запуск WP-Cron при посещении:
define('DISABLE_WP_CRON', true);Плагины для управления задачами и автоматизацией публикаций
Если не хочется писать код самостоятельно, можно использовать плагины с визуальными интерфейсами:
- WP Crontrol — позволяет просматривать, запускать и удалять задачи WP-Cron, а также создавать свои события.
- Schedule Posts Calendar — удобный календарь для планирования и редактирования времени публикации постов.
- Auto Post Scheduler — автоматически пересохраняет или публикует посты по расписанию, обновляя дату публикации.
Для интеграции с плагином WPRemark можно настроить автоматическую публикацию и обновление обзоров, что расширит функционал сайта без дополнительного кода.
Советы по оптимизации и безопасности
При использовании WP-Cron и автоматических обновлений важно учитывать нагрузку на сервер. Если задач много или они тяжёлые, лучше разбивать их на части и использовать задержки.
Также проверяйте работу кода на тестовом сайте, чтобы избежать случайного сброса данных или некорректных обновлений.
Для безопасности ограничьте доступ к wp-cron.php по IP или с помощью токенов, если вызываете его системным cron.
Итог
Автоматизация обновления публикаций в WordPress с помощью WP-Cron — мощный инструмент, который позволяет поддерживать сайт свежим и актуальным без постоянного ручного вмешательства. Используйте приведённые примеры кода для реализации конкретных задач и комбинируйте с плагинами для удобства.