WP_REST_URL_Details_Controller::get_icon( string $html, string $url ): string

In this article

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

Parses the site icon from the provided HTML.

Parameters

$htmlstringrequired
The HTML from the remote website at URL.
$urlstringrequired
The target website URL.

Return

string The icon URI on success. Empty string if not found.

Source

private function get_icon( $html, $url ) {
	// Grab the icon's link element.
	$pattern = '#<link\s[^>]*rel=(?:[\"\']??)\s*(?:icon|shortcut icon|icon shortcut)\s*(?:[\"\']??)[^>]*\/?>#isU';
	preg_match( $pattern, $html, $element );
	if ( empty( $element[0] ) || ! is_string( $element[0] ) ) {
		return '';
	}
	$element = trim( $element[0] );

	// Get the icon's href value.
	$pattern = '#href=([\"\']??)([^\" >]*?)\\1[^>]*#isU';
	preg_match( $pattern, $element, $icon );
	if ( empty( $icon[2] ) || ! is_string( $icon[2] ) ) {
		return '';
	}
	$icon = trim( $icon[2] );

	// If the icon is a data URL, return it.
	$parsed_icon = parse_url( $icon );
	if ( isset( $parsed_icon['scheme'] ) && 'data' === $parsed_icon['scheme'] ) {
		return $icon;
	}

	// Attempt to convert relative URLs to absolute.
	if ( ! is_string( $url ) || '' === $url ) {
		return $icon;
	}
	$parsed_url = parse_url( $url );
	if ( isset( $parsed_url['scheme'] ) && isset( $parsed_url['host'] ) ) {
		$root_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . '/';
		$icon     = WP_Http::make_absolute_url( $icon, $root_url );
	}

	return $icon;
}

Changelog

VersionDescription
5.9.0Introduced.

User Contributed Notes

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