Đăng nhập

WordPress REST API Cheatsheet (Nâng cao)

Dưới đây là WordPress REST API Cheatsheet nâng cao, dành cho lập trình viên cần thao tác với REST API trong theme, plugin hoặc headless frontend.


1. Tổng Quan REST API trong WordPress

  • WordPress tích hợp REST API từ phiên bản 4.7+
  • API mặc định sẵn cho: posts, pages, users, comments, taxonomies, media, settings, v.v.
  • Endpoint mặc định: https://yourdomain.com/wp-json/

2. Cấu trúc Endpoint

/wp-json/{namespace}/{route}

Ví dụ:

/wp-json/wp/v2/posts
/wp-json/wp/v2/users/5
/wp-json/myplugin/v1/data

3. Lấy Dữ Liệu (GET)

GET /wp-json/wp/v2/posts
GET /wp-json/wp/v2/posts?per_page=5&orderby=modified
GET /wp-json/wp/v2/users/3
GET /wp-json/wp/v2/pages?slug=gioi-thieu
  • Kết quả trả về là JSON
  • Hỗ trợ phân trang qua ?_embed, _fields, per_page, page, v.v.

4. Tạo Mới (POST)

POST /wp-json/wp/v2/posts
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "title": "Bài viết mới",
  "content": "Nội dung chi tiết",
  "status": "publish"
}
  • Cần xác thực (Authentication)
  • Các method POST, PUT, DELETE không hoạt động nếu không login hoặc dùng token/API key hợp lệ

5. Cập Nhật (PUT/PATCH)

POST /wp-json/wp/v2/posts/123
Authorization: Bearer YOUR_TOKEN

{
  "title": "Cập nhật tiêu đề"
}

6. Xoá (DELETE)

DELETE /wp-json/wp/v2/posts/123?force=true
Authorization: Bearer YOUR_TOKEN
  • force=true để xóa vĩnh viễn (không đưa vào trash)

7. Đăng ký Route Mới (Custom REST Endpoint)

add_action('rest_api_init', function () {
    register_rest_route('myplugin/v1', '/data', [
        'methods' => 'GET',
        'callback' => 'myplugin_get_data',
        'permission_callback' => '__return_true'
    ]);
});

function myplugin_get_data(WP_REST_Request $request) {
    return ['message' => 'Hello from custom API'];
}
  • Namespace nên có version (v1, v2…) để dễ quản lý

8. REST Request Object

Trong callback, bạn nhận được đối tượng $request:

function myplugin_callback(WP_REST_Request $request) {
    $param = $request->get_param('id');
    $all = $request->get_params();
    $headers = $request->get_headers();
}

9. REST Response Object

Để trả về response tùy biến:

return new WP_REST_Response([
    'success' => true,
    'data' => [/* dữ liệu */]
], 200);

Hoặc lỗi:

return new WP_Error('api_error', 'Có lỗi xảy ra', ['status' => 400]);

10. Xác Thực (Authentication)

Basic Authentication (dev/test)

Authorization: Basic base64(username:password)

JWT Authentication (phổ biến cho SPA, mobile)

  • Cài plugin JWT Auth
  • Gửi POST để lấy token:
POST /wp-json/jwt-auth/v1/token
{
  "username": "admin",
  "password": "123456"
}
  • Sau đó gửi:
Authorization: Bearer YOUR_TOKEN

11. Gọi REST API từ Theme/Plugin

$response = wp_remote_get('https://example.com/wp-json/wp/v2/posts');
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
wp_remote_post('https://example.com/wp-json/myplugin/v1/submit', [
    'method' => 'POST',
    'headers' => [
        'Authorization' => 'Bearer YOUR_TOKEN',
        'Content-Type' => 'application/json',
    ],
    'body' => json_encode([
        'field1' => 'value',
    ]),
]);

12. REST API và Nonce

Dùng khi gửi AJAX nội bộ từ theme/plugin:

fetch('/wp-json/myplugin/v1/action', {
  method: 'POST',
  headers: {
    'X-WP-Nonce': my_script_data.nonce
  },
  body: JSON.stringify(data)
});

PHP:

'permission_callback' => function () {
    return current_user_can('edit_posts');
}

13. Bảo vệ REST API (giới hạn quyền)

'permission_callback' => function (WP_REST_Request $request) {
    return is_user_logged_in() && current_user_can('manage_options');
}

14. Disable REST API hoàn toàn (nếu cần)

add_filter('rest_authentication_errors', function ($result) {
    if (!is_user_logged_in()) {
        return new WP_Error('rest_disabled', 'REST API bị tắt với người dùng chưa login', ['status' => 403]);
    }
    return $result;
});

15. Công cụ Hữu Ích

  • Postman: test API
  • Insomnia: REST client
  • Plugin: REST API Console
  • Plugin: JWT Authentication for WP REST API

Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.