wp_ajax_save_widget()

In this article

Handles saving a widget via AJAX.

Source

function wp_ajax_save_widget() {	global $wp_registered_widgets, $wp_registered_widget_controls, $wp_registered_widget_updates;	check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' );	if ( ! current_user_can( 'edit_theme_options' ) || ! isset( $_POST['id_base'] ) ) {	wp_die( -1 );	}	unset( $_POST['savewidgets'], $_POST['action'] );	/** * Fires early when editing the widgets displayed in sidebars. * * @since 2.8.0 */	do_action( 'load-widgets.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores	/** * Fires early when editing the widgets displayed in sidebars. * * @since 2.8.0 */	do_action( 'widgets.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores	/** This action is documented in wp-admin/widgets.php */	do_action( 'sidebar_admin_setup' );	$id_base = wp_unslash( $_POST['id_base'] );	$widget_id = wp_unslash( $_POST['widget-id'] );	$sidebar_id = $_POST['sidebar'];	$multi_number = ! empty( $_POST['multi_number'] ) ? (int) $_POST['multi_number'] : 0;	$settings = isset( $_POST[ 'widget-' . $id_base ] ) && is_array( $_POST[ 'widget-' . $id_base ] ) ? $_POST[ 'widget-' . $id_base ] : false;	$error = '<p>' . __( 'An error has occurred. Please reload the page and try again.' ) . '</p>';	$sidebars = wp_get_sidebars_widgets();	$sidebar = isset( $sidebars[ $sidebar_id ] ) ? $sidebars[ $sidebar_id ] : array();	// Delete.	if ( isset( $_POST['delete_widget'] ) && $_POST['delete_widget'] ) {	if ( ! isset( $wp_registered_widgets[ $widget_id ] ) ) {	wp_die( $error );	}	$sidebar = array_diff( $sidebar, array( $widget_id ) );	$_POST = array(	'sidebar' => $sidebar_id,	'widget-' . $id_base => array(),	'the-widget-id' => $widget_id,	'delete_widget' => '1',	);	/** This action is documented in wp-admin/widgets.php */	do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base );	} elseif ( $settings && preg_match( '/__i__|%i%/', key( $settings ) ) ) {	if ( ! $multi_number ) {	wp_die( $error );	}	$_POST[ 'widget-' . $id_base ] = array( $multi_number => reset( $settings ) );	$widget_id = $id_base . '-' . $multi_number;	$sidebar[] = $widget_id;	}	$_POST['widget-id'] = $sidebar;	foreach ( (array) $wp_registered_widget_updates as $name => $control ) {	if ( $name === $id_base ) {	if ( ! is_callable( $control['callback'] ) ) {	continue;	}	ob_start();	call_user_func_array( $control['callback'], $control['params'] );	ob_end_clean();	break;	}	}	if ( isset( $_POST['delete_widget'] ) && $_POST['delete_widget'] ) {	$sidebars[ $sidebar_id ] = $sidebar;	wp_set_sidebars_widgets( $sidebars );	echo "deleted:$widget_id";	wp_die();	}	if ( ! empty( $_POST['add_new'] ) ) {	wp_die();	}	$form = $wp_registered_widget_controls[ $widget_id ];	if ( $form ) {	call_user_func_array( $form['callback'], $form['params'] );	}	wp_die(); } 

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( ‘load-widgets.php’ )

Fires early when editing the widgets displayed in sidebars.

do_action( ‘sidebar_admin_setup’ )

Fires early before the Widgets administration screen loads, after scripts are enqueued.

do_action( ‘widgets.php’ )

Fires early when editing the widgets displayed in sidebars.

Changelog

VersionDescription
3.1.0Introduced.

User Contributed Notes

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