$page_routes ) { $page_slug_underscore = str_replace( '-', '_', $page_slug ); $global_name = 'gutenberg_' . $page_slug_underscore . '_routes_data'; $GLOBALS[ $global_name ] = $page_routes; } /** * Generic helper function to register routes for a page. * * @param array $page_routes Array of route data for the page. * @param string $register_function_name Name of the function to call for registering each route. */ function gutenberg_register_page_routes( $page_routes, $register_function_name ) { // Load build constants $build_constants = require __DIR__ . '/constants.php'; foreach ( $page_routes as $route ) { $content_handle = null; $route_handle = null; // Register content module if exists if ( $route['has_content'] ) { $content_asset_path = __DIR__ . "/routes/{$route['name']}/content.min.asset.php"; if ( file_exists( $content_asset_path ) ) { $content_asset = require $content_asset_path; $content_handle = 'wp/routes/' . $route['name'] . '/content'; $extension = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '.js' : '.min.js'; // Deregister first to override any previously registered version // (e.g., Core's default modules when running as a plugin). wp_deregister_script_module( $content_handle ); wp_register_script_module( $content_handle, $build_constants['build_url'] . 'routes/' . $route['name'] . '/content' . $extension, $content_asset['module_dependencies'] ?? array(), $content_asset['version'] ?? false ); } } // Register route module if exists if ( $route['has_route'] ) { $route_asset_path = __DIR__ . "/routes/{$route['name']}/route.min.asset.php"; if ( file_exists( $route_asset_path ) ) { $route_asset = require $route_asset_path; $route_handle = 'wp/routes/' . $route['name'] . '/route'; $extension = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '.js' : '.min.js'; // Deregister first to override any previously registered version // (e.g., Core's default modules when running as a plugin). wp_deregister_script_module( $route_handle ); wp_register_script_module( $route_handle, $build_constants['build_url'] . 'routes/' . $route['name'] . '/route' . $extension, $route_asset['module_dependencies'] ?? array(), $route_asset['version'] ?? false ); } } // Register route with page if ( function_exists( $register_function_name ) ) { call_user_func( $register_function_name, $route['path'], $content_handle, $route_handle ); } } } // Page-specific route registration functions // Page-specific route registration functions for options-connectors /** * Register routes for options-connectors page (full-page mode). */ function gutenberg_register_options_connectors_page_routes() { global $gutenberg_options_connectors_routes_data; gutenberg_register_page_routes( $gutenberg_options_connectors_routes_data, 'gutenberg_register_options_connectors_route' ); } add_action( 'options-connectors_init', 'gutenberg_register_options_connectors_page_routes' ); /** * Register routes for options-connectors page (wp-admin mode). */ function gutenberg_register_options_connectors_wp_admin_page_routes() { global $gutenberg_options_connectors_routes_data; gutenberg_register_page_routes( $gutenberg_options_connectors_routes_data, 'gutenberg_register_options_connectors_wp_admin_route' ); } add_action( 'options-connectors-wp-admin_init', 'gutenberg_register_options_connectors_wp_admin_page_routes' ); // Page-specific route registration functions for content-types /** * Register routes for content-types page (full-page mode). */ function gutenberg_register_content_types_page_routes() { global $gutenberg_content_types_routes_data; gutenberg_register_page_routes( $gutenberg_content_types_routes_data, 'gutenberg_register_content_types_route' ); } add_action( 'content-types_init', 'gutenberg_register_content_types_page_routes' ); /** * Register routes for content-types page (wp-admin mode). */ function gutenberg_register_content_types_wp_admin_page_routes() { global $gutenberg_content_types_routes_data; gutenberg_register_page_routes( $gutenberg_content_types_routes_data, 'gutenberg_register_content_types_wp_admin_route' ); } add_action( 'content-types-wp-admin_init', 'gutenberg_register_content_types_wp_admin_page_routes' ); // Page-specific route registration functions for dashboard /** * Register routes for dashboard page (full-page mode). */ function gutenberg_register_dashboard_page_routes() { global $gutenberg_dashboard_routes_data; gutenberg_register_page_routes( $gutenberg_dashboard_routes_data, 'gutenberg_register_dashboard_route' ); } add_action( 'dashboard_init', 'gutenberg_register_dashboard_page_routes' ); /** * Register routes for dashboard page (wp-admin mode). */ function gutenberg_register_dashboard_wp_admin_page_routes() { global $gutenberg_dashboard_routes_data; gutenberg_register_page_routes( $gutenberg_dashboard_routes_data, 'gutenberg_register_dashboard_wp_admin_route' ); } add_action( 'dashboard-wp-admin_init', 'gutenberg_register_dashboard_wp_admin_page_routes' ); // Page-specific route registration functions for experiments /** * Register routes for experiments page (full-page mode). */ function gutenberg_register_experiments_page_routes() { global $gutenberg_experiments_routes_data; gutenberg_register_page_routes( $gutenberg_experiments_routes_data, 'gutenberg_register_experiments_route' ); } add_action( 'experiments_init', 'gutenberg_register_experiments_page_routes' ); /** * Register routes for experiments page (wp-admin mode). */ function gutenberg_register_experiments_wp_admin_page_routes() { global $gutenberg_experiments_routes_data; gutenberg_register_page_routes( $gutenberg_experiments_routes_data, 'gutenberg_register_experiments_wp_admin_route' ); } add_action( 'experiments-wp-admin_init', 'gutenberg_register_experiments_wp_admin_page_routes' ); // Page-specific route registration functions for font-library /** * Register routes for font-library page (full-page mode). */ function gutenberg_register_font_library_page_routes() { global $gutenberg_font_library_routes_data; gutenberg_register_page_routes( $gutenberg_font_library_routes_data, 'gutenberg_register_font_library_route' ); } add_action( 'font-library_init', 'gutenberg_register_font_library_page_routes' ); /** * Register routes for font-library page (wp-admin mode). */ function gutenberg_register_font_library_wp_admin_page_routes() { global $gutenberg_font_library_routes_data; gutenberg_register_page_routes( $gutenberg_font_library_routes_data, 'gutenberg_register_font_library_wp_admin_route' ); } add_action( 'font-library-wp-admin_init', 'gutenberg_register_font_library_wp_admin_page_routes' ); // Page-specific route registration functions for guidelines /** * Register routes for guidelines page (full-page mode). */ function gutenberg_register_guidelines_page_routes() { global $gutenberg_guidelines_routes_data; gutenberg_register_page_routes( $gutenberg_guidelines_routes_data, 'gutenberg_register_guidelines_route' ); } add_action( 'guidelines_init', 'gutenberg_register_guidelines_page_routes' ); /** * Register routes for guidelines page (wp-admin mode). */ function gutenberg_register_guidelines_wp_admin_page_routes() { global $gutenberg_guidelines_routes_data; gutenberg_register_page_routes( $gutenberg_guidelines_routes_data, 'gutenberg_register_guidelines_wp_admin_route' ); } add_action( 'guidelines-wp-admin_init', 'gutenberg_register_guidelines_wp_admin_page_routes' ); // Page-specific route registration functions for site-editor-v2 /** * Register routes for site-editor-v2 page (full-page mode). */ function gutenberg_register_site_editor_v2_page_routes() { global $gutenberg_site_editor_v2_routes_data; gutenberg_register_page_routes( $gutenberg_site_editor_v2_routes_data, 'gutenberg_register_site_editor_v2_route' ); } add_action( 'site-editor-v2_init', 'gutenberg_register_site_editor_v2_page_routes' ); /** * Register routes for site-editor-v2 page (wp-admin mode). */ function gutenberg_register_site_editor_v2_wp_admin_page_routes() { global $gutenberg_site_editor_v2_routes_data; gutenberg_register_page_routes( $gutenberg_site_editor_v2_routes_data, 'gutenberg_register_site_editor_v2_wp_admin_route' ); } add_action( 'site-editor-v2-wp-admin_init', 'gutenberg_register_site_editor_v2_wp_admin_page_routes' ); // Page-specific route registration functions for media-editor /** * Register routes for media-editor page (full-page mode). */ function gutenberg_register_media_editor_page_routes() { global $gutenberg_media_editor_routes_data; gutenberg_register_page_routes( $gutenberg_media_editor_routes_data, 'gutenberg_register_media_editor_route' ); } add_action( 'media-editor_init', 'gutenberg_register_media_editor_page_routes' ); /** * Register routes for media-editor page (wp-admin mode). */ function gutenberg_register_media_editor_wp_admin_page_routes() { global $gutenberg_media_editor_routes_data; gutenberg_register_page_routes( $gutenberg_media_editor_routes_data, 'gutenberg_register_media_editor_wp_admin_route' ); } add_action( 'media-editor-wp-admin_init', 'gutenberg_register_media_editor_wp_admin_page_routes' );