W3cubDocs

/WordPress

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

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

Version Description
5.9.0 Introduced.

© 2003–2024 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/classes/wp_rest_url_details_controller/get_icon