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.
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. |