wp_ajax_widgets_order()
云策文档标注
概述
wp_ajax_widgets_order() 是一个 WordPress AJAX 处理函数,用于保存小部件在侧边栏中的排序。它通过验证 AJAX 请求和用户权限,处理 POST 数据并调用 wp_set_sidebars_widgets() 来更新侧边栏小部件配置。
关键要点
- 函数用于处理 AJAX 请求,保存小部件排序,确保用户具有 'edit_theme_options' 权限。
- 使用 check_ajax_referer() 验证请求安全性,防止外部攻击。
- 解析 $_POST['sidebars'] 数据,提取小部件 ID 并存储到数组,最终通过 wp_set_sidebars_widgets() 更新侧边栏配置。
- 函数在成功或失败时调用 wp_die() 返回相应状态码(1 表示成功,-1 表示失败)。
代码示例
function wp_ajax_widgets_order() {
check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' );
if ( ! current_user_can( 'edit_theme_options' ) ) {
wp_die( -1 );
}
unset( $_POST['savewidgets'], $_POST['action'] );
// Save widgets order for all sidebars.
if ( is_array( $_POST['sidebars'] ) ) {
$sidebars = array();
foreach ( wp_unslash( $_POST['sidebars'] ) as $key => $val ) {
$sb = array();
if ( ! empty( $val ) ) {
$val = explode( ',', $val );
foreach ( $val as $k => $v ) {
if ( ! str_contains( $v, 'widget-' ) ) {
continue;
}
$sb[ $k ] = substr( $v, strpos( $v, '_' ) + 1 );
}
}
$sidebars[ $key ] = $sb;
}
wp_set_sidebars_widgets( $sidebars );
wp_die( 1 );
}
wp_die( -1 );
}注意事项
- 函数依赖于 AJAX 请求,需确保前端正确发送包含 'sidebars' 数据的 POST 请求。
- 用户权限检查是关键,只有具有 'edit_theme_options' 能力的用户才能执行此操作。
- 数据解析时使用 wp_unslash() 处理转义字符,确保小部件 ID 正确提取。
原文内容
Handles saving the widgets order via AJAX.
Source
function wp_ajax_widgets_order() {
check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' );
if ( ! current_user_can( 'edit_theme_options' ) ) {
wp_die( -1 );
}
unset( $_POST['savewidgets'], $_POST['action'] );
// Save widgets order for all sidebars.
if ( is_array( $_POST['sidebars'] ) ) {
$sidebars = array();
foreach ( wp_unslash( $_POST['sidebars'] ) as $key => $val ) {
$sb = array();
if ( ! empty( $val ) ) {
$val = explode( ',', $val );
foreach ( $val as $k => $v ) {
if ( ! str_contains( $v, 'widget-' ) ) {
continue;
}
$sb[ $k ] = substr( $v, strpos( $v, '_' ) + 1 );
}
}
$sidebars[ $key ] = $sb;
}
wp_set_sidebars_widgets( $sidebars );
wp_die( 1 );
}
wp_die( -1 );
}
Changelog
| Version | Description |
|---|---|
| 3.1.0 | Introduced. |