wp_resource_hints
Позволяет изменять список 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-prefetchpreconnectprefetchprerender
Продробнее о том что за что отвечает смотрите в заметке Мета теги: dns-prefetch, preconnect, prefetch, prerender, preload
Примеры
#1 Добавим prefetch инструкции для кастомных URL (доменов)
Допустим нам нужно форсировано добавить инструкции для браузера для определенных УРЛ или доменов - используем хук wp_resource_hints: Получим в HEAD части HTML: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;
}
<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' />
#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. |
Где вызывается хук
$urls = apply_filters( 'wp_resource_hints', $urls, $relation_type );