Как автоматически обновлять контент в WordPress с помощью AJAX и WP-Cron

Автоматическое обновление контента на сайте WordPress — востребованная задача, особенно для новостных порталов, блогов и сайтов с динамическими данными. В этой статье мы рассмотрим, как настроить автоматическое обновление части контента без перезагрузки страницы с помощью AJAX, а также как использовать WP-Cron для планирования фоновых задач обновления контента.

Почему важно обновлять контент автоматически

Обновление контента в реальном времени повышает удобство для посетителей: им не нужно вручную обновлять страницу, чтобы увидеть новые записи или данные. Это критично для сайтов с часто меняющейся информацией, например, с курсами валют, новостями, результатами спортивных событий.

Кроме того, автоматизация позволяет снизить нагрузку на администраторов сайта, исключив необходимость постоянного ручного обновления.

Обновление контента через AJAX в WordPress

AJAX (Asynchronous JavaScript and XML) позволяет асинхронно загружать данные с сервера без перезагрузки страницы. В WordPress AJAX реализуется через admin-ajax.php, что делает интеграцию удобной и стандартизированной.

Настройка AJAX-запроса

Для начала создадим функцию, которая будет возвращать свежий контент. Например, последние 5 записей из категории "Новости".

function wprobot_get_latest_news() {
    $args = [
        'post_type' => 'post',
        'posts_per_page' => 5,
        'category_name' => 'novosti',
        'orderby' => 'date',
        'order' => 'DESC'
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        ob_start();
        ?><ul><?php
        while ($query->have_posts()) {
            $query->the_post();
            ?><li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> - <?php the_date(); ?></li><?php
        }
        ?></ul><?php
        wp_reset_postdata();
        $content = ob_get_clean();
        wp_send_json_success($content);
    } else {
        wp_send_json_error('Новостей не найдено');
    }
    wp_die();
}
add_action('wp_ajax_wprobot_get_latest_news', 'wprobot_get_latest_news');
add_action('wp_ajax_nopriv_wprobot_get_latest_news', 'wprobot_get_latest_news');

Данная функция формирует HTML-список последних новостей и возвращает его в формате JSON.

JavaScript для AJAX-запроса

Добавим скрипт, который через заданный интервал будет отправлять AJAX-запрос и обновлять содержимое блока с новостями.

jQuery(document).ready(function($) {
    function wprobotUpdateNews() {
        $.ajax({
            url: wprobot_ajax_obj.ajax_url,
            method: 'POST',
            data: {
                action: 'wprobot_get_latest_news'
            },
            success: function(response) {
                if (response.success) {
                    $('#wprobot-news-container').html(response.data);
                }
            }
        });
    }
    // Обновлять новости каждые 5 минут
    setInterval(wprobotUpdateNews, 300000);
    // Первоначальный вызов при загрузке страницы
    wprobotUpdateNews();
});

Для передачи URL AJAX-запроса в JS необходимо добавить локализацию скрипта в PHP:

function wprobot_enqueue_scripts() {
    wp_enqueue_script('wprobot-ajax-script', get_template_directory_uri() . '/js/wprobot-ajax.js', ['jquery'], null, true);
    wp_localize_script('wprobot-ajax-script', 'wprobot_ajax_obj', [
        'ajax_url' => admin_url('admin-ajax.php')
    ]);
}
add_action('wp_enqueue_scripts', 'wprobot_enqueue_scripts');

Планирование обновления данных через WP-Cron

WP-Cron позволяет запускать задачи по расписанию внутри WordPress. Это удобно для обновления кэшей, импорта данных, выполнения других периодических операций.

Создание задачи для обновления кэша новостей

Предположим, что мы хотим обновлять кэш новостей в базе раз в 10 минут, чтобы AJAX-запрос быстро выдавал готовые данные.

function wprobot_schedule_news_update() {
    if (!wp_next_scheduled('wprobot_news_update_event')) {
        wp_schedule_event(time(), 'ten_minutes', 'wprobot_news_update_event');
    }
}
add_action('wp', 'wprobot_schedule_news_update');

function wprobot_update_news_cache() {
    $args = [
        'post_type' => 'post',
        'posts_per_page' => 5,
        'category_name' => 'novosti',
        'orderby' => 'date',
        'order' => 'DESC'
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        ob_start();
        ?><ul><?php
        while ($query->have_posts()) {
            $query->the_post();
            ?><li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> - <?php the_date(); ?></li><?php
        }
        ?></ul><?php
        wp_reset_postdata();
        $content = ob_get_clean();
        set_transient('wprobot_cached_news', $content, 10 * MINUTE_IN_SECONDS);
    }
}
add_action('wprobot_news_update_event', 'wprobot_update_news_cache');

// Регистрируем интервал 10 минут
function wprobot_add_cron_interval($schedules) {
    $schedules['ten_minutes'] = [
        'interval' => 600, // 600 секунд = 10 минут
        'display' => 'Каждые 10 минут'
    ];
    return $schedules;
}
add_filter('cron_schedules', 'wprobot_add_cron_interval');

Использование кэшированных данных в AJAX

В функции AJAX для получения новостей заменим запрос на получение данных из кэша:

function wprobot_get_latest_news_cached() {
    $cached = get_transient('wprobot_cached_news');
    if ($cached) {
        wp_send_json_success($cached);
    } else {
        wp_send_json_error('Данные временно недоступны');
    }
    wp_die();
}
add_action('wp_ajax_wprobot_get_latest_news', 'wprobot_get_latest_news_cached');
add_action('wp_ajax_nopriv_wprobot_get_latest_news', 'wprobot_get_latest_news_cached');

Рекомендации по плагинам для автоматического обновления контента

Если вы предпочитаете готовые решения, рассмотрите следующие плагины:

  • WP Automatic — автоматический импорт контента из RSS, социальных сетей и других источников.
  • Clearfy Pro — оптимизационный плагин с функциями ускорения и управления кэшированием.
  • OmniVideo — для автоматического обновления видео-блока с YouTube и других платформ.

Эти плагины можно настроить под автоматическое обновление нужных блоков на сайте без дополнительного программирования.

Выводы и советы по реализации

Автоматическое обновление контента — задача, требующая правильного баланса между частотой обновлений и нагрузкой на сервер. Использование AJAX позволяет обновлять только нужные части страницы, не перезагружая весь сайт, а WP-Cron помогает выполнять тяжелые запросы в фоне.

Для повышения производительности рекомендуется использовать кэширование и оптимизировать запросы к базе данных.

При интеграции AJAX и WP-Cron важно обеспечить обработку ошибок и fallback для пользователей с отключенным JavaScript.

Используйте приведенные примеры в своей разработке и адаптируйте под задачи вашего проекта.

Подробнее о плагинах для оптимизации и автоматизации можно узнать на WPSHOP.ru.

Как настроить автоматическое отображение связанных записей в WordPress
16.12.2025
Как автоматически создавать уникальные изображения для постов в WordPress
06.04.2026
Как автоматизировать создание записей в WordPress с помощью роботов
03.11.2025
Автоматическое удаление неактивных заказов в WooCommerce: пошаговое руководство
29.04.2026
Как автоматически создавать резервные копии WordPress на Google Drive
19.02.2026