WP_Theme_JSON_Resolver::get_resolved_theme_uris( WP_Theme_JSON $theme_json ): array

In this article

Resolves relative paths in theme.json styles to theme absolute paths and returns them in an array that can be embedded as the value of _link object in REST API responses.

Parameters

$theme_jsonWP_Theme_JSONrequired
A theme json instance.

Return

array An array of resolved paths.

Source

public static function get_resolved_theme_uris( $theme_json ) {
	$resolved_theme_uris = array();

	if ( ! $theme_json instanceof WP_Theme_JSON ) {
		return $resolved_theme_uris;
	}

	$theme_json_data = $theme_json->get_raw_data();
	/*
	 * The same file convention when registering web fonts.
	 * See: WP_Font_Face_Resolver::to_theme_file_uri.
	 */
	$placeholder = 'file:./';

	// Top level styles.
	$background_image_url = $theme_json_data['styles']['background']['backgroundImage']['url'] ?? null;
	if (
		isset( $background_image_url ) &&
		is_string( $background_image_url ) &&
		// Skip if the src doesn't start with the placeholder, as there's nothing to replace.
		str_starts_with( $background_image_url, $placeholder )
	) {
		$file_type          = wp_check_filetype( $background_image_url );
		$src_url            = str_replace( $placeholder, '', $background_image_url );
		$resolved_theme_uri = array(
			'name'   => $background_image_url,
			'href'   => sanitize_url( get_theme_file_uri( $src_url ) ),
			'target' => 'styles.background.backgroundImage.url',
		);
		if ( isset( $file_type['type'] ) ) {
			$resolved_theme_uri['type'] = $file_type['type'];
		}
		$resolved_theme_uris[] = $resolved_theme_uri;
	}

	// Block styles.
	if ( ! empty( $theme_json_data['styles']['blocks'] ) ) {
		foreach ( $theme_json_data['styles']['blocks'] as $block_name => $block_styles ) {
			if ( ! isset( $block_styles['background']['backgroundImage']['url'] ) ) {
				continue;
			}
			$background_image_url = $block_styles['background']['backgroundImage']['url'];
			if (
				is_string( $background_image_url ) &&
				// Skip if the src doesn't start with the placeholder, as there's nothing to replace.
				str_starts_with( $background_image_url, $placeholder )
			) {
				$file_type          = wp_check_filetype( $background_image_url );
				$src_url            = str_replace( $placeholder, '', $background_image_url );
				$resolved_theme_uri = array(
					'name'   => $background_image_url,
					'href'   => sanitize_url( get_theme_file_uri( $src_url ) ),
					'target' => "styles.blocks.{$block_name}.background.backgroundImage.url",
				);
				if ( isset( $file_type['type'] ) ) {
					$resolved_theme_uri['type'] = $file_type['type'];
				}
				$resolved_theme_uris[] = $resolved_theme_uri;
			}
		}
	}

	return $resolved_theme_uris;
}

Changelog

VersionDescription
6.7.0Resolve relative paths in block styles.
6.6.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.