2023-06-11 / 402阅
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