WP_REST_Posts_Controller::prepare_links()protectedWP 4.7.0

Prepares links for the request.

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.

WP_REST_Posts_Controller::prepare_links() code WP 6.4.3

protected function prepare_links( $post ) {
	// Entity meta.
	$links = array(
		'self'       => array(
			'href' => rest_url( rest_get_route_for_post( $post->ID ) ),
		),
		'collection' => array(
			'href' => rest_url( rest_get_route_for_post_type_items( $this->post_type ) ),
		),
		'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_latest_revision_id_and_total_count( $post->ID );
		$revisions_count = ! is_wp_error( $revisions ) ? $revisions['count'] : 0;
		$revisions_base  = sprintf( '/%s/%s/%d/revisions', $this->namespace, $this->rest_base, $post->ID );

		$links['version-history'] = array(
			'href'  => rest_url( $revisions_base ),
			'count' => $revisions_count,
		);

		if ( $revisions_count > 0 ) {
			$links['predecessor-version'] = array(
				'href' => rest_url( $revisions_base . '/' . $revisions['latest_id'] ),
				'id'   => $revisions['latest_id'],
			);
		}
	}

	$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( rest_get_route_for_post( $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( rest_get_route_for_post( $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( rest_get_route_for_post_type_items( 'attachment' ) );
		$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_route = rest_get_route_for_taxonomy_items( $tax );

			// Skip taxonomies that are not public.
			if ( empty( $taxonomy_route ) ) {
				continue;
			}
			$terms_url = add_query_arg(
				'post',
				$post->ID,
				rest_url( $taxonomy_route )
			);

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

	return $links;
}