I'm trying to define a GET REST API endpoint with register_rest_route
register_rest_route supports defining a URL parameter and it is documented at
I would love to define a list of query parameters and let Wordpress handle the validation part. Is there an official way to do so?
I'm trying to define a GET REST API endpoint with register_rest_route
register_rest_route supports defining a URL parameter and it is documented at https://developer.wordpress/rest-api/extending-the-rest-api/adding-custom-endpoints/#arguments
I would love to define a list of query parameters and let Wordpress handle the validation part. Is there an official way to do so?
Share Improve this question asked Jul 9, 2020 at 10:52 왕뚜껑왕뚜껑 651 silver badge3 bronze badges 5 |1 Answer
Reset to default 3Yes, from the link you posted there are examples for both sanitising and validating the parameters. Validating does a check which can fail and block the API call from running; sanitising just does some operations to clean or interpret the parameter and does not stop the API call from running.
An example of validation, taken from the page:
<?php
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/author/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'my_awesome_func',
'args' => array(
'id' => array(
'validate_callback' => function($param, $request, $key) {
return is_numeric( $param );
}
),
),
) );
} );
You can see in the second parameter of register_rest_route
that this defines an endpoints like /author/1234
The format of the second parameter of register_rest_route breaks down as:
/author/
initial part of the URL to match?P
a code specific to this function that means 'parameter'. Note this is not included in the URL when called<id>
optional name for the parameter, used belows inargs
, not included as part of URL.\d+
the regex for this parameter
validate_callback
is for. – Jacob Peattie Commented Jul 9, 2020 at 10:59args
argument. By using regex in the endpoint you can accept them as part of the URL, but by default they're passed as query parameters. – Jacob Peattie Commented Jul 9, 2020 at 11:11