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
Return
(array) Data with sub-requests embedded.
- '_links'
(array) Links. - '_embedded'
(array) Embedded objects.
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; }
Expand full source codeCollapse full source codeView on TracView on GitHub
Changelog
Version | Description |
---|---|
5.4.0 | The $embed parameter can now contain a list of link relations to include. |
4.4.0 | Introduced. |