The register_rest_route() WordPress PHP function registers a REST API route.
Usage
register_rest_route( $route_namespace, $route, $args = array(), $override = false );
Parameters
$route_namespace
(string) Required: The first URL segment after the core prefix. Should be unique to your package/plugin.$route
(string) Required: The base URL for the route you are adding.$args
(array) Optional: Either an array of options for the endpoint or an array of arrays for multiple methods. Default: array()$override
(bool) Optional: If the route already exists, should we override it? True overrides, false merges (with newer overriding if duplicate keys exist). Default: false
More information
See WordPress Developer Resources: register_rest_route()
Important: Do not use before the rest_api_init
hook.
Examples
Register a simple GET route
This example registers a route that responds to a GET request and returns a list of items.
add_action( 'rest_api_init', function () { register_rest_route( 'my-plugin/v1', '/items', array( 'methods' => 'GET', 'callback' => 'get_items' )); }); function get_items() { // Code to get items }
Register a POST route
This example registers a route that creates an item when a POST request is made.
add_action( 'rest_api_init', function () { register_rest_route( 'my-plugin/v1', '/items', array( 'methods' => 'POST', 'callback' => 'create_item' )); }); function create_item() { // Code to create an item }
Register a route with multiple methods
This example registers a route that supports both GET and POST methods.
add_action( 'rest_api_init', function () { register_rest_route( 'my-plugin/v1', '/items', array( 'methods' => array( 'GET', 'POST' ), 'callback' => 'handle_item_request' )); }); function handle_item_request() { // Code to handle both GET and POST requests }
Register a route with permission callback
This example registers a public route with a permission callback.
add_action( 'rest_api_init', function () { register_rest_route( 'my-plugin/v1', '/items', array( 'methods' => 'GET', 'callback' => 'get_items', 'permission_callback' => '__return_true' )); }); function get_items() { // Code to get items }
Register a route with arguments validation
This example registers a route with arguments validation for a GET request.
add_action( 'rest_api_init', function () { register_rest_route( 'my-plugin/v1', '/items/(?P<id>\d+)', array( 'methods' => 'GET', 'callback' => 'get_item_by_id', 'args' => array( 'id' => array( 'validate_callback' => function($param) { return is_numeric($param); } ) ) )); }); function get_item_by_id( $request ) { // Code to get item by id }