Регистрация REST API Роутов в WordPress
Функция register_rest_route() позволяет вам создавать новые маршруты (роуты) для REST API в WordPress. Данная статья объясняет, как использовать эту функцию, чтобы вы могли расширить возможности вашего сайта.
Важные замечания
- Используйте эту функцию только после хука
rest_api_init. - Если маршрут успешно зарегистрирован, функция вернет
true, в случае ошибки —false.
Синтаксис
register_rest_route( $route_namespace, $route, $args, $override );
Параметры
-
$route_namespace (обязательный): Строка, уникальная для вашего плагина или темы, которая находится в URL после основного префикса.
-
$route (обязательный): Основной URL для маршрута, который вы добавляете.
-
$args (необязательный): Массив параметров для конечной точки (endpoint) или массив массивов для нескольких методов.
-
$override (необязательный): Если маршрут уже существует, нужно ли его переопределить?
trueпереопределяет,falseобъединяет (новые ключи заменяют старые).
Возвращаемое значение
true— если успешно,false— если произошла ошибка.
Примеры использования
Пример 1: Регистрация маршрута с несколькими параметрами
add_action( 'rest_api_init', 'add_custom_users_api' );
function add_custom_users_api() {
register_rest_route( 'mmw/v1', '/users/market=(?P[a-zA-Z0-9-]+)/lat=(?P[a-z0-9 .-]+)/long=(?P[a-z0-9 .-]+)', [
'methods' => 'GET',
'callback' => 'get_custom_users_data',
'permission_callback' => 'permission_check',
]);
}
function get_custom_users_data( $data ) {
// Получаем пользователей по рынку
$users = mmw_get_custom_users();
$result = [];
foreach ( $users as $user ) {
$market = $user['Market'];
$long = $user['long'];
$lat = $user['lat'];
if( intval($market) === intval( trim($data['market']) ) ) {
$result[] = [
'user_login' => $user->user_login,
'avatar_url' => get_avatar_url($user->ID),
'lat' => $lat,
'long' => $long
];
}
}
return $result;
}
Важно: Убедитесь, что ваши регулярные выражения корректны. Если данные не совпадают, URL вернет 404.
Пример 2: Получение постов указанного автора
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/author/(?Pd+)', array(
'methods' => 'GET',
'callback' => 'my_awesome_func',
'permission_callback' => 'prefix_get_private_data_permissions_check',
));
});
function my_awesome_func( WP_REST_Request $request ) {
$posts = get_posts( array(
'author' => (int) $request['id'],
));
if ( empty( $posts ) ) {
return new WP_Error('no_author_posts', 'Посты не найдены', array( 'status' => 404 ));
}
return $posts;
}
Теперь вы можете получить посты автора с ID = 1 с помощью GET-запроса по адресу:
http://ваш-сайт.ru/wp-json/myplugin/v1/author/1
Дополнительные возможности
- Параметры
argsмогут включать дополнительные настройки для каждой переменной, такие как функции валидации.
Пример 3: Аргументы маршрута
add_action( 'rest_api_init', function() {
register_rest_route( 'myplugin/v1', '/author/(?Pd+)', [
'methods' => 'GET',
'callback' => 'my_awesome_func',
'args' => [
'id' => [
'validate_callback' => function( $param, $request, $key ) {
return is_numeric( $param );
},
],
],
]);
});
Заключение
Используя register_rest_route(), вы можете легко создавать свои собственные эндпоинты для REST API в WordPress, что позволяет лучше управлять данными и функциональностью вашего сайта.