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.org/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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Yes, 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?Pa 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
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0