WP_REST_URL_Details_Controller::get_icon()privateWP 5.9.0

Parses the site icon from the provided HTML.

Method of the class: WP_REST_URL_Details_Controller{}

No Hooks.

Return

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

Usage

// private - for code of main (parent) class only
$result = $this->get_icon( $html, $url );
$html(string) (required)
The HTML from the remote website at URL.
$url(string) (required)
The target website URL.

Changelog

Since 5.9.0 Introduced.

WP_REST_URL_Details_Controller::get_icon() code WP 6.4.3

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;
}