WP_REST_Server::embed_links() WordPress Method

The WP_REST_Server::embed_links() method is used to enable or disable embedded links in the WordPress REST API. This can be useful for clients that want to avoid following links, or for security reasons.

WP_REST_Server::embed_links( array $data, bool|string[] $embed = true ) #

Embeds the links from the data into the request.


Parameters

$data

(array)(Required)Data from the request.

$embed

(bool|string[])(Optional)Whether to embed all links or a filtered list of link relations.

Default value: true


Top ↑

Return

(array) Data with sub-requests embedded.

  • '_links'
    (array) Links.
  • '_embedded'
    (array) Embedded objects.


Top ↑

Source

File: wp-includes/rest-api/class-wp-rest-server.php

	protected function embed_links( $data, $embed = true ) {
		if ( empty( $data['_links'] ) ) {
			return $data;
		}

		$embedded = array();

		foreach ( $data['_links'] as $rel => $links ) {
			// If a list of relations was specified, and the link relation
			// is not in the list of allowed relations, don't process the link.
			if ( is_array( $embed ) && ! in_array( $rel, $embed, true ) ) {
				continue;
			}

			$embeds = array();

			foreach ( $links as $item ) {
				// Determine if the link is embeddable.
				if ( empty( $item['embeddable'] ) ) {
					// Ensure we keep the same order.
					$embeds[] = array();
					continue;
				}

				if ( ! array_key_exists( $item['href'], $this->embed_cache ) ) {
					// Run through our internal routing and serve.
					$request = WP_REST_Request::from_url( $item['href'] );
					if ( ! $request ) {
						$embeds[] = array();
						continue;
					}

					// Embedded resources get passed context=embed.
					if ( empty( $request['context'] ) ) {
						$request['context'] = 'embed';
					}

					$response = $this->dispatch( $request );

					/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
					$response = apply_filters( 'rest_post_dispatch', rest_ensure_response( $response ), $this, $request );

					$this->embed_cache[ $item['href'] ] = $this->response_to_data( $response, false );
				}

				$embeds[] = $this->embed_cache[ $item['href'] ];
			}

			// Determine if any real links were found.
			$has_links = count( array_filter( $embeds ) );

			if ( $has_links ) {
				$embedded[ $rel ] = $embeds;
			}
		}

		if ( ! empty( $embedded ) ) {
			$data['_embedded'] = $embedded;
		}

		return $data;
	}


Top ↑

Changelog

Changelog
VersionDescription
5.4.0The $embed parameter can now contain a list of link relations to include.
4.4.0Introduced.

The content displayed on this page has been created in part by processing WordPress source code files which are made available under the GPLv2 (or a later version) license by theĀ Free Software Foundation. In addition to this, the content includes user-written examples and information. All material is subject to review and curation by the WPPaste.com community.