В современном развитии сайтов на 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-задач, так как они не выводят ошибки на экран.