Как создать автоматический фоновой запрос в WordPress REST API

В современном развитии сайтов на WordPress часто возникает необходимость выполнять фоновые задачи, которые взаимодействуют с REST API без участия пользователя. Это может быть обновление данных, синхронизация, или периодическое выполнение каких-то действий. В этой статье разберём, как создать автоматический фоновой запрос в WordPress REST API с помощью встроенных возможностей и небольшого кода.

Что такое фоновые запросы в WordPress и зачем они нужны

Фоновые запросы — это вызовы к серверу, которые происходят без перезагрузки страницы и без прямого взаимодействия пользователя. Они позволяют:

  • Обновлять контент на сайте динамически.
  • Синхронизировать данные с внешними сервисами.
  • Выполнять задачи по расписанию.

WordPress предоставляет REST API, который является мощным инструментом для работы с данными через HTTP-запросы. Чтобы запускать фоновые запросы автоматически, можно использовать JavaScript на клиентской стороне или cron-задачи на сервере.

Использование wp-cron для автоматических REST API запросов

Одним из популярных способов выполнения фоновых задач в WordPress является wp-cron — внутренний планировщик задач. Мы можем создать хук, который будет выполнять запрос к REST API с нужными параметрами.

Для примера создадим задачу, которая каждые 30 минут будет отправлять GET-запрос к кастомному REST API endpoint, чтобы обновить кэш данных.

Шаг 1. Регистрация Cron-задачи

function wpdeveloper_add_cron_interval( $schedules ) {
    if( !isset( $schedules['every_thirty_minutes'] ) ) {
        $schedules['every_thirty_minutes'] = array(
            'interval' => 1800, // 30 минут в секундах
            'display'  => __('Каждые 30 минут')
        );
    }
    return $schedules;
}
add_filter( 'cron_schedules', 'wpdeveloper_add_cron_interval' );

function wpdeveloper_schedule_cron_job() {
    if ( ! wp_next_scheduled( 'wpdeveloper_background_rest_request' ) ) {
        wp_schedule_event( time(), 'every_thirty_minutes', 'wpdeveloper_background_rest_request' );
    }
}
add_action( 'wp', 'wpdeveloper_schedule_cron_job' );

Здесь мы добавили интервал 30 минут и запланировали событие, если оно ещё не запланировано.

Шаг 2. Обработка Cron-задачи — выполнение REST API запроса

function wpdeveloper_execute_background_request() {
    $url = get_rest_url( null, '/wpdeveloper/v1/update-cache' );
    $response = wp_remote_get( $url, array( 'timeout' => 15 ) );
    if ( is_wp_error( $response ) ) {
        error_log( 'WPDeveloper REST API cron error: ' . $response->get_error_message() );
    } else {
        error_log( 'WPDeveloper REST API cron success: ' . wp_remote_retrieve_body( $response ) );
    }
}
add_action( 'wpdeveloper_background_rest_request', 'wpdeveloper_execute_background_request' );

Функция делает GET-запрос к пользовательскому REST API endpoint. В данном примере предполагается, что у вас есть зарегистрированный маршрут /wpdeveloper/v1/update-cache, который обновляет данные.

Создание собственного REST API эндпоинта для фонового обновления

Чтобы пример был полным, нужно создать простой REST API маршрут, который будет обрабатывать запрос и выполнять нужные действия. Например, обновлять кэш.

function wpdeveloper_register_update_cache_route() {
    register_rest_route( 'wpdeveloper/v1', '/update-cache', array(
        'methods'  => 'GET',
        'callback' => 'wpdeveloper_handle_update_cache',
        'permission_callback' => '__return_true',
    ) );
}
add_action( 'rest_api_init', 'wpdeveloper_register_update_cache_route' );

function wpdeveloper_handle_update_cache( WP_REST_Request $request ) {
    // Здесь логика обновления кэша
    // Например, сбросить transient
    delete_transient( 'wpdeveloper_custom_cache' );

    // Можно заново записать данные в transient
    set_transient( 'wpdeveloper_custom_cache', 'Данные обновлены ' . current_time( 'mysql' ), HOUR_IN_SECONDS );

    return new WP_REST_Response( array( 'status' => 'success', 'message' => 'Кэш обновлён' ), 200 );
}

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

Использование JavaScript для фоновых запросов с фронтенда

Если нужно выполнять фоновые запросы не по расписанию, а в момент активности пользователя, можно использовать JavaScript с fetch или jQuery.ajax для вызова REST API.

Пример простого вызова с fetch:

fetch('/wp-json/wpdeveloper/v1/update-cache')
    .then(response => response.json())
    .then(data => console.log('Кэш обновлён:', data))
    .catch(error => console.error('Ошибка:', error));

Этот вызов можно запускать по событию, например, при загрузке страницы или по таймеру.

Плагины для управления фоновой работой и REST API

Для упрощения фоновых задач можно использовать плагины:

  • WP Crontrol — позволяет управлять wp-cron задачами из админки.
  • Clearfy Pro — оптимизирует работу WordPress, включая управление Cron.
  • Expert Review — автоматизирует процессы с отзывами через API.

Эти инструменты помогут контролировать фоновые процессы и интеграции с REST API.

Советы по отладке и безопасности

При реализации фоновых запросов обязательно:

  • Логируйте ошибки и успехи для мониторинга.
  • Обеспечьте безопасность эндпоинтов (если они меняют данные) с помощью nonce или авторизации.
  • Оптимизируйте интервалы вызовов, чтобы не перегружать сервер.
  • Тестируйте на локальном или staging сервере перед внедрением.

Используйте error_log для отладки Cron-задач, так как они не выводят ошибки на экран.

Автоматическое удаление старых записей WordPress по значению метаполя
22.01.2026
Как автоматизировать управление ролями и правами в WordPress
13.02.2026
Автоматическое удаление временно неактивных заказов WooCommerce
06.05.2026
Удаление продаж WooCommerce по дате и статусу: практическое руководство
03.05.2026
Как создать адаптивные блоки в WordPress Gutenberg
02.12.2025