+ /**
+ * Retrieves the CURIEs (compact URIs) used for relations.
+ *
+ * Extracts the links from a response into a structured hash, suitable for
+ * direct output.
+ *
+ * @since 4.5.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_compact_response_links( $response ) {
+ $links = self::get_response_links( $response );
+
+ if ( empty( $links ) ) {
+ return 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;
+ }
+
+ // Relation now changes from '$uri' to '$curie:$relation'.
+ $rel_regex = str_replace( '\{rel\}', '(.+)', preg_quote( $curie['href'], '!' ) );
+ preg_match( '!' . $rel_regex . '!', $rel, $matches );
+ if ( $matches ) {
+ $new_rel = $curie['name'] . ':' . $matches[1];
+ $used_curies[ $curie['name'] ] = $curie;
+ $links[ $new_rel ] = $items;
+ unset( $links[ $rel ] );
+ break;
+ }
+ }
+ }
+
+ // Push the curies onto the start of the links array.
+ if ( $used_curies ) {
+ $links['curies'] = array_values( $used_curies );
+ }
+
+ return $links;
+ }
+