2023-06-11 / 609阅
WordPress REST API 是一种将 WordPress 内容以 JSON 格式进行交互的方式。下面是一些关键概念和相关示例代码:
WordPress REST API 是使用命名空间进行组织的。命名空间(namespace)是指区分变量、函数等在不同上下文中使用的名字的一个前缀。命名空间的名称通常是大写字母,例如 WP_REST。
以下是一些 WordPress REST API 常用的命名空间:
WP_REST: REST API 相关的核心命名空间WP_REST_Controller: REST API 控制器命名空间WP_REST_Field: REST API 字段命名空间例如,你可以使用以下代码将一个自定义控制器添加到命名空间中:
class My_Custom_Controller extends WP_REST_Controller {
    // ...
}
add_action( 'rest_api_init', function () {
   $namespace = 'my-plugin/v1';
   register_rest_route( $namespace, '/custom', array(
       'methods' => 'GET',
       'callback' => array( new My_Custom_Controller(), 'get_custom_data' ),
   ) );
} ); 
这样,你就能够使用以下 API 端点来访问自定义控制器的 get_custom_data 方法了:
https://example.com/wp-json/my-plugin/v1/custom 
路由定义了请求的 URI 与绑定到该 URI 的处理程序之间的映射关系。使用 register_rest_route() 函数来定义路由。
例如,以下代码定义了 /my-plugin/v1/custom 端点,并将其映射到 My_Custom_Controller 控制器的 get_custom_data() 方法:
add_action( 'rest_api_init', function () {
   $namespace = 'my-plugin/v1';
   register_rest_route( $namespace, '/custom', array(
       'methods' => 'GET',
       'callback' => array( new My_Custom_Controller(), 'get_custom_data' ),
   ) );
} ); 
控制器是用于处理 REST API 请求的类。它们通常继承于 WP_REST_Controller 类。
以下是一个简单示例,该示例定义了一个 Hello_World_Controller 控制器,它在访问 /hello 端点时返回 “Hello, world!”:
class Hello_World_Controller extends WP_REST_Controller {
    public function register_routes() {
        $namespace = 'my-plugin/v1';
        $route = '/hello';
        register_rest_route( $namespace, $route, [
            'methods'  => 'GET',
            'callback' => [ $this, 'say_hello' ]
        ] );
    }
    public function say_hello( $request ) {
        $response = [
            'message' => 'Hello, world!'
        ];
        return new WP_REST_Response( $response, 200 );
    }
}
add_action( 'rest_api_init', function () {
    $controller = new Hello_World_Controller();
    $controller->register_routes();
} ); 
字段是指 REST API 返回的数据中的一个单元。你可以使用 WP_REST_Field 类来创建自定义字段。
以下是一个示例,该示例定义了一个名为 total_comments 的自定义字段,在返回文章时包含文章总评论数:
class Total_Comments_Field extends WP_REST_Field {
    public function update_value( $value, $data, $attribute_name ) {
        if ( 'total_comments' !== $attribute_name || ! is_numeric( $data ) ) {
            return $value;
        }
        $comments_query = new WP_Comment_Query();
        $comments_query->query( [
            'post_id' => $value
        ] );
        $total_comments = $comments_query->found_comments;
        return $total_comments;
    }
    public function get_name() {
        return 'total_comments';
    }
    public function get_schema() {
        return [
            'description' => 'The total number of comments for this post.',
            'type' => 'integer',
        ];
    }
}
add_action( 'rest_api_init', function () {
    $total_comments_field = new Total_Comments_Field();
    $total_comments_field->register_field();
} ); 如何在 WordPress REST API 中使用自定义字段和控制器有很多种变化方式,上面仅仅是示例,具体根据实际需求来修改。
阅读文章或者观看视频过程中有任何问题,请下方留言或者联系我Q248758228