SEO中国站 | SEO站长社区      SEO中国站专注为企业提供搜索引擎优化(SEO)服务,中国SEO服务诚信高效品牌      关于我们 | 客户服务 | SEO博客 | 加入收藏 | RSS订阅

SEO中国站:提供SEO服务|网站优化,搜索引擎优化(SEO)服务专业平台

SEO中国站专业为中小型企业提供SEO服务搜索引擎优化中国SEO在线诚信服务平台,如需更多咨询和交流,请点击客户服务中心交谈,QQ:176128596!
域名主机 网站安全 网站运营 Discuz Shopex Ecshop Dedecms Magento ZencartWordpress Z-Blog Access/Mysql PHP编程 ASP/ASP.NET HTML/DIV+CSS 电脑安全
返回首页
当前位置: 首页 > 网站建设 > Wordpress >

教你wordpress首页显示摘要的几种方法

时间:2010-10-25 18:32来源:SEO中国站 作者:seocnz 点击:
教你wordpress首页显示摘要的几种方法 显示固定的字数: 如果你的主机开通了php的mb_string扩展的话,可以使用mb_strimwidth函数来截取文章内容,以达到显示固定字数摘要的目的,比如首页摘要显示前200个字 echo mb_strimwidth(strip_tags($post-post_conten
  

教你wordpress首页显示摘要的几种方法

 

显示固定的字数:

 

如果你的主机开通了php的mb_string扩展的话,可以使用mb_strimwidth函数来截取文章内容,以达到显示固定字数摘要的目的,比如首页摘要显示前200个字

echo mb_strimwidth(strip_tags($post->post_content),0,200,'......');
 

这样就会显示文章的前200个字,随后跟着一个省略号。这个mb_strimwidth函数可以很好截取中文字符。我们再稍改造一下,就可以显示“阅读全文”链接的效果

echo mb_strimwidth(strip_tags($post->post_content),0,200,'<a href="'.get_permalink().'">......[阅读全文]</a>');
但是,如果假如万一你的主机没有激活php的mb_string扩展,使用这个函数就会报错。在这种情况下,我们可以自定义一个类似的函数,下面是我写的一个截取utf-8字符串的函数dm_strimwidth,也是我正在使用的方法

 

function dm_strimwidth($str ,$start , $width ,$trimmarker ){ $output = preg_replace('/^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$start.'}((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$width.'}).*/s','\1',$str); return $output.$trimmarker;}
使用方法和前面的mb_strimwidth是一样的,不过使用前你需要把上面的函数定义复制到functions.php文件中,然后调用

 

echo dm_strimwidth(strip_tags($post->post_content),0,200,'<a href="'.get_permalink().'">......[阅读全文]</a>');
综合方法
有时候下面这种做法也是不错的,即如果给文章手动添加了摘要,就显示这个手动添加的摘要,如果没有就显示固定的字数。方法如下:

 

if(has_excerpt()) the_excerpt(); else         echo mb_strimwidth(strip_tags($post->post_content),0,200,'<a href="'.get_permalink().'">......[阅读全文]</a>');以上出自:http://domety.com/archives/216/嫌长的直接看最后吧 -.-首页、存档页显示文章摘要的好处很多,比如:1,页面不会拉的很长,既美观,又有利于访客快速找到所需的文章2,减少搜索引擎认为的重复内容3,浏览者想看到全文就得点击进入单个文章页,因此增加了点击量 -.-4,首页、存档页数据量少了,节约了流量和带宽,提高了页面打开速度RSS 输出全文的好处只用讲一条:作为读者,我订阅feed的时候很讨厌那种只输出摘要的但是,wordpress默认的是显示全文,不但第一页显示全文,点”下一页”,进入第二页、第三页、乃至无穷页,也都显示全文。那么如何解决这一问题呢?网上流传着很多方法:一、在写日志时插入标签,这样在首页、存档页显示的就只是之前的内容。这种做法缺点太明显:1,rss输出也变成了只有之前的内容。实际上,这一缺点可以通过改代码、装插件等办法克服,但另一个缺点则无法克服:2,如果你之前已经写了数百篇文章,难道还要一个个修改,重新加上标签吗?二、修改主题的模板文件,在 index.php 里找到< ?php the_content(); ?>
 

<?php the_content(); ?>

改成

<?php if (is_single() or is_page()){the_content();}
else
{the_excerpt();}
?>

 

这样改的作用是加一个判断,如果是单篇日志页或静态页面,则输出全文,否则输出摘要。
看上去很美,但wordpress默认的摘要输出算法是根据西文来的,以空格判断字数,而中文里基本没空格,所以它算完了之后输出的”摘要”其实还是全文……因此,对中文博客而言,此法必须和其他办法协同使用。
 

三、写日志时自定义摘要。在写日志界面有一个”自定义摘要”字段,把自己想显示为摘要的话输入进去即可。
这种办法优点非常突出:不像其他办法都只能把文章开头的若干字显示为摘要,这种方法的摘要内容非常灵活,可完全自定义。
但缺点也很突出:和第一种办法一样,以前的文章都要一个个手工改,工程过于浩大。
 

四、修改 Wordpress 自带的摘要函数
根据http://www.fwolf.com/blog/post/102(这篇文章网上转载很多,我个人判断认为这里是原始出处,可叹很多转载的在搜索引擎中排名倒更靠前)
修改wordpress的源文件,对一般用户来说恐怕有点难度,而且如果升级wordpress还得重新修改,维护不方便。不过最新发现原作者把它写成了一个插件,所以都放在下面插件里面一起讲吧。
 

五、使用插件,主要仍是修改wordpress自带的摘要函数。不过wordpres默认的情况是存档页(按分类、标 签和时间存的档)用摘要输出,主页及主页上点进去的第二页、第三页等等用全文输出,因此即使用了插件,想要首页显示摘要的话,仍要用第二种方法修改一下主 题的模板文件才行。

 

下面分析一下我知道的几个插件的算法:
1,Fwolf的 http://www.fwolf.com/blog/post/296
和wp自带的几乎一样,只不过把按空格判断改成了按段落判断,会输出文章的前三段作为摘要。因为是按段落输出,也不会出现中文乱码。
2,桑葚的中文工具箱 http://yanfeng.org/blog/wordpress/kit/
用substr()函数截取前256个字节,再用utf8_trim()函数处理,保证中文不会出现乱码。
3,Yskin的 http://yskin.net/2006/07/mulberrykit.html
我原来推荐过这个,觉得很完美,但后来觉得我个人还是有些定制化的要求,决定自己动手改一改,因此才有了这篇文章 -.-
Yskin的是段落和字数混合判断,先根据回车把文章分割成n段,然后用mb_strlen()判断字数,如果没超过规定的字数,就再输出一段。因此他的最小输出单位仍然是段落。


      以上所有方法都有一个共同特点:输出的摘要是没有格式的,只有纯文本,原来的颜色、字体、超链接、图片等等都被过滤掉了。而我个人其实希望能够保留格式。
另外,按段落输出的话,有的段落长,有的段落短,那么输出的摘要就不是很整齐(其实苛求这个整齐对一般的blog也没什么意义,不过如果是cms或杂志风格的主题,对排版可能有一定需求,另外就是我个人的偏好 -.-)。
 

      最理想的情况是根据显示的行数判断,就像古龙的小说一样,按行数算钱,不管这行是只有一个字,还是写满了,这样输出的文字块大小一定是整齐的。但网页不像 书本,宽度不固定,无法预知每行写满了应该是多少字,而且如果保留图片的话,那么图片应该占多少行也很难判断,所以根据行数判断暂时不可行。
退而求其次的办法是根据字数判断。每个摘要虽然”占地面积”可能不一样,但字数是一样的,也还算整齐。不过中文工具箱的办法有点麻烦,其实有个mb_substr()函数就完全可以达成这一任务,截取指定数量的前若干个汉字,绝不会出现乱码。
 

       不过mb_substr()函数也有个问题,它是根据字符数截取,如果文章里面夹杂了英文,比如wordpress这一个词就是9个字符了,它比九个汉字 的占地面积要小的多,那么夹杂英文的摘要就会显得比全汉字的摘要短(这个都考究,我觉得我是有点bt了 -.-)。解决办法是用mb_strcut()函数,它和mb_substr()函数基本一样,只是是根据字节数截断的,在utf-8里,一个汉字大概占 三个字节,一个英文字母占一个字节,这样截出来的汉字文本就会短一些,和英文的长短比较一致。同样,mb_strcut()函数也不会出现乱码。
 

      mb_substr()和mb_strcut()函数共同的问题是,它们是按字符截取的,对英文来说就是按字母截取的,因此有可能把一个单词从中间截断……
另一个问题是mb_substr()和mb_strcut()属于mbstring扩展库,有的空间不支持。对于这种空间商,写信去要求他安装吧,付了钱的就得理直气壮提要求。要求无效的,真得考虑一下这种基本要求都不能满足的空间的质量了。


       我写了一个插件,基本仿照Yskin的,不过截取用的是mb_strcut()。并为不支持mb_strcut()的空间自定义了一个函数,抄自网上的mb_substr()函数替代脚本,没找到mb_strcut()的替代脚本,汗。此外还有以下特点:
 

1,输出的摘要保留原来文章的格式。
2,做了一个判断,如果是存档页(分类存档、每月存档等),输出的摘要较短;如果是首页,输出的摘要较长。
3,如果本来的文章长于摘要,那么最后会显示[……],省略号指向全文的链接。去掉了Yskin原来的统计字数,因为我个人不喜欢;当然要加上也很容易。
 

更新:
 

Advanced Excerpt 是另一个很好的 Wordpress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。
 

总结:
 

为了完美地实现在 wordpress 博客首页、存档页显示摘要,RSS 输出全文,请根据自己的需求下载中的一个,或下载我写的摘要插件。
已经提交 Wordpress 官网了,请到官网下载:http://wordpress.org/extend/plugins/wp-utf8-excerpt/

开启插件之后,如果发现你的首页仍然是全文,那说明你的主题不支持,请根据上面的第二条办法修改主题文件。
 

 

文章出处:www.seocnz.com
SEO中国站专注企业SEO服务SEO优化,网站优化,中国SEO诚信服务品牌。
本文seocnz保留所有,转载请以连接形式注明出处。

------分隔线----------------------------

------分隔线----------------------------
发表评论
请自觉遵守互联网相关政策法规,作者管理后台可以删除恶意评论、广告和违禁词语。。
验证码:点击我更换图片
SEO中国站优化服务官方微薄
推荐内容
SEO服务