rest_api_loaded()
云策文档标注
概述
rest_api_loaded() 函数用于加载 WordPress REST API,处理 REST 请求的初始化和执行。它检查查询变量,定义 REST_REQUEST 常量,并启动 REST 服务器以服务请求。
关键要点
- 函数检查 $GLOBALS['wp']->query_vars['rest_route'] 是否存在且为字符串,否则返回错误或终止执行。
- 定义 REST_REQUEST 常量为 true,标识当前为 REST 请求。
- 通过 rest_get_server() 获取 REST 服务器实例,并使用 serve_request() 方法处理路由请求。
- 函数执行完毕后调用 die() 结束进程。
代码示例
Source function rest_api_loaded() {
if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
return;
}
if ( ! is_string( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
$rest_type_error = new WP_Error(
'rest_path_invalid_type',
__( 'The REST route parameter must be a string.' ),
array( 'status' => 400 )
);
wp_die( $rest_type_error );
}
define( 'REST_REQUEST', true );
$server = rest_get_server();
$route = untrailingslashit( $GLOBALS['wp']->query_vars['rest_route'] );
if ( empty( $route ) ) {
$route = '/';
}
$server->serve_request( $route );
die();
}注意事项
- 函数在 WordPress 4.4.0 版本引入,是 REST API 核心加载机制的一部分。
- 依赖其他函数如 rest_get_server()、untrailingslashit()、__() 和 wp_die(),需确保这些函数可用。
- 错误处理使用 WP_Error 和 wp_die(),开发者应了解其行为以避免意外终止。
原文内容
Loads the REST API.
Source
function rest_api_loaded() {
if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
return;
}
// Return an error message if query_var is not a string.
if ( ! is_string( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
$rest_type_error = new WP_Error(
'rest_path_invalid_type',
__( 'The REST route parameter must be a string.' ),
array( 'status' => 400 )
);
wp_die( $rest_type_error );
}
/**
* Whether this is a REST Request.
*
* @since 4.4.0
* @var bool
*/
define( 'REST_REQUEST', true );
// Initialize the server.
$server = rest_get_server();
// Fire off the request.
$route = untrailingslashit( $GLOBALS['wp']->query_vars['rest_route'] );
if ( empty( $route ) ) {
$route = '/';
}
$server->serve_request( $route );
// We're done.
die();
}
Changelog
| Version | Description |
|---|---|
| 4.4.0 | Introduced. |