WP_REST_Widgets_Controller::prepare_item_for_response( array $item, WP_REST_Request $request ): WP_REST_Response|WP_Error

In this article

Prepares the widget for the REST response.

Parameters

$itemarrayrequired
An array containing a widget_id and sidebar_id.
$requestWP_REST_Requestrequired
Request object.

Return

WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.

Source

public function prepare_item_for_response( $item, $request ) {
	global $wp_widget_factory, $wp_registered_widgets;

	$widget_id  = $item['widget_id'];
	$sidebar_id = $item['sidebar_id'];

	if ( ! isset( $wp_registered_widgets[ $widget_id ] ) ) {
		return new WP_Error(
			'rest_invalid_widget',
			__( 'The requested widget is invalid.' ),
			array( 'status' => 500 )
		);
	}

	$widget    = $wp_registered_widgets[ $widget_id ];
	$parsed_id = wp_parse_widget_id( $widget_id );
	$fields    = $this->get_fields_for_response( $request );

	$prepared = array(
		'id'            => $widget_id,
		'id_base'       => $parsed_id['id_base'],
		'sidebar'       => $sidebar_id,
		'rendered'      => '',
		'rendered_form' => null,
		'instance'      => null,
	);

	if (
		rest_is_field_included( 'rendered', $fields ) &&
		'wp_inactive_widgets' !== $sidebar_id
	) {
		$prepared['rendered'] = trim( wp_render_widget( $widget_id, $sidebar_id ) );
	}

	if ( rest_is_field_included( 'rendered_form', $fields ) ) {
		$rendered_form = wp_render_widget_control( $widget_id );
		if ( ! is_null( $rendered_form ) ) {
			$prepared['rendered_form'] = trim( $rendered_form );
		}
	}

	if ( rest_is_field_included( 'instance', $fields ) ) {
		$widget_object = $wp_widget_factory->get_widget_object( $parsed_id['id_base'] );
		if ( $widget_object && isset( $parsed_id['number'] ) ) {
			$all_instances                   = $widget_object->get_settings();
			$instance                        = $all_instances[ $parsed_id['number'] ];
			$serialized_instance             = serialize( $instance );
			$prepared['instance']['encoded'] = base64_encode( $serialized_instance );
			$prepared['instance']['hash']    = wp_hash( $serialized_instance );

			if ( ! empty( $widget_object->widget_options['show_instance_in_rest'] ) ) {
				// Use new stdClass so that JSON result is {} and not [].
				$prepared['instance']['raw'] = empty( $instance ) ? new stdClass() : $instance;
			}
		}
	}

	$context  = ! empty( $request['context'] ) ? $request['context'] : 'view';
	$prepared = $this->add_additional_fields_to_object( $prepared, $request );
	$prepared = $this->filter_response_by_context( $prepared, $context );

	$response = rest_ensure_response( $prepared );

	if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
		$response->add_links( $this->prepare_links( $prepared ) );
	}

	/**
	 * Filters the REST API response for a widget.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Response|WP_Error $response The response object, or WP_Error object on failure.
	 * @param array                     $widget   The registered widget data.
	 * @param WP_REST_Request           $request  Request used to generate the response.
	 */
	return apply_filters( 'rest_prepare_widget', $response, $widget, $request );
}

Hooks

apply_filters( ‘rest_prepare_widget’, WP_REST_Response|WP_Error $response, array $widget, WP_REST_Request $request )

Filters the REST API response for a widget.

Changelog

VersionDescription
5.8.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.