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

Embeds the links from the data into the request.


Description Description


Parameters 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 Return

(array) Data with sub-requests embedded.

  • '[$_links]'
    (array) Links.
  • '[$_embedded]'
    (array) Embeddeds.


Top ↑

Source 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 whitelist, 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

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


Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.