wpseek.com
A WordPress-centric search engine for devs and theme authors



create_initial_rest_routes › WordPress Function

Since4.7.0
Deprecatedn/a
create_initial_rest_routes ( No parameters )
Defined at:
Codex:

Registers default REST API routes.



Source

function create_initial_rest_routes() {
	global $wp_post_types;

	// Register the registered templates endpoint. For that we need to copy the
	// wp_template post type so that it's available as an entity in core-data.
	$wp_post_types['wp_registered_template']                        = clone $wp_post_types['wp_template'];
	$wp_post_types['wp_registered_template']->name                  = 'wp_registered_template';
	$wp_post_types['wp_registered_template']->rest_base             = 'wp_registered_template';
	$wp_post_types['wp_registered_template']->rest_controller_class = 'WP_REST_Registered_Templates_Controller';

	foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
		$controller = $post_type->get_rest_controller();

		if ( ! $controller ) {
			continue;
		}

		if ( ! $post_type->late_route_registration ) {
			$controller->register_routes();
		}

		$revisions_controller = $post_type->get_revisions_rest_controller();
		if ( $revisions_controller ) {
			$revisions_controller->register_routes();
		}

		$autosaves_controller = $post_type->get_autosave_rest_controller();
		if ( $autosaves_controller ) {
			$autosaves_controller->register_routes();
		}

		if ( $post_type->late_route_registration ) {
			$controller->register_routes();
		}
	}

	// Register the old templates endpoints. The WP_REST_Templates_Controller
	// and sub-controllers used linked to the wp_template post type, but are no
	// longer. They still require a post type object when contructing the class.
	// To maintain backward and changes to these controller classes, we make use
	// that the wp_template post type has the right information it needs.
	$wp_post_types['wp_template']->rest_base = 'templates';
	// Store the classes so they can be restored.
	$original_rest_controller_class           = $wp_post_types['wp_template']->rest_controller_class;
	$original_autosave_rest_controller_class  = $wp_post_types['wp_template']->autosave_rest_controller_class;
	$original_revisions_rest_controller_class = $wp_post_types['wp_template']->revisions_rest_controller_class;
	// Temporarily set the old classes.
	$wp_post_types['wp_template']->rest_controller_class           = 'WP_REST_Templates_Controller';
	$wp_post_types['wp_template']->autosave_rest_controller_class  = 'WP_REST_Template_Autosaves_Controller';
	$wp_post_types['wp_template']->revisions_rest_controller_class = 'WP_REST_Template_Revisions_Controller';
	// Initialize the controllers. The order is important: the autosave
	// controller needs both the templates and revisions controllers.
	$controller                                    = new WP_REST_Templates_Controller( 'wp_template' );
	$wp_post_types['wp_template']->rest_controller = $controller;
	$revisions_controller                          = new WP_REST_Template_Revisions_Controller( 'wp_template' );
	$wp_post_types['wp_template']->revisions_rest_controller = $revisions_controller;
	$autosaves_controller                                    = new WP_REST_Template_Autosaves_Controller( 'wp_template' );
	// Unset the controller cache, it will be re-initialized when
	// get_rest_controller is called.
	$wp_post_types['wp_template']->rest_controller           = null;
	$wp_post_types['wp_template']->revisions_rest_controller = null;
	// Restore the original classes.
	$wp_post_types['wp_template']->rest_controller_class           = $original_rest_controller_class;
	$wp_post_types['wp_template']->autosave_rest_controller_class  = $original_autosave_rest_controller_class;
	$wp_post_types['wp_template']->revisions_rest_controller_class = $original_revisions_rest_controller_class;
	// Restore the original base.
	$wp_post_types['wp_template']->rest_base = 'wp_template';

	// Register the old routes.
	$autosaves_controller->register_routes();
	$revisions_controller->register_routes();
	$controller->register_routes();

	register_rest_field(
		'wp_template',
		'theme',
		array(
			'get_callback' => function ( $post_arr ) {
				// add_additional_fields_to_object is also called for the old
				// templates controller, so we need to check if the id is an
				// integer to make sure it's the proper post type endpoint.
				if ( ! is_int( $post_arr['id'] ) ) {
					$template = get_block_template( $post_arr['id'], 'wp_template' );
					return $template ? $template->theme : null;
				}
				$terms = get_the_terms( $post_arr['id'], 'wp_theme' );
				if ( is_wp_error( $terms ) || empty( $terms ) ) {
					return null;
				}
				return $terms[0]->slug;
			},
		)
	);

	// Post types.
	$controller = new WP_REST_Post_Types_Controller();
	$controller->register_routes();

	// Post statuses.
	$controller = new WP_REST_Post_Statuses_Controller();
	$controller->register_routes();

	// Taxonomies.
	$controller = new WP_REST_Taxonomies_Controller();
	$controller->register_routes();

	// Terms.
	foreach ( get_taxonomies( array( 'show_in_rest' => true ), 'object' ) as $taxonomy ) {
		$controller = $taxonomy->get_rest_controller();

		if ( ! $controller ) {
			continue;
		}

		$controller->register_routes();
	}

	// Users.
	$controller = new WP_REST_Users_Controller();
	$controller->register_routes();

	// Application Passwords
	$controller = new WP_REST_Application_Passwords_Controller();
	$controller->register_routes();

	// Comments.
	$controller = new WP_REST_Comments_Controller();
	$controller->register_routes();

	$search_handlers = array(
		new WP_REST_Post_Search_Handler(),
		new WP_REST_Term_Search_Handler(),
		new WP_REST_Post_Format_Search_Handler(),
	);

	/**
	 * Filters the search handlers to use in the REST search controller.
	 *
	 * @since 5.0.0
	 *
	 * @param array $search_handlers List of search handlers to use in the controller. Each search
	 *                               handler instance must extend the `WP_REST_Search_Handler` class.
	 *                               Default is only a handler for posts.
	 */
	$search_handlers = apply_filters( 'wp_rest_search_handlers', $search_handlers );

	$controller = new WP_REST_Search_Controller( $search_handlers );
	$controller->register_routes();

	// Block Renderer.
	$controller = new WP_REST_Block_Renderer_Controller();
	$controller->register_routes();

	// Block Types.
	$controller = new WP_REST_Block_Types_Controller();
	$controller->register_routes();

	// Settings.
	$controller = new WP_REST_Settings_Controller();
	$controller->register_routes();

	// Themes.
	$controller = new WP_REST_Themes_Controller();
	$controller->register_routes();

	// Plugins.
	$controller = new WP_REST_Plugins_Controller();
	$controller->register_routes();

	// Sidebars.
	$controller = new WP_REST_Sidebars_Controller();
	$controller->register_routes();

	// Widget Types.
	$controller = new WP_REST_Widget_Types_Controller();
	$controller->register_routes();

	// Widgets.
	$controller = new WP_REST_Widgets_Controller();
	$controller->register_routes();

	// Block Directory.
	$controller = new WP_REST_Block_Directory_Controller();
	$controller->register_routes();

	// Pattern Directory.
	$controller = new WP_REST_Pattern_Directory_Controller();
	$controller->register_routes();

	// Block Patterns.
	$controller = new WP_REST_Block_Patterns_Controller();
	$controller->register_routes();

	// Block Pattern Categories.
	$controller = new WP_REST_Block_Pattern_Categories_Controller();
	$controller->register_routes();

	// Site Health.
	$site_health = WP_Site_Health::get_instance();
	$controller  = new WP_REST_Site_Health_Controller( $site_health );
	$controller->register_routes();

	// URL Details.
	$controller = new WP_REST_URL_Details_Controller();
	$controller->register_routes();

	// Menu Locations.
	$controller = new WP_REST_Menu_Locations_Controller();
	$controller->register_routes();

	// Site Editor Export.
	$controller = new WP_REST_Edit_Site_Export_Controller();
	$controller->register_routes();

	// Navigation Fallback.
	$controller = new WP_REST_Navigation_Fallback_Controller();
	$controller->register_routes();

	// Font Collections.
	$font_collections_controller = new WP_REST_Font_Collections_Controller();
	$font_collections_controller->register_routes();

	// Abilities.
	$abilities_run_controller = new WP_REST_Abilities_V1_Run_Controller();
	$abilities_run_controller->register_routes();
	$abilities_list_controller = new WP_REST_Abilities_V1_List_Controller();
	$abilities_list_controller->register_routes();
}