wppaste
WordPress

WP_URL_Pattern_Prefixer

Since
6.8.0
Source
wp-includes/class-wp-url-pattern-prefixer.php:18
Class for prefixing URL patterns.

Description

This class is intended primarily for use as part of the speculative loading feature.

Compatibility

WordPress
since 6.8.0
  • 6.7.7
  • 6.8.8
  • 6.9.7
  • 7.0.4
  • 7.1.0

Present in 4 of the 5 tracked releases, added in 6.8.0.

Properties · 1

$contextsarray<string,private
Map of $context_string => $base_path pairs.

Methods · 4

Source code

class WP_URL_Pattern_Prefixer { 	/**	 * Map of `$context_string => $base_path` pairs.	 *	 * @since 6.8.0	 * @var array<string, string>	 */	private $contexts; 	/**	 * Constructor.	 *	 * @since 6.8.0	 *	 * @param array<string, string> $contexts Optional. Map of `$context_string => $base_path` pairs. Default is the	 *                                        contexts returned by the	 *                                        {@see WP_URL_Pattern_Prefixer::get_default_contexts()} method.	 */	public function __construct( array $contexts = array() ) {		if ( count( $contexts ) > 0 ) {			$this->contexts = array_map(				static function ( string $str ): string {					return self::escape_pattern_string( trailingslashit( $str ) );				},				$contexts			);		} else {			$this->contexts = self::get_default_contexts();		}	} 	/**	 * Prefixes the given URL path pattern with the base path for the given context.	 *	 * This ensures that these path patterns work correctly on WordPress subdirectory sites, for example in a multisite	 * network, or when WordPress itself is installed in a subdirectory of the hostname.	 *	 * The given URL path pattern is only prefixed if it does not already include the expected prefix.	 *	 * @since 6.8.0	 *	 * @param string $path_pattern URL pattern starting with the path segment.	 * @param string $context      Optional. Context to use for prefixing the path pattern. Default 'home'.	 * @return string URL pattern, prefixed as necessary.	 */	public function prefix_path_pattern( string $path_pattern, string $context = 'home' ): string {		// If context path does not exist, the context is invalid.		if ( ! isset( $this->contexts[ $context ] ) ) {			_doing_it_wrong(				__FUNCTION__,				esc_html(					sprintf(						/* translators: %s: context string */						__( 'Invalid URL pattern context %s.' ),						$context					)				),				'6.8.0'			);			return $path_pattern;		} 		/*		 * In the event that the context path contains a :, ? or # (which can cause the URL pattern parser to switch to		 * another state, though only the latter two should be percent encoded anyway), it additionally needs to be		 * enclosed in grouping braces. The final forward slash (trailingslashit ensures there is one) affects the		 * meaning of the * wildcard, so is left outside the braces.		 */		$context_path         = $this->contexts[ $context ];		$escaped_context_path = $context_path;		if ( strcspn( $context_path, ':?#' ) !== strlen( $context_path ) ) {			$escaped_context_path = '{' . substr( $context_path, 0, -1 ) . '}/';		} 		/*		 * If the path already starts with the context path (including '/'), remove it first		 * since it is about to be added back.		 */		if ( str_starts_with( $path_pattern, $context_path ) ) {

Changelog

Introduced in 6.8.0. Unchanged from 6.8.8 through 7.1.0.

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

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

About this page

Parsed data
Generated from the wordpress-develop 7.1.0 tag, from src/wp-includes/class-wp-url-pattern-prefixer.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.