Проверка запроса к REST API с функцией WP_IS_REST_ENDPOINT()

WP_IS_REST_ENDPOINT() │ WP 6.5.0

Функция WP_IS_REST_ENDPOINT() проверяет, обрабатывается ли в данный момент запрос к REST API.

Это может быть отдельный запрос к REST API или внутренний запрос, который нужно обработать во время обычной загрузки страницы.

Хуки функции

Есть хук wp_is_rest_endpoint, который позволяет расширять функциональность этой функции.

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

Функция возвращает true или false. Она возвращает true, если в данный момент обрабатывается запрос к REST API, иначе — false.

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

Вы можете использовать функцию следующим образом:

wp_is_rest_endpoint();

Примеры

Пример 1: Код из плагина Pods

Из файла pods/src/Pods/WP/Bindings.php плагина Pods – Custom Content Types and Fields:

/**
 * Получает связанное значение для связанного блока.
 *
 * @since 3.2.0
 *
 * @param array    $source_args    Список исходных аргументов из блока.
 * @param WP_Block $block_instance  Экземпляр блока.
 * @param string   $attribute_name  Название атрибута блока.
 *
 * @return string Связанное значение.
 */
public function get_value( $source_args, $block_instance, $attribute_name ) {
    if ( empty( $source_args['field'] ) ) {
            if ( is_admin() || wp_is_rest_endpoint() || pods_is_admin() ) {
                    return __( 'Вы должны предоставить "field" для привязки.', 'pods' );
            }
            return '';
    }

    /** @var Field $field_block */
    $field_block = pods_container( 'pods.blocks.field' );

    if ( ! $field_block ) {
            if ( is_admin() || wp_is_rest_endpoint() || pods_is_admin() ) {
                    return __( 'Блоки Pods не включены.', 'pods' );
            }
            return '';
    }

    $value = $field_block->render( $source_args, '', $block_instance );

    // Поддерживаем только полный HTML для атрибута 'content'.
    if ( 'content' !== $attribute_name ) {
            $value = wp_strip_all_tags( $value );
    }

    return $value;
}

Пример 2: Код из плагина Markup Markdown

Из файла MarkupMarkdown/Core/Support.php плагина Markup Markdown:

/**
 * Выводит обработку markdown
 *
 * @since 3.3.4
 * @access public
 *
 * @return Void
 */
public function whitelist_wp_api() {
    if ( ! wp_is_rest_endpoint() ) {
        return false;
    }
    $this->prepare_markdown_editor();
    // Разрешаем markdown в REST API для описаний терминов
    add_filter( 'rest_prepare_category', array( $this, 'prepare_desc_field' ), 10, 3 );
    add_filter( 'rest_prepare_post_tag', array( $this, 'prepare_desc_field' ), 10, 3 );
    if ( function_exists( 'get_taxonomies' ) ) {
        $my_taxonomies = get_taxonomies( array( 'show_in_rest' => true, '_builtin' => false ) );
        foreach( $my_taxonomies as $tax ) {
            add_filter( 'rest_prepare_' . $tax, array( $this, 'prepare_desc_field' ), 10, 3 );
        }
    }
    $this->set_content_filters();
}

/**
 * Небольшо�� переключатель для применения или отказа от фильтров markdown
 * С 3.0: Проверка типа поста внутри цикла
 *
 * @access public
 * @since 2.0
 *
 * @param String $field_content HTML контент
 * @param Integer $cache_allowed 1, если кеш разрешен для данного поля
 *
 * @return String $content Измененный HTML контент
 */
private function content_data( $field_content, $cache_allowed ) {
    if ( wp_is_rest_endpoint() || ( ( is_home() || is_front_page() || is_singular() || is_archive() ) && in_the_loop() && is_main_query() ) ) {
        if ( post_type_supports( get_post_type(), 'markup_markdown' ) ) {
            return apply_filters( 'post_markdown2html', $field_content, $cache_allowed );
        } else {
            return $field_content;
        }
    } else {
        return $field_content;
    }
}

Примечания

  • Глобальная переменная: WP_REST_Server $wp_rest_server. Это экземпляр REST сервера.

Журнал изменений

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

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

Из файла wp-includes/rest-api.php:

function wp_is_rest_endpoint() {
    /* @var WP_REST_Server $wp_rest_server */
    global $wp_rest_server;

    // Проверяем, является ли это отдельным запросом к REST.
    $is_rest_endpoint = wp_is_serving_rest_request();
    if ( ! $is_rest_endpoint ) {
        // Проверяем, обрабатывается ли внутренний запрос к REST.
        $is_rest_endpoint = isset( $wp_rest_server ) && $wp_rest_server->is_dispatching();
    }

    /**
     * Фильтрует, обрабатывается ли в данный момент запрос к конечной точке REST.
     *
     * Это может быть отдельный запрос к REST API или внутренний запрос,
     * обработанный во время обычной загрузки страницы.
     *
     * @since 6.5.0
     *
     * @param bool $is_request_endpoint Обрабатывается ли запрос к конечной точке REST.
     */
    return (bool) apply_filters( 'wp_is_rest_endpoint', $is_rest_endpoint );
}

Теперь вы обладаете базовыми знаниями о функции WP_IS_REST_ENDPOINT(). Если у вас есть вопросы или вы хотите узнать больше, не стесняйтесь спрашивать!

Leave a Reply

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