25

I am trying to create a custom endpoint for the WordPress REST API and pass parameters through the URL.

The endpoint currently is:

/wp-json/v1/products/81838240219

What I am trying to achieve is an endpoint that looks like this and being able to retrieve the identifier parameter in the callback.

/wp-json/v1/products?identifier=81838240219

// Custom api endpoint test
function my_awesome_func( $data ) {
  $identifier = get_query_var( 'identifier' );
  return $identifier;
}
add_action( 'rest_api_init', function () {
register_rest_route( 'api/v1', '/products=(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'my_awesome_func',
  ) );
} );

3 Answers 3

39

First you need to pass in the namespace to register_rest_route

Like this

add_action( 'rest_api_init', function () {
    register_rest_route( 'namespace/v1', '/product/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'my_awesome_func',
    ) );
} );

Your name space namespace/v1 and your route is /product/{id} like this /namespace/v1/product/81838240219

and now you can use the route inside your function like this

function my_awesome_func( $data ) {
    $product_ID = $data['id'];
}

If you need to add options for ex. /namespace/v1/product/81838240219?name=Rob

and use it inside the function like this

function my_awesome_func( $data ) {
    $product_ID = $data['id'];
    $name = $data->get_param( 'name' );
}

The process is very simple but requires you to read this documentation

Sign up to request clarification or add additional context in comments.

1 Comment

Awesome. Thank you very much for your help.
16

I modified the provided answer a little to get my desired endpoint:

/wp-json/api/v1/product?identifier=81838240219

add_action( 'rest_api_init', function () {
register_rest_route( 'api/v1', '/product/', array(
      'methods' => 'GET',
      'callback' => 'ea_get_product_data',
    ) );
} );

function ea_get_product_data( $data ) {
    $identifier = $data->get_param( 'identifier' );
    return $identifier;
}

Comments

9

If you want to pass alphanumeric parameters, use [a-zA-Z0-9-] instead of \d

add_action( 'rest_api_init', function () {
    register_rest_route( 'namespace/v1', '/product/(?P<id>[a-zA-Z0-9-]+)', array(
        'methods' => 'GET',
        'callback' => 'my_awesome_func',
    ) );
} );

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.