diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php index 23b2f1c5ab..5b36272270 100644 --- a/wp-includes/general-template.php +++ b/wp-includes/general-template.php @@ -2830,6 +2830,8 @@ function wp_resource_hints() { $hints['dns-prefetch'][] = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.2.1/svg/' ); foreach ( $hints as $relation_type => $urls ) { + $unique_urls = array(); + /** * Filters domains and URLs for resource hints of relation type. * @@ -2841,16 +2843,31 @@ function wp_resource_hints() { $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 ) { - unset( $urls[ $key ] ); + continue; + } + + if ( isset( $unique_urls[ $url ] ) ) { continue; } if ( in_array( $relation_type, array( 'preconnect', 'dns-prefetch' ) ) ) { $parsed = wp_parse_url( $url ); + if ( empty( $parsed['host'] ) ) { - unset( $urls[ $key ] ); continue; } @@ -2862,13 +2879,34 @@ function wp_resource_hints() { } } - $urls[ $key ] = $url; + $atts['rel'] = $relation_type; + $atts['href'] = $url; + + $unique_urls[ $url ] = $atts; } - $urls = array_unique( $urls ); + foreach ( $unique_urls as $atts ) { + $html = ''; - foreach ( $urls as $url ) { - printf( "\n", $relation_type, $url ); + 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 "\n"; } } } diff --git a/wp-includes/version.php b/wp-includes/version.php index f2edf01b78..7e52ad17b4 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.7-alpha-38825'; +$wp_version = '4.7-alpha-38826'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.