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

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

Что такое WP-Cron и зачем он нужен для обновления контента

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

Для задач обновления контента WP-Cron идеально подходит для фонового обновления, но чтобы пользователь видел свежие данные без перезагрузки, нужна интеграция с AJAX.

Основные особенности WP-Cron

  • Запускается при загрузке страницы пользователем;
  • Можно задавать интервалы — от минут до часов;
  • Поддерживает создание собственных событий и callback-функций;
  • Не требует внешних зависимостей и дополнительной настройки сервера.

WP-Cron идеально подходит для обновления информации на сайте, а AJAX поможет динамически подтягивать свежие данные на фронтенд.

Как настроить WP-Cron для периодического обновления данных

Для начала создадим функцию, которая будет собирать или обновлять нужные данные, а затем организуем её вызов по расписанию через WP-Cron.

Добавим код в файл functions.php вашей темы или в отдельный плагин:

function wptemp_update_custom_data() {
    // Здесь логика обновления данных, например, запрос к внешнему API
    $response = wp_remote_get('https://api.example.com/data');
    if (is_wp_error($response)) {
        return;
    }
    $data = wp_remote_retrieve_body($response);
    // Сохраняем данные в опции для дальнейшего использования
    update_option('wptemp_custom_data', maybe_unserialize($data));
}

// Регистрируем событие при активации темы или плагина
function wptemp_schedule_cron_event() {
    if (!wp_next_scheduled('wptemp_update_event')) {
        wp_schedule_event(time(), 'hourly', 'wptemp_update_event');
    }
}
add_action('wp', 'wptemp_schedule_cron_event');

// Привязываем нашу функцию к событию
add_action('wptemp_update_event', 'wptemp_update_custom_data');

В этом примере мы запланировали обновление данных каждый час. При первом посещении сайта будет создано событие wptemp_update_event, которое вызовет функцию wptemp_update_custom_data.

Настройка кастомных интервалов для WP-Cron

По умолчанию WordPress поддерживает интервалы: hourly, twicedaily, daily. Если нужно более частое обновление, например каждые 15 минут, добавим свой интервал:

function wptemp_custom_cron_intervals($schedules) {
    $schedules['quarter_hour'] = array(
        'interval' => 15 * 60, // 15 минут в секундах
        'display' => 'Каждые 15 минут'
    );
    return $schedules;
}
add_filter('cron_schedules', 'wptemp_custom_cron_intervals');

// Используем новый интервал
function wptemp_schedule_cron_event() {
    if (!wp_next_scheduled('wptemp_update_event')) {
        wp_schedule_event(time(), 'quarter_hour', 'wptemp_update_event');
    }
}

Динамическое обновление контента на странице с помощью AJAX

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

Создание AJAX обработчика в WordPress

Добавьте в functions.php следующий код:

function wptemp_ajax_get_custom_data() {
    // Проверка nonce для безопасности
    check_ajax_referer('wptemp_nonce', 'security');

    $data = get_option('wptemp_custom_data');
    if (!$data) {
        wp_send_json_error('Данные не найдены');
    }
    wp_send_json_success($data);
}
add_action('wp_ajax_wptemp_get_data', 'wptemp_ajax_get_custom_data');
add_action('wp_ajax_nopriv_wptemp_get_data', 'wptemp_ajax_get_custom_data');

Подключение JavaScript для AJAX-запросов

Зарегистрируем и подключим скрипт, который будет обращаться к серверу по таймеру:

function wptemp_enqueue_scripts() {
    wp_enqueue_script('wptemp-ajax', get_stylesheet_directory_uri() . '/js/wptemp-ajax.js', array('jquery'), null, true);
    wp_localize_script('wptemp-ajax', 'wptemp_ajax_obj', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wptemp_nonce'),
    ));
}
add_action('wp_enqueue_scripts', 'wptemp_enqueue_scripts');

Создайте файл wptemp-ajax.js в папке js темы и добавьте туда:

jQuery(document).ready(function($) {
    function wptempFetchData() {
        $.ajax({
            url: wptemp_ajax_obj.ajax_url,
            method: 'POST',
            data: {
                action: 'wptemp_get_data',
                security: wptemp_ajax_obj.nonce
            },
            success: function(response) {
                if (response.success) {
                    $('#wptemp-data-container').html(JSON.stringify(response.data));
                } else {
                    $('#wptemp-data-container').html('Ошибка загрузки данных');
                }
            },
            error: function() {
                $('#wptemp-data-container').html('Ошибка AJAX запроса');
            }
        });
    }

    // Обновляем данные каждые 5 минут
    wptempFetchData();
    setInterval(wptempFetchData, 300000);
});

Оптимизация и рекомендации по использованию

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

  • WP-Cron зависит от посещаемости сайта. Для сайтов с низким трафиком лучше настроить системный cron, вызывающий wp-cron.php через curl или wget.
  • Кэширование. Если у вас активен кеш (например, плагин Clearfy Pro), убедитесь, что AJAX-запросы не кешируются, чтобы данные обновлялись корректно.
  • Безопасность. Используйте nonce и проверяйте права пользователей, если данные чувствительные.
  • Обработка ошибок. Реализуйте логирование ошибок обновления данных и уведомления для администраторов.

Для сайтов с большим количеством динамического контента можно рассмотреть плагины, которые расширяют возможности WP-Cron и AJAX, например Clearfy Pro для оптимизации работы планировщика и кеша.

Пример расширения: вывод обновлённого контента в виджете

Создадим простой виджет с динамическим обновлением данных:

class WPTEMP_Dynamic_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wptemp_dynamic_widget',
            'Динамический виджет WPTEMP'
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        echo '<div id="wptemp-data-container">Загрузка данных...</div>';
        echo $args['after_widget'];
    }
}

function wptemp_register_dynamic_widget() {
    register_widget('WPTEMP_Dynamic_Widget');
}
add_action('widgets_init', 'wptemp_register_dynamic_widget');

Виджет выведет контейнер, который будет обновляться через AJAX, благодаря подключённому выше скрипту. Таким образом, можно легко добавить динамически обновляемые данные в любую область сайта.

Оптимизация памяти и управление использованием памяти в WordPress
08.04.2026
Как автоматизировать обновление контента в WordPress с помощью WP-Cron и AJAX
16.03.2026
Как использовать WP-CLI для управления темами и плагинами WordPress
29.01.2026
Успешное использование временных таблиц в WordPress: практические советы и примеры
06.01.2026
Как избежать конфликтов между плагинами в WordPress
12.03.2026