函数文档

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.