register_rest_route() WP 1.0
Registers a REST API route.
Note: Do not use before the 'rest_api_init' hook.
No Hooks.
Return
true/false. True on success, false on error.
Usage
register_rest_route( $namespace, $route, $args, $override );
- $namespace(string) (required)
- The first URL segment after core prefix. Should be unique to your package/plugin.
- $route(string) (required)
- The base URL for route you are adding.
- $args(array)
- Either an array of options for the endpoint, or an array of arrays for multiple methods.
Default: empty array
- $override(true/false)
- If the route already exists, should we override it? True overrides, false merges (with newer overriding if duplicate keys exist).
Default: false
Changelog
Since 4.4.0 |
Introduced. |
Since 5.1.0 |
Added a _doing_it_wrong() notice when not called on or after the rest_api_init hook. |
Since 5.5.0 |
Added a _doing_it_wrong() notice when the required permission_callback argument is not set. |
Code of register_rest_route() register rest route
WP 5.6
<?php
function register_rest_route( $namespace, $route, $args = array(), $override = false ) {
if ( empty( $namespace ) ) {
/*
* Non-namespaced routes are not allowed, with the exception of the main
* and namespace indexes. If you really need to register a
* non-namespaced route, call `WP_REST_Server::register_route` directly.
*/
_doing_it_wrong( 'register_rest_route', __( 'Routes must be namespaced with plugin or theme name and version.' ), '4.4.0' );
return false;
} elseif ( empty( $route ) ) {
_doing_it_wrong( 'register_rest_route', __( 'Route must be specified.' ), '4.4.0' );
return false;
}
$clean_namespace = trim( $namespace, '/' );
if ( $clean_namespace !== $namespace ) {
_doing_it_wrong( __FUNCTION__, __( 'Namespace must not start or end with a slash.' ), '5.4.2' );
}
if ( ! did_action( 'rest_api_init' ) ) {
_doing_it_wrong(
'register_rest_route',
sprintf(
/* translators: %s: rest_api_init */
__( 'REST API routes must be registered on the %s action.' ),
'<code>rest_api_init</code>'
),
'5.1.0'
);
}
if ( isset( $args['args'] ) ) {
$common_args = $args['args'];
unset( $args['args'] );
} else {
$common_args = array();
}
if ( isset( $args['callback'] ) ) {
// Upgrade a single set to multiple.
$args = array( $args );
}
$defaults = array(
'methods' => 'GET',
'callback' => null,
'args' => array(),
);
foreach ( $args as $key => &$arg_group ) {
if ( ! is_numeric( $key ) ) {
// Route option, skip here.
continue;
}
$arg_group = array_merge( $defaults, $arg_group );
$arg_group['args'] = array_merge( $common_args, $arg_group['args'] );
if ( ! isset( $arg_group['permission_callback'] ) ) {
_doing_it_wrong(
__FUNCTION__,
sprintf(
/* translators: 1: The REST API route being registered, 2: The argument name, 3: The suggested function name. */
__( 'The REST API route definition for %1$s is missing the required %2$s argument. For REST API routes that are intended to be public, use %3$s as the permission callback.' ),
'<code>' . $clean_namespace . '/' . trim( $route, '/' ) . '</code>',
'<code>permission_callback</code>',
'<code>__return_true</code>'
),
'5.5.0'
);
}
}
$full_route = '/' . $clean_namespace . '/' . trim( $route, '/' );
rest_get_server()->register_route( $clean_namespace, $full_route, $args, $override );
return true;
}
Related Functions