函数文档

rest_get_server()

💡 云策文档标注

概述

rest_get_server() 函数用于获取当前 WordPress REST API 的服务器实例。如果实例不存在,它会自动实例化一个新的 WP_REST_Server 对象,并触发相关钩子以初始化 REST API。

关键要点

  • 函数返回 WP_REST_Server 实例,用于处理 REST API 请求。
  • 通过全局变量 $wp_rest_server 管理服务器实例,避免重复创建。
  • 使用 wp_rest_server_class 过滤器允许自定义服务器类,默认使用 'WP_REST_Server'。
  • 在实例化时触发 rest_api_init 动作钩子,用于注册端点和其他初始化操作。

代码示例

function rest_get_server() {
    global $wp_rest_server;

    if ( empty( $wp_rest_server ) ) {
        $wp_rest_server_class = apply_filters( 'wp_rest_server_class', 'WP_REST_Server' );
        $wp_rest_server       = new $wp_rest_server_class();
        do_action( 'rest_api_init', $wp_rest_server );
    }

    return $wp_rest_server;
}

注意事项

  • 此函数在 WordPress 4.5.0 版本中引入,是 REST API 核心功能的一部分。
  • 相关钩子包括 do_action('rest_api_init', $wp_rest_server) 和 apply_filters('wp_rest_server_class', $class_name),开发者可以利用这些钩子扩展或修改 REST 服务器行为。
  • 函数被多个其他 REST API 相关函数调用,如 rest_do_request() 和 register_rest_route(),确保在整个 API 中服务器实例的一致性。

📄 原文内容

Retrieves the current REST server instance.

Description

Instantiates a new instance if none exists already.

Return

WP_REST_Server REST server instance.

Source

function rest_get_server() {
	/* @var WP_REST_Server $wp_rest_server */
	global $wp_rest_server;

	if ( empty( $wp_rest_server ) ) {
		/**
		 * Filters the REST Server Class.
		 *
		 * This filter allows you to adjust the server class used by the REST API, using a
		 * different class to handle requests.
		 *
		 * @since 4.4.0
		 *
		 * @param string $class_name The name of the server class. Default 'WP_REST_Server'.
		 */
		$wp_rest_server_class = apply_filters( 'wp_rest_server_class', 'WP_REST_Server' );
		$wp_rest_server       = new $wp_rest_server_class();

		/**
		 * Fires when preparing to serve a REST API request.
		 *
		 * Endpoint objects should be created and register their hooks on this action rather
		 * than another action to ensure they're only loaded when needed.
		 *
		 * @since 4.4.0
		 *
		 * @param WP_REST_Server $wp_rest_server Server object.
		 */
		do_action( 'rest_api_init', $wp_rest_server );
	}

	return $wp_rest_server;
}

Hooks

do_action( ‘rest_api_init’, WP_REST_Server $wp_rest_server )

Fires when preparing to serve a REST API request.

apply_filters( ‘wp_rest_server_class’, string $class_name )

Filters the REST Server Class.

Changelog

Version Description
4.5.0 Introduced.