函数文档

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.

Return

array The Heartbeat response.

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.