Wordpress Rest API tùy chỉnh điểm cuối tùy chọn param


15

Có thể sử dụng register_rest_route()với các tham số tùy chọn trong url?

Giả sử tuyến đường được đăng ký theo cách này:

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Bây giờ có thể thực hiện cuộc gọi api trên url như / wp-json / api / động vật / 15 , nhưng có cách nào để khai báo param là tùy chọn để bắt tuyến như / wp-json / api / động vật / .

Tôi cũng đã thử khai báo tuyến đường như dưới đây, nhưng không thành công:

/animals/(?P<id>\d+)?

Bạn có thể khai báo một tuyến đường khác mà không có thông số hoặc sử dụng các thông số GET, nhưng có cách nào để thực hiện việc này register_rest_route()không?

Cảm ơn lời đề nghị của bạn.

Câu trả lời:


18

Bạn nên đặt các tham số đã đặt tên của biểu thức chính tuyến vào một nhóm bắt tùy chọn:

register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Tham số thứ hai chỉ đơn giản là một regex, do đó bạn có thể sử dụng logic regex bình thường để làm cho nó phức tạp hơn


3

Có thể có một cách để làm điều đó với một register_rest_routecuộc gọi chức năng, tôi không biết làm thế nào để làm điều đó và nó sẽ là lý tưởng. Tuy nhiên, sao chép lệnh register_rest_routegọi hàm trong phương thức hooked sẽ làm những gì bạn muốn.

register_rest_route( 'api', '/animals/', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals'
] );

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Đó là phương thức get_animals bạn sẽ muốn có các điều kiện xử lý từng trường hợp. Một cho nếu idarg được đặt và dự phòng kiểm tra các $_GETbiến.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.