register_rest_route()

Регистрирует маршрут REST API
Функция WordPress
INT 4.4.0
WordPress Icon

Описание функции

Функция register_rest_route() регистрирует маршрут REST API.

REST API в WordPress позволяет разработчикам создавать свои собственные маршруты API для выполнения различных операций с данными. Функция register_rest_route() используется для регистрации этих маршрутов.

Использование

register_rest_route( string $route_namespace, string $route, array $args = array(), bool $override = false ): bool

Функция register_rest_route() принимает четыре параметра: $route_namespace, $route, $args и $override.

$route_namespace (обязательный) — первый сегмент URL после префикса ядра. Должен быть уникальным для вашего пакета/плагина.

$route (обязательный) — базовый URL для добавляемого маршрута.

$args (необязательный) — массив опций для конечной точки или массив массивов для нескольких методов.

$override (необязательный) — если маршрут уже существует, следует ли его переопределить? Если значение true, то маршрут будет переопределен, если false, то маршрут будет объединен (с более новым переопределением, если есть дублирующиеся ключи).

Функция возвращает true в случае успешной регистрации маршрута и false в случае ошибки.

<?php
// Регистрация маршрута REST API
add_action( 'rest_api_init', 'my_plugin_register_routes' );
function my_plugin_register_routes() {
    // Регистрация маршрута для получения списка постов
    register_rest_route( 'my-plugin/v1', '/posts', array(
        'methods'  => 'GET',
        'callback' => 'my_plugin_get_posts',
    ) );
}
// Обработчик для получения списка постов
function my_plugin_get_posts( $request ) {
    // Ваш код для получения списка постов
    $posts = get_posts();
    
    // Возвращаем список постов в формате JSON
    return rest_ensure_response( $posts );
}
?>

В этом примере мы регистрируем маршрут REST API для получения списка постов. Маршрут будет доступен по URL /wp-json/my-plugin/v1/posts и будет обрабатываться функцией my_plugin_get_posts(). Внутри этой функции вы можете выполнять любую логику, необходимую для получения списка постов, и возвращать результат в формате JSON.

Примеры использования

Регистрация маршрута для получения списка пользователей


/**
 * Register a route to retrieve a list of users.
 */
function register_users_route() {
    register_rest_route( 'my-plugin/v1', '/users', array(
        'methods' => 'GET',
        'callback' => 'get_users_callback',
    ) );
}
add_action( 'rest_api_init', 'register_users_route' );
/**
 * Callback function to retrieve a list of users.
 *
 * @param WP_REST_Request $request The request object.
 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
 */
function get_users_callback( $request ) {
    // Retrieve users logic here
    $users = get_users();
    if ( empty( $users ) ) {
        return new WP_Error( 'no_users', 'No users found', array( 'status' => 404 ) );
    }
    return new WP_REST_Response( $users );
}

Создание нового пользователя через REST API


/**
 * Register a route to create a new user.
 */
function register_create_user_route() {
    register_rest_route( 'my-plugin/v1', '/users', array(
        'methods' => 'POST',
        'callback' => 'create_user_callback',
    ) );
}
add_action( 'rest_api_init', 'register_create_user_route' );
/**
 * Callback function to create a new user.
 *
 * @param WP_REST_Request $request The request object.
 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
 */
function create_user_callback( $request ) {
    $user_data = array(
        'user_login' => $request->get_param( 'username' ),
        'user_email' => $request->get_param( 'email' ),
        'user_pass' => $request->get_param( 'password' ),
    );
    $user_id = wp_insert_user( $user_data );
    if ( is_wp_error( $user_id ) ) {
        return new WP_Error( 'create_user_failed', $user_id->get_error_message(), array( 'status' => 400 ) );
    }
    return new WP_REST_Response( 'User created successfully' );
}

Обновление информации о пользователе


/**
 * Register a route to update user information.
 */
function register_update_user_route() {
    register_rest_route( 'my-plugin/v1', '/users/(?P<id>d+)', array(
        'methods' => 'PUT',
        'callback' => 'update_user_callback',
    ) );
}
add_action( 'rest_api_init', 'register_update_user_route' );
/**
 * Callback function to update user information.
 *
 * @param WP_REST_Request $request The request object.
 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
 */
function update_user_callback( $request ) {
    $user_id = $request->get_param( 'id' );
    $user_data = array(
        'ID' => $user_id,
        'user_email' => $request->get_param( 'email' ),
        'user_pass' => $request->get_param( 'password' ),
    );
    $updated = wp_update_user( $user_data );
    if ( is_wp_error( $updated ) ) {
        return new WP_Error( 'update_user_failed', $updated->get_error_message(), array( 'status' => 400 ) );
    }
    return new WP_REST_Response( 'User updated successfully' );
}

Удаление пользователя через REST API


/**
 * Register a route to delete a user.
 */
function register_delete_user_route() {
    register_rest_route( 'my-plugin/v1', '/users/(?P<id>d+)', array(
        'methods' => 'DELETE',
        'callback' => 'delete_user_callback',
    ) );
}
add_action( 'rest_api_init', 'register_delete_user_route' );
/**
 * Callback function to delete a user.
 *
 * @param WP_REST_Request $request The request object.
 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
 */
function delete_user_callback( $request ) {
    $user_id = $request->get_param( 'id' );
    $deleted = wp_delete_user( $user_id );
    if ( ! $deleted ) {
        return new WP_Error( 'delete_user_failed', 'Failed to delete user', array( 'status' => 400 ) );
    }
    return new WP_REST_Response( 'User deleted successfully' );
}

Вопросы и ответы

Как зарегистрировать маршрут REST API?

Для регистрации маршрута REST API в WordPress используется функция register_rest_route(). Она принимает несколько параметров и возвращает булево значение в зависимости от успешности операции.


register_rest_route( $route_namespace, $route, $args = array(), $override = false ): bool

Функция register_rest_route() регистрирует маршрут REST API.

Как указать уникальный префикс для маршрута REST API?

Уникальный префикс для маршрута REST API указывается в параметре $route_namespace. Он должен быть уникальным для вашего пакета/плагина.


$route_namespace = 'my-plugin/v1';

В данном примере, префикс маршрута REST API будет my-plugin/v1.

Как добавить базовый URL для маршрута REST API?

Базовый URL для маршрута REST API указывается в параметре $route. Он представляет собой базовый путь для вашего маршрута.


$route = '/my-route';

В данном примере, базовый URL для маршрута REST API будет /my-route.

Как переопределить существующий маршрут REST API?

Для переопределения существующего маршрута REST API необходимо установить параметр $override в значение true.


$override = true;

Если маршрут уже существует, то при установке этого параметра в значение true он будет переопределен.

Как объединить маршруты REST API с одинаковыми ключами?

Если вам нужно объединить маршруты REST API с одинаковыми ключами, вы можете использовать параметр $override функции register_rest_route(). По умолчанию этот параметр установлен в значение false, что означает, что новый маршрут будет объединен с существующим маршрутом с тем же ключом.

Например, если у вас есть два плагина, которые оба регистрируют маршрут с ключом «my-route», и вы хотите, чтобы маршруты обоих плагинов были доступны, вы можете вызвать функцию register_rest_route() с параметром $override равным true для второго плагина:


register_rest_route( 'my-plugin', 'my-route', array( 'methods' => 'GET', 'callback' => 'my_callback' ) );
register_rest_route( 'my-other-plugin', 'my-route', array( 'methods' => 'GET', 'callback' => 'my_other_callback' ), true );

Как проверить успешную регистрацию маршрута REST API?

Функция register_rest_route() возвращает значение true при успешной регистрации маршрута REST API и значение false в случае ошибки.

Вы можете использовать это значение для проверки успешной регистрации маршрута и выполнения соответствующих действий. Например:


if ( register_rest_route( 'my-plugin', 'my-route', array( 'methods' => 'GET', 'callback' => 'my_callback' ) ) ) {
    echo 'Маршрут успешно зарегистрирован.';
} else {
    echo 'Ошибка при регистрации маршрута.';
}

Какие ошибки могут возникнуть при регистрации маршрута REST API?

При регистрации маршрута REST API могут возникнуть следующие ошибки:

  • Маршрут уже существует и параметр $override установлен в значение false.
  • Некорректное значение параметра $route_namespace или $route.
  • Некорректное значение параметра $args.

В случае возникновения ошибки функция register_rest_route() вернет значение false.

Какие альтернативы функции register_rest_route() существуют в WordPress?

В WordPress существуют альтернативные способы регистрации маршрутов REST API:

  • Использование класса WP_REST_Controller и его метода register_routes().
  • Использование хука rest_api_init для регистрации маршрутов.

Оба способа также позволяют регистрировать маршруты REST API и предоставляют дополнительные возможности для настройки и управления маршрутами.

Функция register_rest_route() в WordPress позволяет регистрировать маршруты REST API. Она принимает параметры, такие как пространство имен маршрута, базовый URL маршрута и дополнительные параметры для настройки маршрута. Функция возвращает значение true при успешной регистрации маршрута и значение false в случае ошибки. При регистрации маршрута возможны ошибки, такие как дублирование маршрута или некорректные значения параметров. В WordPress также существуют альтернативные способы регистрации маршрутов REST API, такие как использование класса WP_REST_Controller и хука rest_api_init.

Связанные элементы

  • Функция rest_url(): возвращает URL для REST API.
  • Функция rest_do_request(): выполняет запрос к REST API.
  • Функция rest_ensure_response(): обеспечивает, что ответ является объектом WP_REST_Response.
  • Функция rest_output_link_header(): выводит заголовок Link для пагинации результатов REST API.
  • Хук rest_pre_dispatch: вызывается перед обработкой запроса REST API.
  • Хук rest_post_dispatch: вызывается после обработки запроса REST API.
  • Класс WP_REST_Controller: базовый класс для контроллеров REST API.
  • Класс WP_REST_Request: представляет запрос к REST API.
  • Класс WP_REST_Response: представляет ответ REST API.
Обсуждение