谈谈all in one seo pack自动取中文描述问题 解决方法适合最新版
下面的所有修改是针对 plugins/all-in-one-seo-pack/all_in_one_seo_pack.php,修改工具建议使用UE等工具,不要改变文件的默认编码类型,否则会有问题,适合最新版all in one seo pack V1.5.7:
1、字数问题:
默认是对英文截取、如果按照原先的长度来截取中文的话是非常短的,引文UTF8编码一个中文的长度是3。所以增加截取的长度,修改等号后面的部分,修改成你想要的字数,最大不要超过450,不过我建议最高350到400就OK了.
var $maximum_description_length = 300 //这是最大的描述字符长度 /** Minimum number of chars an excerpt should be so that it can be used & * as description. Touch only if you know what you're doing */ var $minimum_description_length = 180;//这是描述包含的最少字符
2、防止截取的字符乱码并且让截取适合中文,找到下面这段:
function trim_excerpt_without_filters($text) {
$text = str_replace(']]>', ']]>', $text);
$text = preg_replace( '|\[(.+?)\](.+?\[/\\1\])?|s', '', $text );
$text = strip_tags($text);
$max = $this->maximum_description_length;
if ($max < strlen($text)) {
while($text[$max] != ' ' && $max > $this->minimum_description_length) {
$max--;
}
}
$text = substr($text, 0, $max);
return trim(stripcslashes($text));
}
找到上面这一段,将其替换为下面这一段:
function trim_excerpt_without_filters($text) {
$text = str_replace(']]>', ']]>', $text);
$text = preg_replace( '|\[(.+?)\](.+?\[/\\1\])?|s', '', $text );
$text = strip_tags($text);
$max = $this->maximum_description_length;
if (ord($text[$max])>0x7f&&ord($text[$max])<0xc0){
while(ord( $text[$max])<=0xc0)
$max --;
}
/*
if ($max < strlen($text)) {
while($text[$max] != ' ' && $max > $this->minimum_description_length) {
$max--;
}
}*/
$text = substr($text, 0, $max);
return trim(stripcslashes($text));
}
我在这顺便说说网上的其他人的下面这样的改法,如果像下面这样改会让你的博客效率成倍下降:
function trim_excerpt_without_filters($text) {
$text = str_replace ( ‘]]>’, ‘]]>’, $text );
$text = strip_tags ( $text );
$max = $this->maximum_description_length;
if ($max <strlen ( $text )) {
while ( $text [$max] != ‘ ‘ && $text [$max] != ‘\n’ &&$max >$this->minimum_description_length ) {
$max –;
}
}
if ($max == $this->minimum_description_length) {
$max = $this->maximum_description_length;
}
…//后面还有代码,我就省略了,为了减少篇幅
我当时也是这么改的晒,但是改完后发现博客变慢了,执行耗时是108ms*20=2XXX毫秒,最后找到问题是上面加粗的代码行存在效率问题,这是一个非常严重的问题,直接导致我的loop_start慢了20倍,其实这个描述是给搜索引擎看的,他不会在乎你是不是一个可以理解,也不在乎能够正常阅读的句子,我们只要给出大概就行了…所以在这完全没有必须,牺牲这么效率来使句子更加通顺,因为这个没有必要的。
3、字符数问题:
if (isset($description) && (strlen($description) > $this->minimum_description_length) && !(is_home() && is_paged())) {
将上面这段修改成:
if (isset($description) && (strlen($description) >= $this->minimum_description_length) && !(is_home() && is_paged())) {
呵呵,修改完成了吗?那么你现在的all in one seo pack就生效了,等待搜索引擎再次抓取吧:)
使用all in one seo pack还有一点,就是为了不影响baidu收录,请将 all in one seo pack里面的那些 noindex的选项全部去掉(百度太傻了,不过还得用它,没办法,适应它把,呵呵),如果要控制搜索引擎的收录,请使用robots.txt来控制吧
鉴于考虑到部分用户不会修改,现在这里发布修改后的文件吧:
如果有什么建议和意见可以在下面留言:-)
要使用下面这个修改好的东西需要先安装相应原版,然后使用下载的压缩包里面的文件对相应文件进行替换:)
*修改好的版本列表以及下载
All in One SEO Pack 1.5.7版本已经修改好的all_in_one_seo_pack.php文件 点我下载
All in One SEO Pack 1.5.6版本已经修改好的all_in_one_seo_pack.php文件 点我下载
All in One SEO Pack 1.5.5版本已经修改好的all_in_one_seo_pack.php文件 点我下载
All in One SEO Pack 1.5.4版本已经修改好的all_in_one_seo_pack.php文件 点我下载
All in One SEO Pack 1.5.2版本已经修改好的all_in_one_seo_pack.php文件 点我下载
enjoy

我改了,可是首页出现“Parse error: syntax error, unexpected ‘]’ in /plugins/all-in-one-seo-pack/all_in_one_seo_pack.php on line 1176” 错误。博主能共享一下改好的文件吗?可以的话给我发一份,非常感谢!
@wuxush, 这个问题我大概了解,我也发现这个文件不怎么好改,里面很多字符无法显示,晚上我回去修改后将会在这修改过来。
你怎么platinum seo pack和all in one seo pack两个都用啊!
@wuxush, 谢谢你的提醒:)我刚发现
等我回去修改该后会给你一份的。
谢谢!
@wuxush,
我装了,不知道为什么没有中文设置页,里面有中文的MO文件。
长见识了。