保留 html 标签的 wordpress 摘要插件
我曾写过wordpress博客首页、存档页显示摘要,rss输出全文的完美解决方案总结一文,总结了首页、存档页显示摘要,feed rss 仍输出全文的办法,其中提到我比较了几种插件的算法,自己写了一个插件,而我的插件的主要特点就是能够在摘要中保留原文的字体、颜色、链接、图片等html标签。然而试用之后发现,单纯地保留标签可能会导致意想不到的结果,如果按字数截取时正好截取到某个标签的中间,造成标签没有闭合,后面的显示就会错乱。
为了解决这个问题,我在网上进行了大量的搜索,发现html标签的配对闭合问题似乎是个经典难题,问的人很多,提出解决方案的却很少。后来终于搜到了 Wordpress 的 Advanced Excerpt 这个插件。这是一个相当好的插件,可以自定义摘要长度、摘要后面显示的内容(如省略号)、保留哪些html标记等,而且它截取的摘要字数是按照滤去 html 标签之后的字数算的,即统计是真正显示的字数,而不是代码的字数,更加准确,显示也更加整齐。不过可惜的是它对中文的支持不够好,可能会出现截取半个汉字的现象。
查看 Advanced Excerpt 的源代码,发现它实现 html 标签配对用的是 force_balance_tags() 函数,再查这个函数,原来居然是 wordpress 自带的函数,它用堆栈的方式来配对 html 标签,如果有不闭合的标签,它会自动补全。试用发现,这个函数实现的效果非常好。查了半天的难题,原来 wordpress 自己已经解决了,真是踏破铁鞋无觅处,蓦然回首,那人却在灯火阑珊处 ^_^
参考 Advanced Excerpt 里面的办法修改了一下我的插件,效果完全符合我的预期,而且代码非常简短,只有半页左右……似乎已经没有必要写成插件了,我考虑直接放在 function.php 里算了。
我的插件没啥可定制性,对于需要定制性的同学,还是推荐用 Advanced Excerpt,不过需要修改一下使之对中文支持更好。修改办法很简单,打开 advanced-excerpt.php,搜索 substr,替换成 mb_substr,大概共有6处,全部替换即可。这样替换之后,理论上就不会出现截取半个汉字的现象了。
使用 Advanced Excerpt 时还有一点需要注意,在 Advanced Excerpt 选项界面,设置摘要字数的地方,还有一个选项,“use words?”,即是否以单词方式计数?这个选项千万不可勾选,否则它就会按照英文单词的方式用空格来计数,对中文几乎就无效了。
相关文章
本文作者: Betty | 本文地址: http://myfairland.net/wordpress-excerpt-with-html-tags/
本站文章除特殊标明者外均为原创,版权所有,如需转载,请以超链接形式注明作者和原始出处及本声明
如果你对本文感兴趣,欢迎订阅我的博客










































2008年12月15日12:54
哇,好强~~
赞一个
2008年12月16日07:35
很好。先踩一脚。改天再认真看。
API真的永远是最值得看的地方……
2008年12月16日09:22
嗯哪,不过一般没耐心细看,要用的时候再查 ^_^
2008年12月16日21:20
学习…
2009年1月12日12:45
啦啦啦,飘过
2009年4月8日01:06
受教了。果然WP Core Code里隐藏很多好东东⊙﹏⊙
2009年5月5日13:51
Betty
我照你说的用
可是怎么网站一点改变也没有啊
2009年5月6日16:25
@小百合:
你的留言让我糊涂了,你的问题到底是已经解决,还是没有呢? :)