WordPress函数:wp_resource_hints
一、函数简介
将资源提示打印到浏览器,以便预取、预渲染和预连接到网站。(Prints resource hints to browsers for pre-fetching, pre-rendering and pre-connecting to websites.)二、函数参数
三、函数案例
<?php wp_resource_hints() ?>
四、源代码
/**
* Prints resource hints to browsers for pre-fetching, pre-rendering
* and pre-connecting to websites.
*
* Gives hints to browsers to prefetch specific pages or render them
* in the background, to perform DNS lookups or to begin the connection
* handshake (DNS, TCP, TLS) in the background.
*
* These performance improving indicators work by using `<link rel"…">`.
*
* @since 4.6.0
*/
function wp_resource_hints() {
$hints = array(
'dns-prefetch' => wp_dependencies_unique_hosts(),
'preconnect' => array(),
'prefetch' => array(),
'prerender' => array(),
);
foreach ( $hints as $relation_type => $urls ) {
$unique_urls = array();
/**
* Filters domains and URLs for resource hints of the given relation type.
*
* @since 4.6.0
* @since 4.7.0 The `$urls` parameter accepts arrays of specific HTML attributes
* as its child elements.
*
* @param array $urls {
* Array of resources and their attributes, or URLs to print for resource hints.
*
* @type array|string ...$0 {
* Array of resource attributes, or a URL string.
*
* @type string $href URL to include in resource hints. Required.
* @type string $as How the browser should treat the resource
* (`script`, `style`, `image`, `document`, etc).
* @type string $crossorigin Indicates the CORS policy of the specified resource.
* @type float $pr Expected probability that the resource hint will be used.
* @type string $type Type of the resource (`text/html`, `text/css`, etc).
* }
* }
* @param string $relation_type The relation type the URLs are printed for. One of
* 'dns-prefetch', 'preconnect', 'prefetch', or 'prerender'.
*/
$urls = apply_filters( 'wp_resource_hints', $urls, $relation_type );
foreach ( $urls as $key => $url ) {
$atts = array();
if ( is_array( $url ) ) {
if ( isset( $url['href'] ) ) {
$atts = $url;
$url = $url['href'];
} else {
continue;
}
}
$url = esc_url( $url, array( 'http', 'https' ) );
if ( ! $url ) {
continue;
}
if ( isset( $unique_urls[ $url ] ) ) {
continue;
}
if ( in_array( $relation_type, array( 'preconnect', 'dns-prefetch' ), true ) ) {
$parsed = wp_parse_url( $url );
if ( empty( $parsed['host'] ) ) {
continue;
}
if ( 'preconnect' === $relation_type && ! empty( $parsed['scheme'] ) ) {
$url = $parsed['scheme'] . '://' . $parsed['host'];
} else {
// Use protocol-relative URLs for dns-prefetch or if scheme is missing.
$url = '//' . $parsed['host'];
}
}
$atts['rel'] = $relation_type;
$atts['href'] = $url;
$unique_urls[ $url ] = $atts;
}
foreach ( $unique_urls as $atts ) {
$html = '';
foreach ( $atts as $attr => $value ) {
if ( ! is_scalar( $value )
|| ( ! in_array( $attr, array( 'as', 'crossorigin', 'href', 'pr', 'rel', 'type' ), true ) && ! is_numeric( $attr ) )
) {
continue;
}
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
if ( ! is_string( $attr ) ) {
$html .= " $value";
} else {
$html .= " $attr='$value'";
}
}
$html = trim( $html );
echo "<link $html />\n";
}
}
}
THE END