/** * Embeds the links from the data into the request. * * @since 4.4.0 * @access protected * * @param array $data Data from the request. * @return array { * Data with sub-requests embedded. * * @type array [$_links] Links. * @type array [$_embedded] Embeddeds. * } */ protected function embed_links($data) { if (empty($data['_links'])) { return $data; } $embedded = array(); foreach ($data['_links'] as $rel => $links) { // Ignore links to self, for obvious reasons. if ('self' === $rel) { 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; } // 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); $embeds[] = $this->response_to_data($response, false); } // 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; }
/** * @dataProvider data_from_url */ public function test_from_url_invalid($permalink_structure) { update_option('permalink_structure', $permalink_structure); $using_site = site_url('/wp/v2/posts/1'); $request = WP_REST_Request::from_url($using_site); $this->assertFalse($request); $using_home = home_url('/wp/v2/posts/1'); $request = WP_REST_Request::from_url($using_home); $this->assertFalse($request); }