首页 视频课程 主题开发课程第20章、API接口 WordPress REST API 接口的关键概念

WordPress REST API 接口的关键概念

2023-06-11 / 311阅

WordPress REST API 是一种将 WordPress 内容以 JSON 格式进行交互的方式。下面是一些关键概念和相关示例代码:

命名空间(Namespace)

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 

路由(Routes)

路由定义了请求的 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' ),
   ) );
} ); 

控制器(Controllers)

控制器是用于处理 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();
} ); 

字段(Fields)

字段是指 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

大家谈论
    我的见解
    目录