4

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?

5
  • 1
    Yes, you linked to it. What do you need help with? You mention WordPress 'handling the validation', but it can't do that unless you tell it how, which is what the validate_callback is for. Jul 9 '20 at 10:59
  • @JacobPeattie The link explains about how to define an URL parameter (/author/(?P<id>\d+)). I would like to define a query parameter (ex: ?id=test)
    – 왕뚜껑
    Jul 9 '20 at 11:01
  • They're defined the same way, in the args 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. Jul 9 '20 at 11:11
  • @JacobPeattie Ah! I did not know that. Thank you so much.
    – 왕뚜껑
    Jul 9 '20 at 11:12
  • 1
    Can you post the answer as an answer?
    – Tom J Nowell
    Jul 9 '20 at 11:29
2

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
  • ?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 in args, not included as part of URL.
  • \d+ the regex for this parameter

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.