Регистрация REST API Роутов в WordPress: синтаксис, параметры, примеры

Регистрация 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, что позволяет лучше управлять данными и функциональностью вашего сайта.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *