Make WordPress Core

01/11/2019 06:18:41 PM (6 years ago)

REST API: Encourage proper usage of register_rest_route().

Calling register_rest_route() too early in the loading process has the potential to cause some unintentional problems and pitfalls. Because register_rest_route() calls rest_get_server() (which creates the WP_REST_Server instance), calling the function directly and/or before rest_api_init should be discouraged.

For example, if register_rest_route () is called on init, the REST API server instance is set up (and all functions added to rest_api_init and other related hooks are invoked), even though the current request may not be a REST request. Also, if register_rest_route() is called even earlier (say, in an mu-plugin file), required endpoints may be missing since normal plugins have not yet been loaded and have not had a chance to register their own action hooks.

This adds a _doing_it_wrong() notice the first time register_rest_route() is called before rest_api_init in a request to encourage best practices for registering REST API routes.

Props kraftbj, desrosj, timothyblynjacobs.
Fixes #45265.

1 edited


  • trunk/src/wp-includes/rest-api.php

    r44546 r44568  
    1818 * Registers a REST API route.
    1919 *
    20  * @since 4.4.0
     20 * Note: Do not use before the {@see 'rest_api_init'} hook.
     21 *
     22 * @since 4.4.0
     23 * @since 5.1.0 Added a _doing_it_wrong() notice when not called on or after the rest_api_init hook.
    2124 *
    2225 * @param string $namespace The first URL segment after core prefix. Should be unique to your package/plugin.
    4043        _doing_it_wrong( 'register_rest_route', __( 'Route must be specified.' ), '4.4.0' );
    4144        return false;
     45    }
     47    if ( ! did_action( 'rest_api_init' ) ) {
     48        _doing_it_wrong( 'register_rest_route', __( 'REST API routes must be registered on the rest_api_init action.' ), '5.1.0' );
    4249    }
Note: See TracChangeset for help on using the changeset viewer.