wp_is_rest_endpoint()WP 6.5.0

Проверяет, является ли текущий запрос запросом к REST API.

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

Хуки из функции

Возвращает

true|false. true при запросе к REST API, false в остальных случаях.

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

wp_is_rest_endpoint();

Примеры

0

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

Пример из кода плагина Pods – Custom Content Types and Fields из файла pods/src/Pods/WP/Bindings.php.

/**
 * Get the bound value for a bound block.
 *
 * @since 3.2.0
 *
 * @param array    $source_args    List of source arguments from the block.
 * @param WP_Block $block_instance The block instance.
 * @param string   $attribute_name The name of the block attribute.
 *
 * @return string The bound value.
 */
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 __( 'You must provide the "field" of the field to bind.', '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 blocks are not enabled.', 'pods' );
			}
			return '';
	}

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

	// Only support full HTML for the content attribute.
	if ( 'content' !== $attribute_name ) {
			$value = wp_strip_all_tags( $value );
	}

	return $value;
}

Пример из кода плагина Markup Markdown из файла MarkupMarkdown/Core/Support.php.

/**
 * Output the rendering of markdown
 *
 * @since 3.3.4
 * @access public
 *
 * @return Void
 */
public function whitelist_wp_api() {
		if ( ! wp_is_rest_endpoint() ) :
				return false;
		endif;
		$this->prepare_markdown_editor();
		# Allow markdown on REST API with terms description
		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 );
				endforeach;
		endif;
		$this->set_content_filters();
}

/**
 * Tiny switch to apply or not the markdown filters
 * Since 3.0: Checking the post type inside the loop
 * https://developer.wordpress.org/reference/hooks/the_content/
 *
 * @access public
 * @since 2.0
 *
 * @param String $field_content the HTML content
 * @param Integer $cache_allowed 1 if cache is allowed with the field
 *
 * @return String $content The modified HTML content
 */
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;
				endif;
		else :
				return $field_content;
		endif;
}

Заметки

  • Global. WP_REST_Server. $wp_rest_server REST server instance.

Список изменений

С версии 6.5.0 Введена.

Код wp_is_rest_endpoint() WP 6.7.1

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

	// Check whether this is a standalone REST request.
	$is_rest_endpoint = wp_is_serving_rest_request();
	if ( ! $is_rest_endpoint ) {
		// Otherwise, check whether an internal REST request is currently being handled.
		$is_rest_endpoint = isset( $wp_rest_server )
			&& $wp_rest_server->is_dispatching();
	}

	/**
	 * Filters whether a REST endpoint request is currently being handled.
	 *
	 * This may be a standalone REST API request, or an internal request dispatched from within a regular page load.
	 *
	 * @since 6.5.0
	 *
	 * @param bool $is_request_endpoint Whether a REST endpoint request is currently being handled.
	 */
	return (bool) apply_filters( 'wp_is_rest_endpoint', $is_rest_endpoint );
}