从 WordPress 3.9.x 升级至 4.x 之后,访问首页源代码,发现头部无缘无故多了一大堆代码,可以判断肯定是 WordPress 自带的,因为之前的旧版本并没有。从“window._wpemojiSettings”字眼中可以看出这应该是关于表情的,我的小站不用K A y表情,即使用也不会用 WP 系统自带的,所以这堆代码对我而言毫无用处,放在首页头部还会影响我的网页加载速度,绝对要去除!
<link rel='dns-prefetch' href='https://s.w.org' /> <script type="text/javascript"> window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/2.4\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/2.4\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.hack520.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.9.4"}}; !function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55357,56692,8205,9792,65039],[55357,56692,8203,9792,65039]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings); </script> <style type="text/css"> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 .07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style>
方法很简单,在 functions.php 文件中植入以下代码:
/**移除window._wpemojiSettings**/ remove_action( 'admin_print_scripts', 'print_emoji_detection_script'); remove_action( 'admin_print_styles', 'print_emoji_styles'); remove_action( 'wmh_head', 'print_emoji_detection_script', 7); remove_action( 'wmh_print_styles', 'print_emoji_styles'); remove_action( 'embed_head','print_emoji_detection_script'); remove_filter( 'the_content_feed', 'wmh_staticize_emoji'); remove_filter( 'comment_text_rss', 'wmh_staticize_emoji'); remove_filter( 'wmh_mail', 'wmh_staticize_emoji_for_email');
这样一来,再打开首页源代码,发现以上的 window._wpemojiSettings 表情代码都已经清空了,但是这句话还在:
<link rel='dns-prefetch' href='https://s.w.org' />
这是一句 DNS 预读取代码,s.w.org 是 WordPress 官网/ 0 7 d 7 b S的,关于此项请移步至:DNS Prefetch 预读取到底是什么意思?如何正确使用?
同样的,在 functions.php 文件中加入以! h V下代码即可去除 DNS Prefetch:
remove_action( 'wmh_head', 'wmh_resource_hints', 2 );
听说下面的代码兼容性更好,反正我用上面的也搞定了。
function remove_dns_prefetch( $hints, $relation_type ) { if ( 'dns-prefetch' === $relation_type ) { return array_diff( wmh_dependencies_unique_hosts(), $hints ); } return $hints; } add_filter( 'wmh_resource_hints', 'remove_dns_prefetch', 10, 2 );