函数文档

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.