我曾写过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 | 本文地址: https://myfairland.net/wordpress-excerpt-with-html-tags/
本站文章除特殊标明者外均为原创,版权所有,如需转载,请以超链接形式注明作者和原始出处及本声明
哇,好强~~
赞一个
很好。先踩一脚。改天再认真看。
API真的永远是最值得看的地方……
嗯哪,不过一般没耐心细看,要用的时候再查 ^_^
学习…
[…] Advanced Excerpt 是另一个很好的 WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]
啦啦啦,飘过
[…] 转自:http://myfairland.net/wordpress-excerpt-with-html-tags/ […]
受教了。果然WP Core Code里隐藏很多好东东⊙﹏⊙
Betty
我照你说的用
可是怎么网站一点改变也没有啊
@小百合:
你的留言让我糊涂了,你的问题到底是已经解决,还是没有呢? :)
[…] Advanced Excerpt 是另一个很好的 WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]
[…] 保留 html 标签的 wordpress 摘要插件 […]
我正在找这样的功能
[…] 更新:Advanced Excerpt 是另一个很好的 WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]
用上这个插件了,效果很不错
[…] Excerpt 插件(我对 Advanced Excerpt 的中文介绍)和 Yskin 的摘要插件,以及此文的 mb_substr() […]
[…] Excerpt 插件(我对 Advanced Excerpt 的中文介绍)和 Yskin 的摘要插件,以及此文的 mb_substr() […]
[…] Advanced Excerpt 是另一个很好的 WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]
[…] Excerpt 插件(我对 Advanced Excerpt 的中文介绍)和 Yskin 的摘要插件,以及此文的 mb_substr() […]
[…] Excerpt 插件(我对 Advanced Excerpt 的中文介绍)和 Yskin 的摘要插件,以及此文的 mb_substr() […]
[…] Excerpt 插件(我对 Advanced Excerpt 的中文介绍)和 Yskin 的摘要插件,以及此文的 mb_substr() […]
怎么使用呢?
[…] 更新: Advanced Excerpt 是另一个很好的 WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]
我很懒 至今还没有找到一款不用更换 直接使用的完美中文摘要插件。
最好的就是用more标签WP自带
好东西必须顶
[…] 更新: Advanced Excerpt 是另一个很好的 WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]
[…] 更新: Advanced Excerpt 是另一个很好的 WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]
Tumblr article…
I saw someone writing about this on Tumblr and it linked to…
就是啊,好不容易找到个摘要能保留HTML标签的,截取的个别中文产生乱码了,怎么办呢?
……没找到我的插件吗?
[…] 更新: Advanced Excerpt 是另一个很好的 WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 总结: […]
[…] WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]
[…] WordPress 摘要插件,但需要略加改动才适合中文,对它的介绍和修改方法请看保留 html 标签的 wordpress 摘要插件一文。 […]