wordpress首页文章显示字数控制
由 ididi 发表在 网站技术 于 2011, 四月 14
最近在给别人做网站,遇到个很纠结的事情,就是别人不一定记得给每篇文章加more标签,那么首页可能出现的文字太多排版出问题,如果用溢出部分不可见的话,又怕对SEO、速度什么的有影响…所以开始尝试其他方法。
第一次用的<?php echo mb_strimwidth(strip_tags(apply_filters(‘
the_content’, $post->post_content)), 0, 120,”…”);?>这个控制每篇文
章显示的字数,但是后来发现显示的时候中文会出现乱码。只能放弃了。
后来用到的是判断最后一个字符的具体情况,然后输出。
现在function.php里写入如下代码:
/*截取摘要并防止汉字乱码*/
function cut_str($sourcestr,$cutlength)
{
$returnstr=”";
$i=0;
$n=0;
$str_length=strlen($sourcestr);//字符串的字节数
while (($n<$cutlength) and ($i<=$str_length))
{
$temp_str=substr($sourcestr,$i,1);
$ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
if ($ascnum>=224)//如果ASCII位高与224,
{
$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
$i=$i+3;//实际Byte计为3
$n++;//字串长度计1
}
elseif ($ascnum>=192) //如果ASCII位高与192,
{
$returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
$i=$i+2;//实际Byte计为2
$n++;//字串长度计1
}
elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1;//实际的Byte数仍计1个
$n++;//但考虑整体美观,大写字母计成一个高位字符
}
else//其他情况下,包括小写字母和半角标点符号,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1;//实际的Byte数计1个
$n=$n+0.5;//小写字母和半角标点等与半个高位字符宽…
}
}
if ($str_length>$cutlength){
$returnstr = $returnstr . “…”;//超过长度时在尾处加上省略号
}
return $returnstr;
}
然后再需要输出一定字数的摘要时,直接用
<?php echo cut_str(strip_tags(apply_filters(‘the_content’, $post->post_content)),80,”…”); ?>
那个80可以换成你想要的数字,到这里就一切OK了~

我是看到你的这篇文章:
http://www.ididi.net/web-technology/wordpress-cut-str
呵呵 我现在用的是suffusion这个风格 首页的文章的内容全部显示了 搞不了 郁闷 然后就是问下你这个问题:
你的BLOG的风格中标签的那种3D的效果是怎么做的?
感谢
那个截取多少文章那个我是给别人做主题的时候怕别人嫌麻烦准备的…一般的直接在文章里面添加more标签即可。3d标签云是一个插件,谷歌即可~
哥们 这个标签我怎么看不明白啊 能否解释的清楚一下 我弄了之后总是出问题 我就需要首页每个文章显示300个汉字 就可以了 多余的就不要了
就是把那中间的一对长长的放到function.php里面,没有的话自己新建个。然后在需要的地方插入最后的那段代码
post_content)),80,”…”); ?>
插到function里面哪个地方啊-。-随便插咩?~
恩,只要不是语法错误就可以了。
我用的还是你开头提到的那个方法,但是一直也没有乱码过,目前也在使用中。