wppaste
WordPress

WP_REST_Server::match_request_to_handler( WP_REST_Request $request ): array|WP_Error

Since
5.6.0
Source
wp-includes/rest-api/class-wp-rest-server.php:1158
Matches a request object to its handler.

Parameters

$requestWP_REST_Request
The request object.

Return

array|WP_Error
The route and request handler on success or a WP_Error instance if no handler was found.

Uses · 6

Used by · 3

Source

	protected function match_request_to_handler( $request ) {		$method = $request->get_method();		$path   = $request->get_route(); 		$with_namespace = array(); 		foreach ( $this->get_namespaces() as $namespace ) {			if ( str_starts_with( trailingslashit( ltrim( $path, '/' ) ), $namespace ) ) {				$with_namespace[] = $this->get_routes( $namespace );			}		} 		if ( $with_namespace ) {			$routes = array_merge( ...$with_namespace );		} else {			$routes = $this->get_routes();		} 		foreach ( $routes as $route => $handlers ) {			$match = preg_match( '@^' . $route . '$@i', $path, $matches ); 			if ( ! $match ) {				continue;			} 			$args = array(); 			foreach ( $matches as $param => $value ) {				if ( ! is_int( $param ) ) {					$args[ $param ] = $value;				}			} 			foreach ( $handlers as $handler ) {				$callback = $handler['callback']; 				// Fallback to GET method if no HEAD method is registered.				$checked_method = $method;				if ( 'HEAD' === $method && empty( $handler['methods']['HEAD'] ) ) {					$checked_method = 'GET';				}				if ( empty( $handler['methods'][ $checked_method ] ) ) {					continue;				} 				if ( ! is_callable( $callback ) ) {					return array( $route, $handler );				} 				$request->set_url_params( $args );				$request->set_attributes( $handler ); 				$defaults = array(); 				foreach ( $handler['args'] as $arg => $options ) {					if ( isset( $options['default'] ) ) {						$defaults[ $arg ] = $options['default'];					}				} 				$request->set_default_params( $defaults ); 				return array( $route, $handler );			}		} 		return new WP_Error(			'rest_no_route',			__( 'No route was found matching the URL and request method.' ),			array( 'status' => 404 )		);	}

History

Introduced in 5.6.0. Unchanged from 6.7.7 through 7.1.0.

  1. 6.7.7
  2. 6.8.8
  3. 6.9.7
  4. 7.0.4
  5. 7.1.0

Signature, return type and hooks compared across 5 parsed releases.

About this page

Parsed data
Generated from the wordpress-develop 6.8.8 tag, from src/wp-includes/rest-api/class-wp-rest-server.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.
Corrections
Something wrong on this page? Report it and it gets fixed in the next regeneration.