wp_resource_hintsхук-фильтрWP 4.6.0

Позволяет изменять список URL, подсказон для браузера, которые он должен заранее обработать (preconnect, prefetch).

Благодаря этому фильтру можно добавлять, изменять или удалять URL-адреса, которые браузер предварительно обрабатывает для ускорения загрузки.

Срабатывает при выводе тегов <link rel="dns-prefetch|preconnect|prefetch|prerender"> внутри функции wp_resource_hints().

Не стоит удалять весь фильтр целиком wp_resource_hints, отключайте только необходимые ресурсы.

Использование

add_filter( 'wp_resource_hints', 'wp_kama_resource_hints_filter', 10, 2 );

/**
 * Function for `wp_resource_hints` filter-hook.
 * 
 * @param array  $urls          Array of resources and their attributes, or URLs to print for resource hints.
 * @param string $relation_type The relation type the URLs are printed for. One of 'dns-prefetch', 'preconnect', 'prefetch', or 'prerender'.
 *
 * @return array
 */
function wp_kama_resource_hints_filter( $urls, $relation_type ){

	// filter...
	return $urls;
}
$urls(массив)

Массив URL для добавления в вывод
ресурсов и их атрибутов, или URL для печати подсказок ресурсов.

  • ...$0(массив|строка)
    Массив атрибутов ресурса, или строка URL.

    • href(строка)
      URL для включения в подсказки ресурсов. Обязательно.

    • as(строка)
      Как браузер должен обрабатывать ресурс (script, style, image, document и т.д.).

    • crossorigin(строка)
      Указывает политику CORS для указанного ресурса.

    • pr(float)
      Ожидаемая вероятность того, что подсказка ресурса будет использована.

    • type(строка)
      Тип ресурса (text/html, text/css и т.д.).
$relation_type(строка)

Тип отношения, для которого печатаются URL. Один из:

  • dns-prefetch
  • preconnect
  • prefetch
  • prerender

Продробнее о том что за что отвечает смотрите в заметке Мета теги: dns-prefetch, preconnect, prefetch, prerender, preload

Примеры

0

#1 Добавим prefetch инструкции для кастомных URL (доменов)

Допустим нам нужно форсировано добавить инструкции для браузера для определенных УРЛ или доменов - используем хук wp_resource_hints:

add_filter( 'wp_resource_hints', 'wp_kama_resource_hints_filter', 10, 2 );

/**
 * Function for `wp_resource_hints` filter-hook.
 *
 * @param array  $urls          Array of resources and their attributes, or URLs to print for resource hints.
 * @param string $relation_type The relation type the URLs are printed for, e.g. 'preconnect' or 'prerender'.
 *
 * @return array
 */
function wp_kama_resource_hints_filter( $urls, $relation_type ){

	if( 'dns-prefetch' === $relation_type ){
		$urls[] = 'https://dnsprefetch.com/foo';
	}

	if( 'preconnect' === $relation_type ){
		$urls[] = 'https://preconnect.com/some';
	}

	if( 'prefetch' === $relation_type ){
		$urls[] = 'https://prefetch.com/some';
		$urls[] = '//prefetch-no-proto.com/some';
		$urls[] = [
			'href'        => 'https://prerender-array.com/some.css',
			'as'          => 'style',
			'crossorigin' => 'use-credentials',
			'pr'          => 12.5,
			'type'        => 'text/css',
		];
	}

	if( 'prerender' === $relation_type ){
		$urls[] = 'https://prerender.com/some';
	}

	return $urls;
}

Получим в HEAD части HTML:

<link rel='dns-prefetch' href='//dnsprefetch.com' />

<link rel='preconnect' href='https://preconnect.com' />

<link rel='prefetch' href='https://prefetch.com/some' />
<link rel='prefetch' href='//prefetch-no-proto.com/some' />
<link href='https://prerender-array.com/some.css' as='style' crossorigin='use-credentials' pr='12.5' type='text/css' rel='prefetch' />

<link rel='prerender' href='https://prerender.com/some' />

0

#2 Удаление dns-prefetch правила из HEAD HTML

Допустим у нас в <head> HTML документа есть ненужные нам правила dns-prefetch и нам нужно их удалить. Например, нам нужно удалить следующий домен external.com:

add_filter( 'wp_resource_hints', function( $urls ) {

	foreach ( $urls as $key => $url ) {
		if ( str_contains( $url, 'external.com' ) ) {
			unset( $urls[ $key ] );
		}
	}

	return $urls;
} );

Список изменений

С версии 4.6.0 Введена.
С версии 4.7.0 The $urls parameter accepts arrays of specific HTML attributes as its child elements.

Где вызывается хук

wp_resource_hints()
wp_resource_hints
wp-includes/general-template.php 3674
$urls = apply_filters( 'wp_resource_hints', $urls, $relation_type );

Где используется хук в WordPress

Использование не найдено.