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. |