it-swarm.com.de

Implementieren des DNS-Prefetching mit WordPress

Ich bin nicht sicher, ob meine Frage vielversprechend klingt oder nicht, aber was ich fragen werde, ist sehr relevant. Bitte lesen Sie die vollständige Frage, bevor Sie abstimmen oder markieren.

Ich versuche, DNS Pre-Fetching auf meinem WordPress-mu als Site-by-Site-Ansatz zu implementieren. Auf meiner primären Site verwende ich ein untergeordnetes Thema. Daher wollte ich den folgenden Code in den function.php einfügen, um das zu erhalten, wonach ich suche.

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

Nun funktioniert WordPress und Hook so, dass dieser Code in den Abschnitt <head> des generierten HTML-Codes eingefügt wird, in dem die Funktion wp_head() im Code des Themas (übergeordnet oder untergeordnet) aufgerufen wurde. header.php

Nach der bewährten Codierungspraxis von Google ist es jedoch am besten, den DNS-Vorablesezugriffscode so hoch wie möglich zu halten. Laut Google ist es besser, es so zu benutzen

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

Aber ich habe keine Ahnung, wie ich das machen soll, weil alle Themen dort den Code zuerst in den header.php schreiben, bevor wp-head aufgerufen wird.

Also, meine Frage, gibt es eine Möglichkeit, diesen DNS-Prefetching-Code direkt nach dem Start von <head> zu platzieren? Bitte helfen Sie.

2
iSaumya

Ab WordPress 4.6.0 gibt es eine API für Ressourcenhinweise, die automatisch alle eindeutigen Domänen in der Warteschlange hinzufügt, die Sie mit wp_resource_hints überschreiben können. - Sie sollten die folgende Antwort nur verwenden, wenn Sie mit <4.6 nicht weiterkommen. 0


Alles was Sie tun können, ist die Priorität Ihres Hakens zu erhöhen:

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

aber wird mein Code erst nach dem Start des Tags eingefügt?

Nein, aber es wird vor jeder anderen Funktion ausgegeben, die an wp_head angehängt ist, d. H. Vor anderen <link />s, den meisten Stylesheets, Pluginskripten usw.

Um es direkt nach <head> zu setzen, müssen Sie höchstwahrscheinlich den header.php Ihres Themas direkt bearbeiten.

gibt es wirklich keinen anderen weg?

Sie können es mit ein wenig Ausgabepufferung hacken:

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

Nur kleine Informationsmengen, die bei einfachen Setups hilfreich sein können (insbesondere solche ohne Plugins, die ob_start verwenden):

1) Sie brauchen nicht die DNS-Prefetch-Aufrufe als erste Elemente zu setzen. Sie müssen sie so schnell wie möglich vor jedes andere Element stellen, das externe Ressourcen aufruft.

2) Es ist tatsächlich möglich, negative Zahlen als Priorität zu verwenden on add_action.

Daher kann man add_action( 'wp_head', 'dns_prefetch', -1 ); benutzen und es ist fast garantiert, dass man an diesen einfachen Setups arbeitet.

Tatsächlich haben wir das bei https://clinicawp.2aces.com.br Jobs gemacht und hoffen, dass es euch hilft.

1
Celso Bessa

Untergeordnete Themen können ihre eigene header.php-Datei haben, oder? Warum also nicht einfach eine untergeordnete header.php-Datei in den Ordner des untergeordneten Themas legen und den Code dort hinzufügen?

Sofern ich nichts vermisse, scheint dies die einfachste Lösung zu sein.

0
Brad Griffin