函数文档

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.