WP_REST_Widgets_Controller::delete_item( WP_REST_Request $request ): WP_REST_Response|WP_Error

In this article

Deletes a widget.

Parameters

$requestWP_REST_Requestrequired
Full details about the request.

Return

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

Source

public function delete_item( $request ) {	global $wp_widget_factory, $wp_registered_widget_updates;	/* * retrieve_widgets() contains logic to move "hidden" or "lost" widgets to the * wp_inactive_widgets sidebar based on the contents of the $sidebars_widgets global. * * When batch requests are processed, this global is not properly updated by previous * calls, resulting in widgets incorrectly being moved to the wp_inactive_widgets * sidebar. * * See https://core.trac.wordpress.org/ticket/53657. */	wp_get_sidebars_widgets();	$this->retrieve_widgets();	$widget_id = $request['id'];	$sidebar_id = wp_find_widgets_sidebar( $widget_id );	if ( is_null( $sidebar_id ) ) {	return new WP_Error(	'rest_widget_not_found',	__( 'No widget was found with that id.' ),	array( 'status' => 404 )	);	}	$request['context'] = 'edit';	if ( $request['force'] ) {	$response = $this->prepare_item_for_response( compact( 'widget_id', 'sidebar_id' ), $request );	$parsed_id = wp_parse_widget_id( $widget_id );	$id_base = $parsed_id['id_base'];	$original_post = $_POST;	$original_request = $_REQUEST;	$_POST = array(	'sidebar' => $sidebar_id,	"widget-$id_base" => array(),	'the-widget-id' => $widget_id,	'delete_widget' => '1',	);	$_REQUEST = $_POST;	/** This action is documented in wp-admin/widgets-form.php */	do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base );	$callback = $wp_registered_widget_updates[ $id_base ]['callback'];	$params = $wp_registered_widget_updates[ $id_base ]['params'];	if ( is_callable( $callback ) ) {	ob_start();	call_user_func_array( $callback, $params );	ob_end_clean();	}	$_POST = $original_post;	$_REQUEST = $original_request;	$widget_object = $wp_widget_factory->get_widget_object( $id_base );	if ( $widget_object ) {	/* * WP_Widget sets `updated = true` after an update to prevent more than one widget * from being saved per request. This isn't what we want in the REST API, though, * as we support batch requests. */	$widget_object->updated = false;	}	wp_assign_widget_to_sidebar( $widget_id, '' );	$response->set_data(	array(	'deleted' => true,	'previous' => $response->get_data(),	)	);	} else {	wp_assign_widget_to_sidebar( $widget_id, 'wp_inactive_widgets' );	$response = $this->prepare_item_for_response(	array(	'sidebar_id' => 'wp_inactive_widgets',	'widget_id' => $widget_id,	),	$request	);	}	/** * Fires after a widget is deleted via the REST API. * * @since 5.8.0 * * @param string $widget_id ID of the widget marked for deletion. * @param string $sidebar_id ID of the sidebar the widget was deleted from. * @param WP_REST_Response|WP_Error $response The response data, or WP_Error object on failure. * @param WP_REST_Request $request The request sent to the API. */	do_action( 'rest_delete_widget', $widget_id, $sidebar_id, $response, $request );	return $response; } 

Hooks

do_action( ‘delete_widget’, string $widget_id, string $sidebar_id, string $id_base )

Fires immediately after a widget has been marked for deletion.

do_action( ‘rest_delete_widget’, string $widget_id, string $sidebar_id, WP_REST_Response|WP_Error $response, WP_REST_Request $request )

Fires after a widget is deleted via the REST API.

Changelog

VersionDescription
5.8.0Introduced.

User Contributed Notes

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