纳尼?我记得以前用代码版的时候也不会出现这种情况啊!于是到 WP 迷博客找来代码,和松果博客的对比了下,我去这错误太明显了!
松果博客分享的代码中的关键替换位置如下所示:
$buffer[$i]=(str_replace("t", " ", $buffer[$i]));
$buffer[$i]=(str_replace("nn", "n", $buffer[$i]));
$buffer[$i]=(str_replace("n", "", $buffer[$i]));
$buffer[$i]=(str_replace("r", "", $buffer[$i]));
而正确的代码应该是:
$buffer[$i]=(str_replace(" ", " ", $buffer[$i]));
$buffer[$i]=(str_replace("
", "
", $buffer[$i]));
$buffer[$i]=(str_replace("
", "", $buffer[$i]));
$buffer[$i]=(str_replace("
", "", $buffer[$i]));
少了反斜杠之后的 n、t、r 意义完全不同了!有反斜杠表示换行和 tab 空格等,如果没有反斜杠那就是单纯的字母了,不乱才怪了!
二、部署功能代码
所以,正确的压缩代码如下所示(强迫症又发作了,代码严格缩进了下):
//压缩html代码
function wp_compress_html(){
function wp_compress_html_main ($buffer){
$initial=strlen($buffer);
$buffer=explode("<!--wp-compress-html-->", $buffer);
$count=count ($buffer);
for ($i = 0; $i <= $count; $i++){
if (stristr($buffer[$i], '<!--wp-compress-html no compression-->')) {
$buffer[$i]=(str_replace("<!--wp-compress-html no compression-->", " ", $buffer[$i]));
} else {
$buffer[$i]=(str_replace(" ", " ", $buffer[$i]));
$buffer[$i]=(str_replace("
", "
", $buffer[$i]));
$buffer[$i]=(str_replace("
", "", $buffer[$i]));
$buffer[$i]=(str_replace("
", "", $buffer[$i]));
while (stristr($buffer[$i], '')) {
$buffer[$i]=(str_replace("", " ", $buffer[$i]));
}
}
$buffer_out.=$buffer[$i];
}
$final=strlen($buffer_out);
$savings=($initial-$final)/$initial*100;
$savings=round($savings, 2);
$buffer_out.="
<!--压缩前的大小: $initial bytes; 压缩后的大小: $final bytes; 节约:$savings% -->";
return $buffer_out;
}
ob_start("wp_compress_html_main");
}
add_action('get_header', 'wp_compress_html');
部署方法:将以上代码粘贴到 WordPress 主题目录下的 functions.php 文件的最后一个 ?> 之前即可。
Ps:使用知更鸟主题的博客,需要将以上代码稍微改动一下,否则首页不会被压缩,已亲测!
修改方法:
将上述代码中的最后三行:
ob_start("wp_compress_html_main");
}
add_action('get_header', 'wp_compress_html');
修改为:
if ( !is_admin() ) {
ob_start("wp_compress_html_main");
}
}
add_action('init', 'wp_compress_html');
也就是将 get_header 动作修改为全局 init,然后再加上排除 WP 后台的判断,否则后台写文章就惨不忍睹了...(这样修改后,压缩生效的范围更大,若不出错,建议用修改后的代码!)
三、绕过压缩注释
然后,本文的重点来了:
关于在页面位置加上避免压缩的注释,很多教程都是错的!亲测无效!
网络上很多教程,包括松果博客、WP 酷以及 WP 迷,他们都是这样描述的: