it-swarm.com.ru

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

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

Я пытаюсь реализовать предварительную выборку DNS на моем WordPress Mu, как сайт за сайтом подход. На своем основном сайте я использую дочернюю тему, поэтому я планировал поместить следующий код в 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 как можно выше. По гуглу лучше его использовать как

<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>? Пожалуйста помоги.

2
iSaumya

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


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

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
TheDeadMedic

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

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

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

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

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

1
Celso Bessa

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

Если я что-то упустил, это, кажется, самое простое решение.

0
Brad Griffin