Для своего REST API в WordPress зарегистрируйте маршрут через register_rest_route() на хуке rest_api_init. Начинайте с определения того, кто вправе обращаться к маршруту и какие данные он отдаёт, а не с запроса из JavaScript.
Маршрут или endpoint
Маршрут — адрес, например /wp-json/wpr8/v1/status. Endpoint связывает этот адрес с HTTP-методом, обработчиком и правилами доступа. Простая проверка GET подходит для обучения, но публичный endpoint не должен раскрывать приватные настройки, письма или информацию о пользователях.
Учебный endpoint со скрытым ответом
Пример возвращает статус только пользователю с правом manage_options. Его можно поместить в отдельный тестовый плагин WordPress.
<?php
/** Plugin Name: Example REST Status */
add_action( 'rest_api_init', function () {
register_rest_route( 'wpr8/v1', '/status', array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => function () {
return current_user_can( 'manage_options' );
},
'callback' => function ( WP_REST_Request $request ) {
return new WP_REST_Response( array( 'status' => 'ready' ), 200 );
},
) );
} );
Адрес тестирования: /wp-json/wpr8/v1/status. Для неавторизованного пользователя ожидается запрет доступа, а для администратора — JSON-ответ. Если тестируете из браузерного JavaScript, используйте поддерживаемый WordPress способ аутентификации REST; X-WP-Nonce помогает аутентифицированному запросу, но не заменяет проверку capability на сервере.
Аргументы и валидация
Для маршрута с параметрами укажите в args тип, обязательность, а при необходимости validate_callback и sanitize_callback. В обработчике проверяйте входные данные перед работой с БД. Если endpoint изменяет записи, используйте соответствующий HTTP-метод и проверяйте объектные права пользователя, а не только факт его авторизации.
Для сложных API создайте класс на базе WP_REST_Controller; у него будут отдельные методы проверки разрешений, получения данных и подготовки ответа.
Частые причины 401, 403 и 404
- 401/403: пользователь не прошёл аутентификацию либо у него нет нужной capability.
- 404: маршрут зарегистрирован не на том хуке, неверен namespace/путь или отключена маршрутизация.
- 500: PHP-ошибка внутри callback; диагностика — в журнале тестового окружения.
- CORS: браузер блокирует запрос из другого origin — нельзя лечить это включением
Access-Control-Allow-Origin: *для приватного API.
Контроль безопасности
Не возвращайте в JSON секреты, токены или подробные трассировки ошибок. Не используйте __return_true в permission_callback для закрытых операций. Перед релизом запустите тесты: гость, пользователь без прав, администратор, неверные параметры, отсутствие записи, неожиданный HTTP-метод.
Общий обзор API опубликован в инструкции по REST API. Для работы с клиентом сначала решите задачу проверки прав, потом подключайте фронтенд.
Источник: https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/
Материал был полезен?
Помогите нам сделать материалы точнее и понятнее.