Title: wp_register_page_routes
Published: May 20, 2026

---

# wp_register_page_routes( array $page_routes, string $register_function_name )

## In this article

 * [Parameters](https://developer.wordpress.org/reference/functions/wp_register_page_routes/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/functions/wp_register_page_routes/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/functions/wp_register_page_routes/?output_format=md#related)

[ Back to top](https://developer.wordpress.org/reference/functions/wp_register_page_routes/?output_format=md#wp--skip-link--target)

Generic helper function to register routes for a page.

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/wp_register_page_routes/?output_format=md#parameters)󠁿

 `$page_routes`arrayrequired

Array of route data for the page.

`$register_function_name`stringrequired

Name of the function to call for registering each route.

## 󠀁[Source](https://developer.wordpress.org/reference/functions/wp_register_page_routes/?output_format=md#source)󠁿

    ```php
    function wp_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 );
    		}
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/build/routes.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/build/routes.php#L41)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/build/routes.php#L41-L92)

## 󠀁[Related](https://developer.wordpress.org/reference/functions/wp_register_page_routes/?output_format=md#related)󠁿

| Uses | Description | 
| [wp_deregister_script_module()](https://developer.wordpress.org/reference/functions/wp_deregister_script_module/)`wp-includes/script-modules.php` |

Deregisters the script module.

  | 
| [wp_register_script_module()](https://developer.wordpress.org/reference/functions/wp_register_script_module/)`wp-includes/script-modules.php` |

Registers the script module if no script module with that script module identifier has already been registered.

  |

| Used by | Description | 
| [wp_register_options_connectors_page_routes()](https://developer.wordpress.org/reference/functions/wp_register_options_connectors_page_routes/)`wp-includes/build/routes.php` |

Register routes for options-connectors page (full-page mode).

  | 
| [wp_register_options_connectors_wp_admin_page_routes()](https://developer.wordpress.org/reference/functions/wp_register_options_connectors_wp_admin_page_routes/)`wp-includes/build/routes.php` |

Register routes for options-connectors page (wp-admin mode).

  | 
| [wp_register_font_library_page_routes()](https://developer.wordpress.org/reference/functions/wp_register_font_library_page_routes/)`wp-includes/build/routes.php` |

Register routes for font-library page (full-page mode).

  | 
| [wp_register_font_library_wp_admin_page_routes()](https://developer.wordpress.org/reference/functions/wp_register_font_library_wp_admin_page_routes/)`wp-includes/build/routes.php` |

Register routes for font-library page (wp-admin mode).

  |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_register_page_routes%2F)
before being able to contribute a note or feedback.