Автоматизация обновления публикаций в WordPress — важная задача для поддержания актуальности контента без постоянного ручного вмешательства. Особенно это актуально для сайтов с большим количеством статей, требующих периодического обновления дат или контента. В этой статье рассмотрим, как с помощью встроенной системы WP-Cron настроить автоматическое обновление публикаций по расписанию, а также как добавить в публикации актуальную дату обновления.
Что такое WP-Cron и почему он полезен для автоматизации
WP-Cron — это имитация системного планировщика задач cron из Unix, встроенная в WordPress. Основное отличие в том, что WP-Cron срабатывает при загрузке страниц сайта, а не по реальному времени. Это означает, что задача будет выполнена, только когда кто-то посетит ваш сайт, что обычно вполне достаточно для большинства случаев.
WP-Cron позволяет создавать собственные задачи, которые будут запускаться с нужной периодичностью. Это отличный инструмент для автоматизации обновления контента, очистки базы данных, отправки рассылок и других регулярных операций.
Для реализации автоматического обновления публикаций нам понадобится зарегистрировать новую задачу, которая будет запускаться, например, раз в сутки, и обновлять дату публикации или определённое метаполе в записях.
Пример задачи: обновление даты публикации у старых постов
Предположим, что мы хотим, чтобы дата публикации всех постов старше 30 дней обновлялась ежедневно, чтобы поддерживать их в топах выдачи за счёт свежей даты. Для этого создадим функцию, которая обновит поле post_date и вызовем её через WP-Cron.
Регистрация и запуск задачи WP-Cron
function wpmentor_register_cron_event() {
if ( ! wp_next_scheduled( 'wpmentor_update_old_posts_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpmentor_update_old_posts_hook' );
}
}
add_action( 'wp', 'wpmentor_register_cron_event' );
add_action( 'wpmentor_update_old_posts_hook', 'wpmentor_update_old_posts' );
Здесь мы проверяем, не запланирована ли уже наша задача, и если нет — добавляем её на ежедневный запуск. Далее привязываем функцию обновления публикаций к нашему хуку wpmentor_update_old_posts_hook.
Функция обновления даты публикации
function wpmentor_update_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'posts_per_page' => -1,
);
$old_posts = get_posts( $args );
foreach ( $old_posts as $post ) {
$new_date = current_time( 'mysql' );
$updated_post = array(
'ID' => $post->ID,
'post_date' => $new_date,
'post_date_gmt' => get_gmt_from_date( $new_date ),
);
wp_update_post( $updated_post );
}
}
Функция получает все опубликованные посты старше 30 дней, затем обновляет дату публикации на текущую дату. Обратите внимание, что обновляется и локальное время, и время в формате GMT — это важно для корректной работы WordPress.
Как проверить и отладить задачи WP-Cron
WP-Cron иногда может не срабатывать как ожидалось, особенно на сайтах с низким трафиком. Для удобства отладки рекомендуем установить плагин WP Crontrol. Он позволяет просматривать, запускать и удалять запланированные задачи прямо из админки.
С помощью WP Crontrol можно вручную запустить задачу и проверить, обновляются ли даты публикаций. Если задачи не выполняются, плагин поможет диагностировать проблему.
Дополнительные возможности: обновление метаполей и кастомное уведомление
Если вы не хотите менять дату публикации, а хотите добавить отдельное поле с датой последнего обновления, можно изменить функцию следующим образом:
function wpmentor_update_last_reviewed_meta() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
);
$posts = get_posts( $args );
foreach ( $posts as $post ) {
update_post_meta( $post->ID, '_wpmentor_last_reviewed', current_time( 'mysql' ) );
}
}
Такой подход позволяет сохранять дату последнего обновления отдельно и отображать её в шаблоне, например, с помощью:
echo 'Последнее обновление: ' . get_post_meta( get_the_ID(), '_wpmentor_last_reviewed', true );
Для уведомления админа о выполнении задачи можно добавить отправку письма или логирование в файл, например:
function wpmentor_notify_admin_on_update() {
$to = get_option( 'admin_email' );
$subject = 'Автоматическое обновление публикаций выполнено';
$message = 'Дата публикаций была обновлена автоматически в ' . current_time( 'mysql' );
wp_mail( $to, $subject, $message );
}
Использование WP-Cron в связке с плагинами WPGPT и Clearfy Pro
Если вы используете на сайте плагин WPGPT, можно дополнительно автоматизировать обновление контента с помощью генерации новых описаний или аннотаций для постов, запуская задачи WP-Cron для вызова AI-скриптов.
Плагин Clearfy Pro поможет оптимизировать работу WP-Cron, отключая ненужные задачи и улучшая производительность сайта.
Выводы и рекомендации
Автоматизация обновления публикаций через WP-Cron — простой и мощный способ поддерживать сайт свежим и оптимизированным. Понимание работы WP-Cron и умение создавать свои задачи — важный навык для разработчика WordPress.
Не забывайте проверять работоспособность задач и корректно обрабатывать время публикации, чтобы избежать проблем с SEO и отображением контента.