web-dev-qa-db-ja.com

WordPressによるDNSプリフェッチの実装

私の質問が有望に聞こえるかどうかわからないが、私が尋ねようとしていることは非常に関連性がある。だから投票やフラグをダウン投票する前に質問全体を読んでください。

私はサイトごとのアプローチとして、私のワードプレスmuにDNSプリフェッチを実装しようとしています。私のメインサイトでは子テーマを使用しているので、探しているものを取得するために次のコードを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');

ワードプレスの機能とフックの機能は、このコードを生成されたHTMLの<head>セクションに配置することです。ここで、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の先頭にコードを配置します。

だから、私の質問は、ちょうど<head>タグを開始した直後にそれらのDNSプリフェッチコードを配置する方法はありますか?助けてください。

2
iSaumya

WordPress 4.6.0以降、すべてのユニークなエンキュードメインを自動的に追加するリソースヒントAPIがあります。これは wp_resource_hints で上書きできます。 .0


あなたができることはあなたのフックの優先順位を上げることです。

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

しかし、これは私のコードをtagの開始直後に置きますか?

いいえ、しかし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)add_actionの優先順位として負の数を使うことは実際には可能です

したがって、add_action( 'wp_head', 'dns_prefetch', -1 );を使用することができ、上記の単純な設定で動作することがほぼ保証されています。

実際に、我々は https://clinicawp.2aces.com.br jobsでそれをしてきました、そしてそれが皆さんに役立つことを願っています。

1
Celso Bessa

子テーマは独自のheader.phpファイルを持つことができますね。それでは、単にchild header.phpファイルを子テーマのフォルダにドロップしてから、そこにコードを追加するだけでいいのではないでしょうか。

何かが足りない場合を除き、これが最も簡単な解決策のようです。

0
Brad Griffin