/** * Retrieves links from a response. * * Extracts the links from a response into a structured hash, suitable for * direct output. * * @since 4.4.0 * @access public * @static * * @param WP_REST_Response $response Response to extract links from. * @return array Map of link relation to list of link hashes. */ public static function get_response_links($response) { $links = $response->get_links(); if (empty($links)) { return array(); } // Convert links to part of the data. $data = array(); $curies = $response->get_curies(); $used_curies = array(); foreach ($links as $rel => $items) { // Convert $rel URIs to their compact versions if they exist. foreach ($curies as $curie) { $href_prefix = substr($curie['href'], 0, strpos($curie['href'], '{rel}')); if (strpos($rel, $href_prefix) !== 0) { continue; } $used_curies[$curie['name']] = $curie; // Relation now changes from '$uri' to '$curie:$relation' $rel_regex = str_replace('\\{rel\\}', '([\\w]+)', preg_quote($curie['href'], '!')); preg_match('!' . $rel_regex . '!', $rel, $matches); if ($matches) { $rel = $curie['name'] . ':' . $matches[1]; } break; } $data[$rel] = array(); foreach ($items as $item) { $attributes = $item['attributes']; $attributes['href'] = $item['href']; $data[$rel][] = $attributes; } } // Push the curies onto the start of the links array. if ($used_curies) { $data = array_merge(array('curies' => array_values($used_curies)), $data); } return $data; }