wp_refresh_metabox_loader_nonces()
云策文档标注
概述
wp_refresh_metabox_loader_nonces() 函数用于在块编辑器中刷新元框相关的 nonce,确保安全性和数据完整性。它处理 Heartbeat API 响应,基于用户权限和 post_id 生成新的 nonce。
关键要点
- 函数接收两个参数:$response(Heartbeat 响应数组)和 $data($_POST 数据数组),并返回更新后的 Heartbeat 响应数组。
- 检查 $data 中是否包含 'wp-refresh-metabox-loader-nonces' 键,以及 post_id 的有效性和用户编辑权限(使用 current_user_can('edit_post', $post_id))。
- 如果条件满足,函数生成新的 nonce(包括 'meta-box-loader' 和 'update-post_' . $post_id 相关 nonce),并添加到响应数组中返回。
代码示例
function wp_refresh_metabox_loader_nonces( $response, $data ) {
if ( empty( $data['wp-refresh-metabox-loader-nonces'] ) ) {
return $response;
}
$received = $data['wp-refresh-metabox-loader-nonces'];
$post_id = (int) $received['post_id'];
if ( ! $post_id ) {
return $response;
}
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return $response;
}
$response['wp-refresh-metabox-loader-nonces'] = array(
'replace' => array(
'metabox_loader_nonce' => wp_create_nonce( 'meta-box-loader' ),
'_wpnonce' => wp_create_nonce( 'update-post_' . $post_id ),
),
);
return $response;
}注意事项
- 此函数自 WordPress 6.1.0 版本引入,主要用于块编辑器环境,确保元框操作的安全性。
- 相关函数包括 current_user_can() 用于权限检查,wp_create_nonce() 用于生成 nonce。
原文内容
Refresh nonces used with meta boxes in the block editor.
Parameters
$responsearrayrequired-
The Heartbeat response.
$dataarrayrequired-
The $_POST data sent.
Source
function wp_refresh_metabox_loader_nonces( $response, $data ) {
if ( empty( $data['wp-refresh-metabox-loader-nonces'] ) ) {
return $response;
}
$received = $data['wp-refresh-metabox-loader-nonces'];
$post_id = (int) $received['post_id'];
if ( ! $post_id ) {
return $response;
}
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return $response;
}
$response['wp-refresh-metabox-loader-nonces'] = array(
'replace' => array(
'metabox_loader_nonce' => wp_create_nonce( 'meta-box-loader' ),
'_wpnonce' => wp_create_nonce( 'update-post_' . $post_id ),
),
);
return $response;
}
Changelog
| Version | Description |
|---|---|
| 6.1.0 | Introduced. |