Реализация предварительной выборки DNS с помощью WordPress


Я не уверен, звучит ли мой вопрос многообещающе или нет, но то, что я собираюсь спросить, очень актуально. Поэтому, пожалуйста, прочитайте полный вопрос перед голосованием или флагом.

Я пытаюсь реализовать предварительную выборку DNS в моем mu wordpress, как подход к сайту за сайтом. На моем основном сайте я использую дочернюю тему, поэтому я планировал добавить следующий код в function.php, чтобы получить то, что я ищу.

function dns_prefetch() {
    echo '<link rel="dns-prefetch" href="//cdn.mysite.com" />';
    echo '<link rel="dns-prefetch" href="//fonts.googleapis.com" />'
}
add_action('wp_head', 'dns_prefetch');

Теперь, как работает wordpress и работает хук, это место этот код в раздел <head> сгенерированного html, где wp_head() был вызван в теме (родительской или дочерней) header.php

Но в соответствии с лучшей практикой кодирования Google, лучше всего использовать код предварительной выборки DNS как можно лучше. Согласно Google, лучше использовать его как

<html>
<head>
<link rel="dns-prefetch" href="//cdn.mysite.com" />
<link rel="dns-prefetch" href="//fonts.googleapis.com" />
<!-- rest of my the code -->
</head>

Но я понятия не имею, как это сделать, потому что все темы сначала помещают код в header.php перед вызовом wp-head.

Итак, мой вопрос, есть ли какой-либо способ разместить этот код предварительной выборки dns просто после запуска тега <head>? Пожалуйста, помогите.

Author: iSaumya, 2015-02-07

3 answers

Начиная с WordPress 4.6.0, существует API подсказок ресурсов, который автоматически добавляет все уникальные домены в очереди, которые вы можете переопределить с помощью wp_resource_hints - вы должны использовать следующий ответ только в том случае, если вы застряли с


Все, что вы можете сделать, это повысить приоритет вашего крючка:

add_action( 'wp_head', 'dns_prefetch', 0 /* Highest priority */ );

Но помещает ли это мой код сразу после начала тега?

Нет, но он будет выводиться перед любой другой функцией, присоединенной к wp_head, т.Е. Другой <link />, большинство таблиц стилей, скриптов плагинов и т.д.

Чтобы поместить его сразу после <head>, вам, скорее всего, потребуется напрямую отредактировать header.php вашей темы.

Неужели действительно нет другого пути?

Вы можете взломать его с помощью небольшой буферизации вывода:

function wpse_177395_start_buffering( $template ) {
    ob_start();
    return $template;
}

add_filter( 'template_include', 'wpse_177395_start_buffering' );

function wpse_177395_flush() {
    $content = ob_get_clean();
    $content = preg_replace( '/<head[^>]*>/', '$0
    <link rel="dns-prefetch" href="//cdn.mysite.com" />
    <link rel="dns-prefetch" href="//fonts.googleapis.com" />',
        $content
    );

    echo $content;
}

add_action( 'wp_head', 'wpse_177395_flush', 0 );
 9
Author: TheDeadMedic, 2016-09-05 11:03:05

Просто небольшие крупицы информации, которые могут помочь в простых настройках (особенно в тех, в которых не используются плагины, использующие ob_start):

1) Вам не нужно помещать вызовы dns-предварительной выборки в качестве первых элементов. Что вам нужно, так это поместить их как можно скорее перед любым другим элементом, вызывающим внешние ресурсы.

2) На самом деле возможно использовать отрицательные числа в качестве приоритета на add_action.

Следовательно, можно использовать add_action( 'wp_head', 'dns_prefetch', -1 ); и почти гарантированно работать над указанным простые настройки.

На самом деле, мы делали это на https://clinicawp.2aces.com.br работа и надеюсь, что это поможет вам, ребята.

 1
Author: Celso Bessa, 2015-08-28 03:09:15

Дочерние темы могут иметь свои собственные header.php файл, верно? Так почему бы просто не бросить ребенка header.php файл в папку дочерней темы, а затем добавьте туда код?

Если я чего-то не упускаю, это действительно кажется самым простым решением.

 0
Author: Brad Griffin, 2015-07-15 19:51:32