wp_resource_hints()
Выводит на экран <link> теги для dns-prefetch, preconnect, prefetch, prerender.
Эти теги дают браузерам подсказки для предварительных действий.
Функция НЕ предназначена для прямого использования - она повешена на хук wp_head в ядре WP, см. файл wp-includes/default-filters.php:
add_action( 'wp_head', 'wp_resource_hints', 2 );
WP с помощью этой функции, автоматически добавляет dns-prefetch <link> для всех внешних подключаемых скриптов.
preload
Эта функция не включает в себя директиву preload для нее в WP 6.1 появилась отдельная функция wp_preload_resources().
В сети можно встретить такую рекомендацию, чтобы отключить префетч для emoji:
// плохая идея: remove_action( 'wp_head', 'wp_resource_hints', 2 );
НИКОГДА так не делайте! Потому что таким образом вы отключите вообще все префетчи, не только для emoji.
Как правильно смотрите ниже в примере.
Хуки из функции
Возвращает
null. Ничего (null).
Использование
wp_resource_hints();
Примеры
#1 Как правильно отключить DNS prefetch для s.w.org (emoji)
С версии 4.6.0 появился специальный хук, который позволяет отключить префетч для s.w.org (emoji):
// Удаление DNS prefetch для WP Emoji из шапки add_filter( 'emoji_svg_url', '__return_false' );
#2 Добавим 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' />
#3 Удаление 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 | Введена. |