WP_REST_Attachments_Controller::prepare_item_for_response()publicWP 4.7.0

Prepares a single attachment output for response.

Method of the class: WP_REST_Attachments_Controller{}

Return

WP_REST_Response. Response object.

Usage

$WP_REST_Attachments_Controller = new WP_REST_Attachments_Controller();
$WP_REST_Attachments_Controller->prepare_item_for_response( $item, $request );
$item(WP_Post) (required)
Attachment object.
$request(WP_REST_Request) (required)
Request object.

Changelog

Since 4.7.0 Introduced.
Since 5.9.0 Renamed $post to $item to match parent class for PHP 8 named parameter support.

WP_REST_Attachments_Controller::prepare_item_for_response() code WP 6.5.2

public function prepare_item_for_response( $item, $request ) {
	// Restores the more descriptive, specific name for use within this method.
	$post = $item;

	$response = parent::prepare_item_for_response( $post, $request );
	$fields   = $this->get_fields_for_response( $request );
	$data     = $response->get_data();

	if ( in_array( 'description', $fields, true ) ) {
		$data['description'] = array(
			'raw'      => $post->post_content,
			/** This filter is documented in wp-includes/post-template.php */
			'rendered' => apply_filters( 'the_content', $post->post_content ),
		);
	}

	if ( in_array( 'caption', $fields, true ) ) {
		/** This filter is documented in wp-includes/post-template.php */
		$caption = apply_filters( 'get_the_excerpt', $post->post_excerpt, $post );

		/** This filter is documented in wp-includes/post-template.php */
		$caption = apply_filters( 'the_excerpt', $caption );

		$data['caption'] = array(
			'raw'      => $post->post_excerpt,
			'rendered' => $caption,
		);
	}

	if ( in_array( 'alt_text', $fields, true ) ) {
		$data['alt_text'] = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
	}

	if ( in_array( 'media_type', $fields, true ) ) {
		$data['media_type'] = wp_attachment_is_image( $post->ID ) ? 'image' : 'file';
	}

	if ( in_array( 'mime_type', $fields, true ) ) {
		$data['mime_type'] = $post->post_mime_type;
	}

	if ( in_array( 'media_details', $fields, true ) ) {
		$data['media_details'] = wp_get_attachment_metadata( $post->ID );

		// Ensure empty details is an empty object.
		if ( empty( $data['media_details'] ) ) {
			$data['media_details'] = new stdClass();
		} elseif ( ! empty( $data['media_details']['sizes'] ) ) {

			foreach ( $data['media_details']['sizes'] as $size => &$size_data ) {

				if ( isset( $size_data['mime-type'] ) ) {
					$size_data['mime_type'] = $size_data['mime-type'];
					unset( $size_data['mime-type'] );
				}

				// Use the same method image_downsize() does.
				$image_src = wp_get_attachment_image_src( $post->ID, $size );
				if ( ! $image_src ) {
					continue;
				}

				$size_data['source_url'] = $image_src[0];
			}

			$full_src = wp_get_attachment_image_src( $post->ID, 'full' );

			if ( ! empty( $full_src ) ) {
				$data['media_details']['sizes']['full'] = array(
					'file'       => wp_basename( $full_src[0] ),
					'width'      => $full_src[1],
					'height'     => $full_src[2],
					'mime_type'  => $post->post_mime_type,
					'source_url' => $full_src[0],
				);
			}
		} else {
			$data['media_details']['sizes'] = new stdClass();
		}
	}

	if ( in_array( 'post', $fields, true ) ) {
		$data['post'] = ! empty( $post->post_parent ) ? (int) $post->post_parent : null;
	}

	if ( in_array( 'source_url', $fields, true ) ) {
		$data['source_url'] = wp_get_attachment_url( $post->ID );
	}

	if ( in_array( 'missing_image_sizes', $fields, true ) ) {
		require_once ABSPATH . 'wp-admin/includes/image.php';
		$data['missing_image_sizes'] = array_keys( wp_get_missing_image_subsizes( $post->ID ) );
	}

	$context = ! empty( $request['context'] ) ? $request['context'] : 'view';

	$data = $this->filter_response_by_context( $data, $context );

	$links = $response->get_links();

	// Wrap the data in a response object.
	$response = rest_ensure_response( $data );

	foreach ( $links as $rel => $rel_links ) {
		foreach ( $rel_links as $link ) {
			$response->add_link( $rel, $link['href'], $link['attributes'] );
		}
	}

	/**
	 * Filters an attachment returned from the REST API.
	 *
	 * Allows modification of the attachment right before it is returned.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Response $response The response object.
	 * @param WP_Post          $post     The original attachment post.
	 * @param WP_REST_Request  $request  Request used to generate the response.
	 */
	return apply_filters( 'rest_prepare_attachment', $response, $post, $request );
}