wp_ajax_meta_box_order()
云策文档标注
概述
wp_ajax_meta_box_order() 是一个 WordPress AJAX 处理函数,用于保存用户自定义的元框(meta box)顺序和页面列数设置。它通过 AJAX 请求接收数据,验证安全性后更新用户元数据。
关键要点
- 函数通过 check_ajax_referer() 验证 AJAX 请求的 nonce,确保安全性。
- 从 $_POST 中获取 order(元框顺序数组)、page_columns(页面列数)和 page(页面标识符)参数。
- 使用 sanitize_key() 对 page 参数进行清理,防止无效输入。
- 通过 wp_get_current_user() 获取当前用户对象,并检查用户是否存在。
- 如果 order 有效,使用 update_user_meta() 更新用户元数据,键为 "meta-box-order_$page"。
- 如果 page_columns 有效,更新用户元数据,键为 "screen_layout_$page"。
- 最后调用 wp_send_json_success() 返回成功响应。
代码示例
function wp_ajax_meta_box_order() {
check_ajax_referer( 'meta-box-order' );
$order = isset( $_POST['order'] ) ? (array) $_POST['order'] : false;
$page_columns = isset( $_POST['page_columns'] ) ? $_POST['page_columns'] : 'auto';
if ( 'auto' !== $page_columns ) {
$page_columns = (int) $page_columns;
}
$page = isset( $_POST['page'] ) ? $_POST['page'] : '';
if ( sanitize_key( $page ) !== $page ) {
wp_die( 0 );
}
$user = wp_get_current_user();
if ( ! $user ) {
wp_die( -1 );
}
if ( $order ) {
update_user_meta( $user->ID, "meta-box-order_$page", $order );
}
if ( $page_columns ) {
update_user_meta( $user->ID, "screen_layout_$page", $page_columns );
}
wp_send_json_success();
}注意事项
- 函数依赖于 AJAX 请求,必须通过正确的 nonce 验证,否则会终止执行。
- page 参数必须通过 sanitize_key() 清理,否则 wp_die(0) 会终止请求。
- 需要当前用户已登录且有效,否则 wp_die(-1) 会返回错误。
- 更新用户元数据时使用动态键名,确保不同页面的设置独立存储。
原文内容
Handles saving the meta box order via AJAX.
Source
function wp_ajax_meta_box_order() {
check_ajax_referer( 'meta-box-order' );
$order = isset( $_POST['order'] ) ? (array) $_POST['order'] : false;
$page_columns = isset( $_POST['page_columns'] ) ? $_POST['page_columns'] : 'auto';
if ( 'auto' !== $page_columns ) {
$page_columns = (int) $page_columns;
}
$page = isset( $_POST['page'] ) ? $_POST['page'] : '';
if ( sanitize_key( $page ) !== $page ) {
wp_die( 0 );
}
$user = wp_get_current_user();
if ( ! $user ) {
wp_die( -1 );
}
if ( $order ) {
update_user_meta( $user->ID, "meta-box-order_$page", $order );
}
if ( $page_columns ) {
update_user_meta( $user->ID, "screen_layout_$page", $page_columns );
}
wp_send_json_success();
}
Changelog
| Version | Description |
|---|---|
| 3.1.0 | Introduced. |