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;
}