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 );
НИКОГДА так не делайте!
Как правильно смотрите ниже в примере.
Хуки из функции
Возвращает
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 | Введена. |