web-dev-qa-db-fra.com

Implémentation de la prélecture DNS avec WordPress

Je ne sais pas si ma question semble prometteuse ou non, mais ce que je vais demander est très pertinent. Alors s'il vous plaît lire la question complète avant de voter ou drapeau vers le bas.

J'essaie d'implémenter la prélecture DNS sur mon mu wordpress, en tant qu'approche site par site. Sur mon site principal, j’utilise un thème enfant. J’ai donc prévu de mettre le code suivant dans le function.php pour obtenir ce que je cherche.

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

Maintenant, la façon dont wordpress fonctionne et son hook fonctionne est-ce qu'il place ce code dans la section <head> du code HTML généré où la wp_head() a été appelée dans le thème (parent ou enfant) header.php

Toutefois, conformément aux meilleures pratiques de Google en matière de codage, il est préférable de placer le code de prélecture DNS aussi haut que possible. Selon google, il est préférable de l'utiliser comme

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

Mais je ne sais pas comment faire, car tous les thèmes mettent le code en premier dans le header.php avant d'appeler wp-head.

Donc, ma question, est-il possible de placer ces codes de prélecture DNS juste après le démarrage de la balise <head>? S'il vous plaît aider.

2
iSaumya

Depuis WordPress 4.6.0, il existe une API d'indications de ressources qui ajoute automatiquement tous les domaines en file d'attente uniques, que vous pouvez remplacer avec wp_resource_hints -. Vous ne devez utiliser la réponse suivante que si vous êtes bloqué avec <4.6. 0


Tout ce que vous pouvez faire, c’est bouger la priorité de votre crochet:

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

mais cela met-il mon code juste après le début du tag?

Non, mais il sera affiché avant toute autre fonction attachée à wp_head, c'est-à-dire aux autres <link />, à la plupart des feuilles de style, aux scripts de plug-ins, etc.

Pour le mettre juste après le <head>, vous devrez probablement éditer directement le header.php de votre thème.

n'y a-t-il vraiment pas d'autre moyen?

Vous pouvez le pirater avec un peu de tampon de sortie:

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

Juste de petits pépites d'informations qui peuvent aider dans des configurations simples (notamment celles sans plugins inutilisés utilisant ob_start):

1) Vous n'avez pas besoin de mettre les appels dns-prefetch en tant que premiers éléments. Ce qu'il vous faut, c'est de les mettre le plus tôt possible avant tout autre élément appelant des ressources externes.

2) Est effectivement possible d’utiliser des nombres négatifs en priorité sur add_action.

Par conséquent, on peut utiliser add_action( 'wp_head', 'dns_prefetch', -1 ); et il est presque garanti de travailler sur lesdites configurations simples.

En fait, nous l’avons fait sur https://clinicawp.2aces.com.br jobs et nous espérons que cela vous aidera.

1
Celso Bessa

Les thèmes enfants peuvent avoir leur propre fichier header.php, non? Alors pourquoi ne pas simplement déposer un fichier header.php enfant dans le dossier du thème enfant, puis y ajouter le code?

À moins que je manque quelque chose, cela semble être la solution la plus simple.

0
Brad Griffin