Функция GET_REST_URL() в WordPress 4.4.0: применение, версия PHP, хуки.

## Функция GET_REST_URL() │ WP 4.4.0

Функция GET_REST_URL() возвращает URL для REST-эндпойнта на сайте. Важно обратить внимание, что возвращаемый URL **не экранирован**. 

### Применение функции

Эта функция использует:
- get_home_url()
- rest_get_url_prefix()

### Используется в

- rest_url()
- rest_output_link_wp_head()

### Производительность

- 1 раз: 0.000043 сек (очень быстро)
- 50000 раз: 0.82 сек (очень быстро)

### Версия PHP и WordPress

- PHP: 7.0.5, WordPress: 4.4.2

### Хуки функции

- rest_url

### Возвращаемое значение

Возвращаемая строка — полный URL к эндпойнту.

### Синтаксис использования

```php
get_rest_url( $blog_id, $path, $scheme );
  • $blog_id (int|null): ID блога. Если равен null, ��озвращает URL для текущего блога.
  • $path (string): Путь REST. Значение по умолчанию: '/'.
  • $scheme (string): Схема экранирования. Значение по умолчанию: 'rest'.

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

Пример 1: Получение URL различных REST-эндпойнтов

echo get_rest_url();
// Вывод: http://example.com/wp-json/

echo get_rest_url( 5 );
// Вывод: http://subsite.example.com/wp-json/

echo get_rest_url( null, '/foo' );
// Вывод: http://example.com/wp-json/foo

echo get_rest_url( null, '/foo', 'https' );
// Вывод: https://example.com/wp-json/foo

Пример 2: Получение REST-эндпойнта для JavaScript

Если вы используете REST API, скорее всего, вы также будете использовать JavaScript. Вы можете получить REST-эндпойнт, извлекая атрибут href из тега <link>, который WordPress добавляет в <head> вашего сайта:

var endpoint = document.querySelector('link[rel="https://api.w.org/"]').href;
// Этот код извлечет эндпойнт из тега:
// 

Примечания

  • Глобальная переменная: $wp_rewrite — компонент перезаписи в WordPress.

Изменения в версии

  • С версии 4.4.0 — функция была введена.

Код функции GET_REST_URL()

function get_rest_url( $blog_id = null, $path = '/', $scheme = 'rest' ) {
    if ( empty( $path ) ) {
        $path = '/';
    }

    $path = '/' . ltrim( $path, '/' );

    if ( is_multisite() && get_blog_option( $blog_id, 'permalink_structure' ) || get_option( 'permalink_structure' ) ) {
        global $wp_rewrite;

        if ( $wp_rewrite->using_index_permalinks() ) {
            $url = get_home_url( $blog_id, $wp_rewrite->index . '/' . rest_get_url_prefix(), $scheme );
        } else {
            $url = get_home_url( $blog_id, rest_get_url_prefix(), $scheme );
        }

        $url .= $path;
    } else {
        $url = trailingslashit( get_home_url( $blog_id, '', $scheme ) );
        if ( ! str_ends_with( $url, 'index.php' ) ) {
            $url .= 'index.php';
        }

        $url = add_query_arg( 'rest_route', $path, $url );
    }

    if ( is_ssl() && isset( $_SERVER['SERVER_NAME'] ) ) {
        if ( parse_url( get_home_url( $blog_id ), PHP_URL_HOST ) === $_SERVER['SERVER_NAME'] ) {
            $url = set_url_scheme( $url, 'https' );
        }
    }

    if ( is_admin() && force_ssl_admin() ) {
        $url = set_url_scheme( $url, 'https' );
    }

    return apply_filters( 'rest_url', $url, $path, $blog_id, $scheme );
}

Связанные функции

  • register_rest_field()
  • register_rest_route()
  • rest_ensure_response()
  • rest_is_boolean()
  • rest_output_link_wp_head()
  • rest_sanitize_array()
  • rest_stabilize_value()
  • rest_url()
  • WP_Application_Passwords::create_new_application_password()
  • wp_is_application_passwords_available()
  • wp_is_rest_endpoint()

Эти функции могут быть полезны при работе с REST API в WordPress.

Leave a Reply

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