wp_ajax_closed_postboxes()
云策文档标注
概述
wp_ajax_closed_postboxes() 是一个 WordPress AJAX 处理函数,用于管理用户关闭或隐藏的元框(post boxes)状态。它通过 AJAX 请求接收用户操作数据,验证安全性后更新用户元数据。
关键要点
- 函数通过 AJAX 处理用户关闭和隐藏的元框状态,使用 check_ajax_referer() 验证请求安全性。
- 接收并处理 POST 参数:closed(关闭的元框列表)、hidden(隐藏的元框列表)和 page(页面标识符)。
- 使用 sanitize_key() 对页面标识符进行清理,确保安全性。
- 通过 wp_get_current_user() 获取当前用户,并更新用户元数据:closedpostboxes_$page 和 metaboxhidden_$page。
- 在更新隐藏元框时,排除特定始终显示的元框(如 'submitdiv')。
- 函数在成功或失败时调用 wp_die() 返回响应代码。
代码示例
function wp_ajax_closed_postboxes() {
check_ajax_referer( 'closedpostboxes', 'closedpostboxesnonce' );
$closed = isset( $_POST['closed'] ) ? explode( ',', $_POST['closed'] ) : array();
$closed = array_filter( $closed );
$hidden = isset( $_POST['hidden'] ) ? explode( ',', $_POST['hidden'] ) : array();
$hidden = array_filter( $hidden );
$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 ( is_array( $closed ) ) {
update_user_meta( $user->ID, "closedpostboxes_$page", $closed );
}
if ( is_array( $hidden ) ) {
// Postboxes that are always shown.
$hidden = array_diff( $hidden, array( 'submitdiv', 'linksubmitdiv', 'manage-menu', 'create-menu' ) );
update_user_meta( $user->ID, "metaboxhidden_$page", $hidden );
}
wp_die( 1 );
}注意事项
- 函数依赖于 AJAX 请求,需确保前端正确发送 POST 数据和非ce验证。
- 页面标识符必须通过 sanitize_key() 清理,以防止安全漏洞。
- 更新用户元数据时,需确保用户已登录且有效,否则会返回错误。
- 隐藏元框列表会自动排除某些始终显示的元框,开发者需注意此行为。
原文内容
Handles closed post boxes via AJAX.
Source
function wp_ajax_closed_postboxes() {
check_ajax_referer( 'closedpostboxes', 'closedpostboxesnonce' );
$closed = isset( $_POST['closed'] ) ? explode( ',', $_POST['closed'] ) : array();
$closed = array_filter( $closed );
$hidden = isset( $_POST['hidden'] ) ? explode( ',', $_POST['hidden'] ) : array();
$hidden = array_filter( $hidden );
$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 ( is_array( $closed ) ) {
update_user_meta( $user->ID, "closedpostboxes_$page", $closed );
}
if ( is_array( $hidden ) ) {
// Postboxes that are always shown.
$hidden = array_diff( $hidden, array( 'submitdiv', 'linksubmitdiv', 'manage-menu', 'create-menu' ) );
update_user_meta( $user->ID, "metaboxhidden_$page", $hidden );
}
wp_die( 1 );
}
Changelog
| Version | Description |
|---|---|
| 3.1.0 | Introduced. |