@@ -283,10 +283,14 @@ public function delete_item_permissions_check( $request ) {
283
283
*
284
284
* @since 5.8.0
285
285
*
286
+ * @global array $wp_registered_widget_updates The registered widget update functions.
287
+ *
286
288
* @param WP_REST_Request $request Full details about the request.
287
289
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
288
290
*/
289
291
public function delete_item ( $ request ) {
292
+ global $ wp_registered_widget_updates ;
293
+
290
294
$ widget_id = $ request ['id ' ];
291
295
$ sidebar_id = wp_find_widgets_sidebar ( $ widget_id );
292
296
@@ -301,17 +305,46 @@ public function delete_item( $request ) {
301
305
$ request ['context ' ] = 'edit ' ;
302
306
303
307
if ( $ request ['force ' ] ) {
304
- $ prepared = $ this ->prepare_item_for_response ( compact ( 'widget_id ' , 'sidebar_id ' ), $ request );
308
+ $ response = $ this ->prepare_item_for_response ( compact ( 'widget_id ' , 'sidebar_id ' ), $ request );
309
+
310
+ $ parsed_id = wp_parse_widget_id ( $ widget_id );
311
+ $ id_base = $ parsed_id ['id_base ' ];
312
+
313
+ $ original_post = $ _POST ;
314
+ $ original_request = $ _REQUEST ;
315
+
316
+ $ _POST = array (
317
+ 'sidebar ' => $ sidebar_id ,
318
+ "widget- $ id_base " => array (),
319
+ 'the-widget-id ' => $ widget_id ,
320
+ 'delete_widget ' => '1 ' ,
321
+ );
322
+ $ _REQUEST = $ _POST ;
323
+
324
+ $ callback = $ wp_registered_widget_updates [ $ id_base ]['callback ' ];
325
+ $ params = $ wp_registered_widget_updates [ $ id_base ]['params ' ];
326
+
327
+ if ( is_callable ( $ callback ) ) {
328
+ ob_start ();
329
+ call_user_func_array ( $ callback , $ params );
330
+ ob_end_clean ();
331
+ }
332
+
333
+ $ _POST = $ original_post ;
334
+ $ _REQUEST = $ original_request ;
335
+
305
336
wp_assign_widget_to_sidebar ( $ widget_id , '' );
306
- $ prepared ->set_data (
337
+
338
+ $ response ->set_data (
307
339
array (
308
340
'deleted ' => true ,
309
- 'previous ' => $ prepared ->get_data (),
341
+ 'previous ' => $ response ->get_data (),
310
342
)
311
343
);
312
344
} else {
313
345
wp_assign_widget_to_sidebar ( $ widget_id , 'wp_inactive_widgets ' );
314
- $ prepared = $ this ->prepare_item_for_response (
346
+
347
+ $ response = $ this ->prepare_item_for_response (
315
348
array (
316
349
'sidebar_id ' => 'wp_inactive_widgets ' ,
317
350
'widget_id ' => $ widget_id ,
@@ -320,7 +353,7 @@ public function delete_item( $request ) {
320
353
);
321
354
}
322
355
323
- return $ prepared ;
356
+ return $ response ;
324
357
}
325
358
326
359
/**
0 commit comments