WP Minify 插件常见错误解决方案

因为之前不能评论的原因,我已经取消了WP Minify插件的使用。不过今天在网上瞎晃的时候,却发现了企鹅君写的一篇关于WP Minify使用的文章,其中不仅完整的解释了WP Minify的设置,还列出了WP Minify插件可能出现的错误以及解决方法。

WP Minify 是WordPress中相当实用的一个插件,作者这几天疯狂更新,目前最新版本是1.1.6。实质上将minify引擎变为了一个使用更为简便和自动化的插件,其基本原理就是通过压缩JavaScript,CSS,Html中多余的空行和空格等无用代码以减少文件传输的占用空间,更重要的是它能将多个在页面中引用的JS,CSS文件等合并为单一的JS与CSS文件,从而大量减少了HTTP请求,极大地加速了页面载入的速度。

安装的过程就不说了,地球人都知道。启用之前确保”wp-content/plugins/wp-minify/cache”是可写的。 如果插件使用失败,尝试把”wp-content/plugins/wp-minify/cache”的权限改为777。

WP Minify压缩的JS和CSS一般来自于header.php中的调用,只有在header.php中正确引用的CSS和JS文件才能被WP Minify正确识别处理,比如:

//CSS文件的调用
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
 //JS文件的调用
<script type="text/javascript" src="http://neverweep.com/wp-content/plugins/nextgen-gallery/js/ngg.js"></script>
//WP头部,一般某些插件的CSS和JS通过这个函数来调用
<?php wp_head(); ?>

具体的使用说明请查看企鹅君WP Minify使用,这里主要列出文中一些常见错误的解决方法。

1、开启HTML Minification后Meta丢失的问题。经过对开启HTML Minification后网页源代码的研究,可以发现:

<meta name="Author" content="企鹅君, neverweep" />

都被替换成了

<meta
name="Author" content="企鹅君, neverweep" />

经过研究WP Minify的源代码,发现问题出在了HTML Minify的过程中。打开”wp-content/plugins/wp-minify/min/lib/Minify/HTML.php”有一段注释为”use newlines before 1st attribute in open tags (to limit line lengths)”,大意就是在开放标签的头部之后换行,以限制每行的长度。可以将源代码中的

$this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html);

删除,这样就可以解决Meta信息丢失的问题,不过这样会导致HTML源代码的可读性下降,这个倒是并不很重要。

如果想要良好的可读性,可以试试将

“$1\n$2〃

改为

“$1 $2\n” 或者 “\n$1 $2〃

不过这样可能会导致W3C Html验证出错,提示某些标签没有正确闭合,但是实际上并没有什么问题。
2、使用WP Minify提供的HTML标签。

<!-- WP-Minify CSS –/>
<!-- WP-Minify JS –/>

请将其中”-/“替换为”“这两个HTML标签可以定义WP Minify插入合并后的JS与CSS的位置。尤其适用于引用了Google CDN中的Jquery库的博客,因为WP Minify默认的插入位置非常靠前,如果Jquery库的引用在其之后的话就会造成JS的错误,所以利用这个标签,可以将博客内部的压缩合并的JS文件放在外部引用Jquery库之后。

3、HTTP400错误

有人说使用过程中会提示400错误,不过插件作者说这个问题已经被修复了。如果出现400错误,可以尝试将插件中JS的地址全部替换为绝对路径。Google有很多相关的条目。

4、WP Minify AJAX comments 400 冲突

该插件目前已经会和willin大师的AJAX评论冲突,表现为提交评论时会出现HTTP 400错误。烙印之前就是升级后遇到此问题而停用该插件,不过奇怪的是,1.0.2版本的插件居然没有此问题。其实这个错误是WP Minify造成的,它将comments-ajax.php误认为CSS文件而将其尝试合并了,自然就产生了错误。经过企鹅君的对AJAX评论的代码的研究,发现JS中,最新版本中AJAX评论尝试通过获取comments-ajax.js自身所在路径,然后将完整路径中的style.css替换为comments-ajax.php来调用,然后尝试将这种获取路径的方式更改为手写绝对路径,问题解决。在较旧版本的AJAX评论中,获取路径的方式为判断博客主题style.css所在路径,解决方法是一样的:

ajax_php_url = js_url.replace('-ajax.js','-ajax.php'),
wp_url = js_url.substr(0, js_url.indexOf('wp-content')),
//改为
ajax_php_url = 'http://yoururl.com/wp-content/themes/123/comments-ajax.php',
wp_url = 'http://yoururl.com',

使用新版的WP Minify之后,使用老版的URL处理方式,会导致400错误,无法获取JS文件,新版处理方式就没有问题,但是会导致AJAX评论出问题,在我这里只要将comment-ajax.js中的这段代码删除即可。

var i = 0, got = -1, len = document.getElementsByTagName('script').length;
while ( i <= len && got == -1){
	var js_url = document.getElementsByTagName('script')[i].src,
			got = js_url.indexOf('comments-ajax.js'); i++ ;
}

目前烙印没有再启用该插件,而是手动合并、压缩了JS文件和CSS文件。感谢企鹅君提供的解决方案。

本文大部分文字摘自企鹅君:WP Minify使用一文,另外推荐他的另外一篇文章:WordPress 性能优化和加速

WP Minify 插件常见错误解决方案》上有16个想法

  1. Pingback引用通告: 博客加速!wp-minify! | iounstone

  2. 我启用 WP Minify 之后,为什么网站的CSS,JS 效果都无法显示了呢?我没有设置压缩,只是合并。我在header.php使用WP Minify提供的HTML标签也不管用。请问这个问题应该怎么解决呢?

  3. 我启用 WP Minify 之后,为什么网站的CSS,JS 效果都无法显示了呢?我没有设置压缩,没有开启HTML,只是对CSS,JS 合并。我在header.php使用WP Minify提供的HTML标签也不管用。请问这个问题应该怎么解决呢?

发表回复