今天分享一个彩蛋,用于压缩 WordPress 页面的函数,代码已经 Review 并优化了,详情看函数下方。
function wp_compress_html(){
function wp_compress_html_main ($buffer){
$initial=strlen($buffer);
$buffer=explode("", $buffer);
$count=count ($buffer);
for ($i = 0; $i <= $count; $i++){ if (stristr($buffer[$i], '')) {
$buffer[$i]=(str_replace("", " ", $buffer[$i]));
} else {
$buffer[$i]=(str_replace("\t", " ", $buffer[$i]));
$buffer[$i]=(str_replace("\n\n", "\n", $buffer[$i]));
$buffer[$i]=(str_replace("\n", "", $buffer[$i]));
$buffer[$i]=(str_replace("\r", "", $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.="\n";
return $buffer_out;
}
ob_start("wp_compress_html_main");
}
add_action('get_header', 'wp_compress_html');
function ignoreCompress($content) {
$matches = array();
$c = "/(crayon-|<\/pre>)/i";
if(preg_match_all($c, $content, $matches) && is_single()) {
$content = ''.$content;
$content.= '';
}
return $content;
}
add_filter( "the_content", "ignoreCompress");
一些说明
我用的主题里内置了 wp_compress_html() 的函数,但存放在一个独立的文件中,没有被引用。
今天,尝试手动引用它,效果确实不错,将 HTML 文档全部压缩为了一行,但美中不足的是它会使 pre 标签下的代码压成一行,不便于阅读,于是我上网查阅了相关内容,将这段代码优化了一下。
主要的优化有两个,第一个是 为了防止某些需要调用ajax的插件、主题出错,撤销修改。add_action('init', 'wp_compress_html');
原版的 init
位置写的是 get_header
,这里改成 init
增加了压缩的范围,并在 ob_start(“wp_compress_html_main”); 外加上判断,防止管理页面被压缩(之所以不压缩的原因是怕编辑器出现奇葩问题);
第二个优化是添加了 ignoreCompress()
函数,用于防止 pre 标签下的代码被压缩。
经过了两个小时的测试,一切正常~
文章最后修订于 2019年3月31日
评论 (0)