Implementando a pré-busca de DNS com o WordPress

2

Não tenho certeza se minha pergunta parece promissora ou não, mas o que vou perguntar é muito relevante. Então, leia a pergunta completa antes de votar ou marcar.

Estou tentando implementar a pré-busca de DNS no meu wordpress mu, como abordagem site por site. No meu site principal eu uso um tema filho, então planejei colocar o seguinte código no function.php para obter o que estou procurando.

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');

Agora, a maneira como funciona o wordpress e o hook funciona é colocar este código na seção <head> do html gerado, onde o wp_head() foi chamado no tema (pai ou filho) header.php

Mas, de acordo com a prática de codificação do Google, é melhor colocar o código de pré-busca de DNS o mais alto possível. De acordo com o Google, é melhor usá-lo como

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

Mas não tenho ideia de como fazer isso, porque todo o tema coloca lá o código primeiro no header.php antes de chamar wp-head .

Então, minha pergunta, existe alguma maneira de colocar o código de pré-busca do dns logo depois de iniciar o <head> tag? Por favor ajude.

    
por iSaumya 07.02.2015 / 18:04

3 respostas

9

No WordPress 4.6.0, há uma API de dicas de recursos que adiciona automaticamente todos os domínios únicos enfileirados, que você pode substituir por wp_resource_hints - você deve usar a seguinte resposta somente se estiver preso a < 4.6.0

Tudo o que você pode fazer é aumentar a prioridade do seu gancho:

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

mas isso coloca meu código logo após o início da tag?

Não, mas será exibido antes de qualquer outra função anexada a wp_head , ou seja, outros <link /> , a maioria das folhas de estilo, scripts de plug-in, etc.

Para colocá-lo logo após <head> , você provavelmente precisará editar o header.php do seu tema diretamente.

  

não há outro caminho?

Você pode cortá-lo com um pouco de buffer de saída:

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 );
    
por TheDeadMedic 07.02.2015 / 18:29
1

Apenas pequenos fragmentos de informações que podem ajudar em configurações simples (principalmente aquelas sem uso de plugins usando ob_start):

1) Você não precisa colocar as chamadas de pré-busca de DNS como os primeiros elementos. O que você precisa é colocá-los o mais rápido possível antes de qualquer outro elemento que chame recursos externos.

2) É realmente possível usar números negativos como prioridade em add_action .

Portanto, é possível usar add_action( 'wp_head', 'dns_prefetch', -1 ); e é quase garantido que funcione nas configurações simples.

Na verdade, estamos fazendo isso em enlace empregos e esperamos que ajude vocês.

    
por Celso Bessa 28.08.2015 / 05:09
0

O tema infantil pode ter seu próprio arquivo header.php, certo? Então, por que não simplesmente soltar um arquivo header.php filho na pasta do tema filho e adicionar o código?

A menos que eu esteja sentindo falta de algo, esta parece ser a solução mais simples.

    
por Brad Griffin 15.07.2015 / 21:51