@@ -298,16 +298,39 @@ function create_initial_rest_routes() {
298298 }
299299 }
300300
301- // Register the old templates endpoints.
301+ // Register the old templates endpoints. The WP_REST_Templates_Controller
302+ // and sub-controllers used linked to the wp_template post type, but are no
303+ // longer. They still require a post type object when contructing the class.
304+ // To maintain backward and changes to these controller classes, we make use
305+ // that the wp_template post type has the right information it needs.
302306 $ wp_post_types ['wp_template ' ]->rest_base = 'templates ' ;
303- $ controller = new WP_REST_Templates_Controller ( 'wp_template ' );
304- $ wp_post_types ['wp_template ' ]->rest_controller = $ controller ;
305- $ revisions_controller = new WP_REST_Template_Revisions_Controller ( 'wp_template ' );
307+ // Store the classes so they can be restored.
308+ $ original_rest_controller_class = $ wp_post_types ['wp_template ' ]->rest_controller_class ;
309+ $ original_autosave_rest_controller_class = $ wp_post_types ['wp_template ' ]->autosave_rest_controller_class ;
310+ $ original_revisions_rest_controller_class = $ wp_post_types ['wp_template ' ]->revisions_rest_controller_class ;
311+ // Temporarily set the old classes.
312+ $ wp_post_types ['wp_template ' ]->rest_controller_class = 'WP_REST_Templates_Controller ' ;
313+ $ wp_post_types ['wp_template ' ]->autosave_rest_controller_class = 'WP_REST_Template_Autosaves_Controller ' ;
314+ $ wp_post_types ['wp_template ' ]->revisions_rest_controller_class = 'WP_REST_Template_Revisions_Controller ' ;
315+ // Initialize the controllers. The order is important: the autosave
316+ // controller needs both the templates and revisions controllers.
317+ $ controller = new WP_REST_Templates_Controller ( 'wp_template ' );
318+ $ wp_post_types ['wp_template ' ]->rest_controller = $ controller ;
319+ $ revisions_controller = new WP_REST_Template_Revisions_Controller ( 'wp_template ' );
306320 $ wp_post_types ['wp_template ' ]->revisions_rest_controller = $ revisions_controller ;
307- $ autosaves_controller = new WP_REST_Template_Autosaves_Controller ( 'wp_template ' );
308- $ wp_post_types ['wp_template ' ]->rest_controller = null ;
321+ $ autosaves_controller = new WP_REST_Template_Autosaves_Controller ( 'wp_template ' );
322+ // Unset the controller cache, it will be re-initialized when
323+ // get_rest_controller is called.
324+ $ wp_post_types ['wp_template ' ]->rest_controller = null ;
309325 $ wp_post_types ['wp_template ' ]->revisions_rest_controller = null ;
326+ // Restore the original classes.
327+ $ wp_post_types ['wp_template ' ]->rest_controller_class = $ original_rest_controller_class ;
328+ $ wp_post_types ['wp_template ' ]->autosave_rest_controller_class = $ original_autosave_rest_controller_class ;
329+ $ wp_post_types ['wp_template ' ]->revisions_rest_controller_class = $ original_revisions_rest_controller_class ;
330+ // Restore the original base.
310331 $ wp_post_types ['wp_template ' ]->rest_base = 'wp_template ' ;
332+
333+ // Register the old routes.
311334 $ autosaves_controller ->register_routes ();
312335 $ revisions_controller ->register_routes ();
313336 $ controller ->register_routes ();
0 commit comments