Автоматизация обновления контента в WordPress — важная задача для сайтов, которые регулярно публикуют новости, статьи или другие данные. Большинство пользователей предпочитают использовать плагины, но иногда хочется обойтись без них, чтобы уменьшить нагрузку на сайт и избежать конфликтов. В этой статье разберём, как с помощью собственного кода реализовать автоматическое обновление контента, используя встроенные возможности WordPress.
Почему стоит автоматизировать обновление контента без плагинов
Плагины удобны, но у них есть и недостатки. Во-первых, каждый плагин увеличивает вес сайта и нагрузку на сервер. Во-вторых, из-за несовместимости плагинов могут возникнуть ошибки. В-третьих, иногда нужно настроить именно уникальную логику обновления, которую сложно реализовать в универсальном плагине.
Поэтому грамотное решение — написать собственный скрипт, используя WordPress Cron API (WP-Cron). WP-Cron позволяет запускать в заданное время произвольные функции, которые мы определим в коде темы или отдельном кастомном плагине.
Использование WP-Cron для планирования задач обновления контента
WP-Cron — это эмуляция системного cron, которая запускается при заходе на сайт. Это значит, что задачи выполняются с небольшой задержкой, но для обновления контента это вполне приемлемо.
Чтобы добавить задачу, используем функцию wp_schedule_event. Ниже пример кода, который планирует задачу обновления каждую ночь в 3 часа:
function wp7_schedule_content_update() {
if ( ! wp_next_scheduled( 'wp7_daily_content_update' ) ) {
wp_schedule_event( strtotime('03:00:00'), 'daily', 'wp7_daily_content_update' );
}
}
add_action( 'wp', 'wp7_schedule_content_update' );
В этом коде мы проверяем, не запланировано ли уже событие wp7_daily_content_update, и если нет — создаём его. Событие будет срабатывать ежедневно в 3 часа утра.
Создание функции обновления контента
Далее нужно повесить функцию на наше событие, которая и будет обновлять записи. Например, обновим дату публикации для всех записей в категории «Новости»:
function wp7_handle_content_update() {
$args = array(
'category_name' => 'novosti',
'posts_per_page' => -1,
'post_status' => 'publish'
);
$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 );
}
}
add_action( 'wp7_daily_content_update', 'wp7_handle_content_update' );
Этот код получает все публикации в категории «Новости» и обновляет дату публикации на текущую. Таким образом, контент «поднимается» в ленте и выглядит свежим.
Добавление новых записей автоматически из внешних источников
Другой распространённый сценарий — автоматически публиковать записи из внешних RSS или API. Рассмотрим пример, как импортировать новости из RSS-ленты без плагинов.
Пример импорта из RSS с помощью встроенного SimpleXML
Добавим в функцию, которая вызывается по крону, код загрузки и парсинга RSS:
function wp7_import_rss_news() {
$rss_url = 'https://example.com/feed/'; // URL RSS-ленты
$rss = simplexml_load_file( $rss_url );
if ( ! $rss ) {
error_log('WP7: Не удалось загрузить RSS');
return;
}
foreach ( $rss->channel->item as $item ) {
$title = (string) $item->title;
$link = (string) $item->link;
$pubDate = date('Y-m-d H:i:s', strtotime((string) $item->pubDate));
$content = (string) $item->description;
// Проверяем, есть ли уже запись с таким заголовком
$existing = get_page_by_title( $title, OBJECT, 'post' );
if ( $existing ) {
continue; // пропускаем повтор
}
// Создаём новую запись
$post_data = array(
'post_title' => $title,
'post_content' => $content . '<br><a href="' . esc_url($link) . '">Источник</a>',
'post_status' => 'publish',
'post_date' => $pubDate,
'post_author' => 1,
'post_category' => array( get_cat_ID('Новости') )
);
wp_insert_post( $post_data );
}
}
add_action( 'wp7_daily_content_update', 'wp7_import_rss_news' );
Этот код раз в сутки подгружает новые записи из RSS и создаёт посты в категории Новости. Таким образом сайт всегда будет содержать свежий контент без ручного вмешательства.
Отладка и мониторинг Cron задач
WP-Cron запускается при посещении сайта, и иногда задачи не срабатывают вовремя из-за низкого трафика. Для повышения надёжности можно настроить системный cron и вызвать wp-cron.php по расписанию.
Для отладки полезно выводить логи в файл или использовать плагин Clearfy, который помогает управлять WP-Cron и оптимизировать работу сайта.
Пример логирования
Добавим в функцию простое логирование:
function wp7_handle_content_update() {
error_log('WP7: Начало обновления контента');
// ... основной код обновления
error_log('WP7: Обновление контента завершено');
}
Это поможет понять, запускается ли задача и выполняется ли она без ошибок.
Заключение по автоматизации обновления контента без плагинов
Использование WP-Cron и собственных функций позволяет полностью контролировать процесс обновления контента, не нагружая сайт лишними плагинами. Вы можете настроить любые сценарии — от простого обновления даты до импорта данных из внешних источников.
Если хотите расширить возможности, обратите внимание на инструменты от WPSHOP, которые помогут оптимизировать и автоматизировать работу сайта.