WordPress at a glance
function is not described

WP_REST_Posts_Controller::prepare_links() protected WP 4.7.0

Prepares links for the request.

It's a method of the class: WP_REST_Posts_Controller{}

No Hooks.

Return

Array. Links for the given post.

Usage

// protected - for code of main (parent) or child class
$result = $this->prepare_links( $post );
$post(WP_Post) (required)
Post object.

Changelog

Since 4.7.0 Introduced.

Code of WP_REST_Posts_Controller::prepare_links() WP 5.5.1

<?php
protected function prepare_links( $post ) {
	$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );

	// Entity meta.
	$links = array(
		'self'       => array(
			'href' => rest_url( trailingslashit( $base ) . $post->ID ),
		),
		'collection' => array(
			'href' => rest_url( $base ),
		),
		'about'      => array(
			'href' => rest_url( 'wp/v2/types/' . $this->post_type ),
		),
	);

	if ( ( in_array( $post->post_type, array( 'post', 'page' ), true ) || post_type_supports( $post->post_type, 'author' ) )
		&& ! empty( $post->post_author ) ) {
		$links['author'] = array(
			'href'       => rest_url( 'wp/v2/users/' . $post->post_author ),
			'embeddable' => true,
		);
	}

	if ( in_array( $post->post_type, array( 'post', 'page' ), true ) || post_type_supports( $post->post_type, 'comments' ) ) {
		$replies_url = rest_url( 'wp/v2/comments' );
		$replies_url = add_query_arg( 'post', $post->ID, $replies_url );

		$links['replies'] = array(
			'href'       => $replies_url,
			'embeddable' => true,
		);
	}

	if ( in_array( $post->post_type, array( 'post', 'page' ), true ) || post_type_supports( $post->post_type, 'revisions' ) ) {
		$revisions       = wp_get_post_revisions( $post->ID, array( 'fields' => 'ids' ) );
		$revisions_count = count( $revisions );

		$links['version-history'] = array(
			'href'  => rest_url( trailingslashit( $base ) . $post->ID . '/revisions' ),
			'count' => $revisions_count,
		);

		if ( $revisions_count > 0 ) {
			$last_revision = array_shift( $revisions );

			$links['predecessor-version'] = array(
				'href' => rest_url( trailingslashit( $base ) . $post->ID . '/revisions/' . $last_revision ),
				'id'   => $last_revision,
			);
		}
	}

	$post_type_obj = get_post_type_object( $post->post_type );

	if ( $post_type_obj->hierarchical && ! empty( $post->post_parent ) ) {
		$links['up'] = array(
			'href'       => rest_url( trailingslashit( $base ) . (int) $post->post_parent ),
			'embeddable' => true,
		);
	}

	// If we have a featured media, add that.
	$featured_media = get_post_thumbnail_id( $post->ID );
	if ( $featured_media ) {
		$image_url = rest_url( 'wp/v2/media/' . $featured_media );

		$links['https://api.w.org/featuredmedia'] = array(
			'href'       => $image_url,
			'embeddable' => true,
		);
	}

	if ( ! in_array( $post->post_type, array( 'attachment', 'nav_menu_item', 'revision' ), true ) ) {
		$attachments_url = rest_url( 'wp/v2/media' );
		$attachments_url = add_query_arg( 'parent', $post->ID, $attachments_url );

		$links['https://api.w.org/attachment'] = array(
			'href' => $attachments_url,
		);
	}

	$taxonomies = get_object_taxonomies( $post->post_type );

	if ( ! empty( $taxonomies ) ) {
		$links['https://api.w.org/term'] = array();

		foreach ( $taxonomies as $tax ) {
			$taxonomy_obj = get_taxonomy( $tax );

			// Skip taxonomies that are not public.
			if ( empty( $taxonomy_obj->show_in_rest ) ) {
				continue;
			}

			$tax_base = ! empty( $taxonomy_obj->rest_base ) ? $taxonomy_obj->rest_base : $tax;

			$terms_url = add_query_arg(
				'post',
				$post->ID,
				rest_url( 'wp/v2/' . $tax_base )
			);

			$links['https://api.w.org/term'][] = array(
				'href'       => $terms_url,
				'taxonomy'   => $tax,
				'embeddable' => true,
			);
		}
	}

	return $links;
}