WordPress用プラグイン「Head Cleaner」のDNSプリフェッチ出力不具合を回避

WordPressが吐き出すHTMLのheadタグ内を整理統合することでクライアント側の処理を最適化し表示の高速化を図る人気のプラグイン「Head Cleaner」ですが、現バージョン(1.4.2.12)に於いてheader.php等で外部CDNのJavaScriptやCSSを読み込むため以下のような記述をしていると…


wp_enqueue_style('font-awesome', '//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css');
wp_enqueue_script('jquery','//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js');

それぞれフルパスで「DNSプリフェッチ」(dns-prefetch)を出力してしまう模様。


<link rel="dns-prefetch" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css">
<link rel="dns-prefetch" href="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js">

別にエラーにはならないけれど、DNSプリフェッチのhref部はドメインだけで構わないのでドメインより後ろを取り除きつつ重複を除去するようhead-cleaner.phpを一部修正。


list($css_tag, $inline_css) = $this->_parse_stylesheet_tag($dom->find("link[rel*='stylesheet']"), $dom->find("style"), $other_domain);
list($script_tag, $inline_js, $foot_js) = $this->_parse_script_tag($dom->find("script"), $other_domain);
$noscript_tag = $this->_dom_to_html($dom->find("noscript"));
$object_tag   = $this->_dom_to_html($dom->find("object"));
$object_tag  .= $this->_rdf_convert($dom->find("rdf:RDF"));

// 追加ここから ↓↓↓↓↓↓↓↓↓↓
$other_domain = array_map(function($domain) {
	return preg_replace('/(\/\/[^\/]+)\/?.*$/i', '$1', $domain);
}, $other_domain);
$other_domain = array_values(array_unique($other_domain));
// 追加ここまで ↑↑↑↑↑↑↑↑↑↑

if ( $this->options['dns-prefetch'] && count($other_domain) > 0 ) {
	$dns_prefetch = '';
	foreach ( $other_domain as $domain ) {
		$dns_prefetch .= sprintf('<link rel="dns-prefetch" href="%s" />' . "\n", $domain);
	}
	$link_tag = $dns_prefetch . $link_tag;
}

685行目あたりに上記のようなロジックを追加すれば問題を回避出来ます。

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

頂戴したコメントは管理者に承認されるまで表示されません。また、メールアドレスが公開されることはありません。
このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。