REST API khai báo đường dẫn api cho custom post types và taxonomy wordpress

WordPress REST API là một tính năng cốt lõi được giới thiệu trong WordPress 4.7 cho phép các nhà phát triển thực hiện các yêu cầu HTTP để truy cập dữ liệu WordPress dưới dạng một đối tượng JSON. API REST cho phép nhiều giải pháp khác nhau, cho dù bạn đang tìm cách tạo một trang web hoặc ứng dụng được tách riêng với dữ liệu từ chương trình phụ trợ WordPress hay chỉ đơn giản là cho phép các trang web bên ngoài đọc một nguồn cấp dữ liệu bài đăng. Trong bài viết này là một cái nhìn về các tình huống phổ biến để tùy chỉnh phản hồi API REST cho các yêu cầu GET cho bài đăng.

Một cái nhìn ngắn gọn về API lõi

Theo mặc định, thông tin bài đăng của trang web WordPress có thể được tìm thấy tại webcuaban.com/wp-json/v2/posts. API này hiển thị 10 bài đăng gần đây nhất thuộc bất kỳ chuyên mục nào. Tương tự, bạn có thể tìm thấy các trang (bài đăng thuộc loại “trang” trong cơ sở dữ liệu WordPress) tại webcuaban.com/wp-json/v2/pages.

Trong trường hợp các bạn khai báo một post types tùy chỉnh (vd: post type là: wqn_video) thì mặc định sẽ không có link api mà bạn phải khai báo thêm mấy dòng code vào file functions.php để có thể cung cấp link api của post type (wqn_video) cho người dùng. cách làm như sau :

/**
* Add REST API support to an already registered post type qti_audio.
*/
add_filter( 'register_post_type_args', 'my_post_type_video_args', 10, 2 );
function my_post_type_video_args( $args, $post_type ) {
if ( 'wqn_video' === $post_type ) { //wqn_video chính là posttype mà bạn đã khai báo trước đó
$args['show_in_rest'] = true;
// Optionally customize the rest_base or rest_controller_class
$args['rest_base'] = 'videos'; // đường dẫn cho api khai báo vậy thì link api của bạn là: webcuaban.com/wp-json/v2/videos
$args['rest_controller_class'] = 'WP_REST_Posts_Controller';
}
return $args;
}

Đối với Custom Taxonomy cũng tương tự như vậy. ta code như sau:


/**
* Add REST API support to an already registered taxonomy qti_audio_category.
*/
add_filter( 'register_taxonomy_args', 'wqn_video_taxonomy_args', 10, 2 );

function wqn_video_taxonomy_args( $args, $taxonomy_name ) {

if ( 'wqn_video_category' === $taxonomy_name ) {
$args['show_in_rest'] = true;
// Optionally customize the rest_base or rest_controller_class
$args['rest_base'] = 'video-category'; // đường dẫn khao báo cho api
$args['rest_controller_class'] = 'WP_REST_Terms_Controller';
}
return $args;
}

Chúc các bạn thành công.