函数文档

wp_ajax_delete_inactive_widgets()

💡 云策文档标注

概述

wp_ajax_delete_inactive_widgets() 是一个 WordPress AJAX 处理函数,用于删除非活动小部件。它通过验证 AJAX 请求和用户权限,执行相关 Hook 并清理小部件数据。

关键要点

  • 函数通过 AJAX 处理删除非活动小部件,确保用户具有 'edit_theme_options' 权限。
  • 使用 check_ajax_referer() 验证 AJAX 请求,防止外部攻击。
  • 触发多个 Hook,如 'load-widgets.php'、'widgets.php' 和 'sidebar_admin_setup',以支持扩展功能。
  • 遍历 wp_inactive_widgets 侧边栏,逐个删除小部件实例并更新相关选项。
  • 最终调用 wp_set_sidebars_widgets() 更新侧边栏小部件配置,并终止执行。

代码示例

function wp_ajax_delete_inactive_widgets() {
    check_ajax_referer( 'remove-inactive-widgets', 'removeinactivewidgets' );

    if ( ! current_user_can( 'edit_theme_options' ) ) {
        wp_die( -1 );
    }

    unset( $_POST['removeinactivewidgets'], $_POST['action'] );
    do_action( 'load-widgets.php' );
    do_action( 'widgets.php' );
    do_action( 'sidebar_admin_setup' );

    $sidebars_widgets = wp_get_sidebars_widgets();

    foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) {
        $pieces       = explode( '-', $widget_id );
        $multi_number = array_pop( $pieces );
        $id_base      = implode( '-', $pieces );
        $widget       = get_option( 'widget_' . $id_base );
        unset( $widget[ $multi_number ] );
        update_option( 'widget_' . $id_base, $widget );
        unset( $sidebars_widgets['wp_inactive_widgets'][ $key ] );
    }

    wp_set_sidebars_widgets( $sidebars_widgets );

    wp_die();
}

注意事项

  • 函数自 WordPress 4.4.0 版本引入,开发者需确保兼容性。
  • 使用 Hook 时注意命名规范,如 'load-widgets.php' 和 'widgets.php' 可能不符合下划线约定。
  • 删除操作涉及数据库更新,应谨慎处理以避免数据丢失。

📄 原文内容

Handles removing inactive widgets via AJAX.

Source

function wp_ajax_delete_inactive_widgets() {
	check_ajax_referer( 'remove-inactive-widgets', 'removeinactivewidgets' );

	if ( ! current_user_can( 'edit_theme_options' ) ) {
		wp_die( -1 );
	}

	unset( $_POST['removeinactivewidgets'], $_POST['action'] );
	/** This action is documented in wp-admin/includes/ajax-actions.php */
	do_action( 'load-widgets.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
	/** This action is documented in wp-admin/includes/ajax-actions.php */
	do_action( 'widgets.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
	/** This action is documented in wp-admin/widgets.php */
	do_action( 'sidebar_admin_setup' );

	$sidebars_widgets = wp_get_sidebars_widgets();

	foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) {
		$pieces       = explode( '-', $widget_id );
		$multi_number = array_pop( $pieces );
		$id_base      = implode( '-', $pieces );
		$widget       = get_option( 'widget_' . $id_base );
		unset( $widget[ $multi_number ] );
		update_option( 'widget_' . $id_base, $widget );
		unset( $sidebars_widgets['wp_inactive_widgets'][ $key ] );
	}

	wp_set_sidebars_widgets( $sidebars_widgets );

	wp_die();
}

Hooks

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

Version Description
4.4.0 Introduced.