Wordpress 最简单的首页文章截断输出方式
有个插件名字叫 Limit Posts Automatically,可以统一截断首页的文章输出。我以前用过,但是后来觉得为了一个小功能引入那么大的插件,不太合算,所以自己研究了一下这方面的 PHP 函数。
最终被我找到的函数是 mb_strimwidth()。它能满足的需求有:正确截断,无乱码,每条截取内容的长度基本相等。
先简单介绍一下。mb_strimwidth() 会根据"宽度"来截取文字,全角字符宽度为2,半角字符为 1,只要我们将截断的宽度设置为偶数,那最后截断输出的内容一定不会有乱码。
在截断输出首页文章内容的问题上,我们还应该搭配 strip_tags() 来共同实现。strip_tags() 的作用是清除字符串内的 html 标签,放在这里就是清除输出的内容格式(包括清除图片)。既然目的是截取小段文字,自然也不需讲求格式。
废话打住,说"正题":
请找到模板内 index.php 中的
<?php the_content(); ?>
将其替换为
<?php echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 120,"......"); ?>
之后首页文章内容截断输出就实现了。更改截取字数请调整例子中的 "120" 为你想要的数值,它后面的 "......" 是输出末尾的替换内容,款式参考我的首页。这六个点也算在 120 之内,占 6 个半角宽度。
如果有看我前面对 mb_strimwidth 的介绍,聪明人该知道怎么将他们用在 Wordpress 模板侧边栏,毕竟在 css3 普及之前,用 PHP 的截断方式肯定是最佳的侧边栏截断选择。
P.S 完全使用我的方法,又出现错误,那么估计是你的主机没有安装 multibyte string extension ,对此我爱莫能助。

@find: 呵呵,你的网页很有趣。
好文!the_excerpt的替换方法:)
现在就试验去:)
@老所: 其实我上回就想告诉你,可是你那里我评论的时候只要发这俩函数就被过滤,所以我才说你那里过滤严重。
@Shawn: 嗯,我正需要使用这个办法来调整我的tag搜索以及其他文章查询结果。等我调整好这些后,嘿嘿,俺再把你的笔记本留言给搬过去,哈哈
你的评论里要加代码需要加什么标签么?
@老所: 只要把俩对尖替换成
<和>就成,其他不用变化。@老所: < 和 >
@老所: 我去看了你的首页,你忘了在 php 之外用 <p> </p> 把它们包上。
好方法,赞。
不过我还是习惯首页完整输出的,看起来也方便点,不然同时只能看一篇。
当然这是有得有失的事情,各有所爱~
@NickyYe: 其实最影响的是 SEO,至于样式倒是额外的考虑。。。要知道你首页和单篇有完全相同的内容的话,两方在搜索引擎面前的权重都一样,等于是在分散权重。当然,不在乎SEO就无所谓了。。。
首页调整完毕!多谢Shawn!!!
嘿嘿,有用哦!
不过直接清除掉HTML格式不太好吧。。
@netputer: 我到觉得清除掉HTML很不错:)
@netputer: 不想清除格式就把 strip_tags 拿开。
@老所: 其实你还可以用同样的方法来截短标题,这样会更好看一些,你那里有些长标题影响版面了。不过更好的办法是通过 css 把标题字号缩小一点。
@netputer: 清除掉 html 格式之后,你自己在外部添加,还能创造明显区别于正文的样式,有什么不好?
哈哈,前几天我把首页弄成显示摘要时就遇到这个问题了,,瞎看了半天官方文档,也没找出个方法来,,
不过,如果摘要内容不是正文开始部分的话,(比如我的有些摘要是选自正文内的一小部分)有没有更好的方法实现??(这样的话不知道是不是手动来的更实际??)
首页留HTML格式,存档页去...实在不习惯首页那么寡 哈哈
@iColor: 我这个方法不适合设置特殊的摘要,你只能指定它从第几个字开始,至第几个字结束。你的要求其实没有全自动的方案,只能手动操作。。。
对了,,Yet Another Related Posts Plugin的截断好像对中英混合内容会有问题,怎么能改善一下吗??
@MY-Hou: 我还不是为了 SEO
@iColor: 我研究看看,一会儿告诉你。
@iColor: 我看了,不是中英文混合的问题,是表情混合的问题。你在文章里加入了表情,Yarpp 的相关文章输出的时候将它们替换成了字符。如果不想替换,可以找到插件内 includes.php 文件 308 行,删除
/([,;.-]+)\s*/','\1但保留最外层引号就可以了。@Shawn:
OK,,收到,我试试,,多谢了...
嘿嘿,我使用这个方法把归档和查询界面都整了,漂亮多了,再次感谢shawn~
@老所: 继续去猜密码?
你们两个擦出火花了。
@leehow: 啥意思?
基本上很高深很奥妙
你的回复功能很有意思哇。就是@XXX 这种,很方便美观呐。
@Joya: 呵呵,@xxx 这种可以安装 http://www.thinkagain.cn 做的插件。
谢谢,正是我要找的!
有了时间,我也要研究一下WordPress!
序号前的那个星星是在线和不在线的显示吗?有意思!!!
@Humphrey: 呵呵,没有那么神奇,不是在线的状态,是我最后回复的状态。也就是说评论当中,我回复的最后一条评论会被标记为绿色星号,而首页的最新一篇也是。
@Shawn: 呵呵,这个功能有意思哈,我还是把我那个评论插件卸了用你的吧,不然我刚改的评论序号就会显示的乱七八糟了。你这个插件即简单又实用!
@Humphrey: 没必要,我可以教你怎么正确查询主楼层数。
@Shawn: 好啊好啊,高人愿意教小弟求之不得啊,用了wp-thread comments插件后,点reply然后发表,作者的楼层就不显示了,是不是要修改插件的php啊?
非常好~~
有用有用,拿走了
呵呵~最近正为首页文章截断而烦,shawn 的方法正好解决我的问题,先谢了
刚才问了一个菜鸟问题 现在找到答案了 谢谢shawn
非常只好用 多谢啦
现在2.7里貌似在主题的INDEX文件里找不到“”
这个挺有意思,我正用得着
请教,这篇文章里代码部分的格式是怎么实现的
哈, 学会了~
不过貌似strip_tags不起作用啊...
你好,非常感谢的技术共享,我使用后发现首页文章截断不会出现More»字样,请问改怎么解决哦?
我是把
改成
post_content)), 0, 120,"......"); ?>
@老所: @i.robot: sdfsfd
对嘛 怎么添加“read more”啊,看到你主页已经添加了,但是查看文章分类页面还没有~
在截取的字段和六个点之间出现乱码是怎么回事,希望你你个看一下。
首页文章截断输出,用JQ怎样添加more>>像你这样的
效果啊....
@someone 评论预览,你用JQ怎样实现的,我的新主题的评论样式模仿了你的啊,主题很快可以完工了...
...#comment-6965 刷新也有平滑滚动的.
忘记写上我的网址http://www.mcooo.com/
谢谢博主~~已经照做~~还有一个问题,怎么在被截断的文章后面显示“阅读全文”的超链接呢?期待解答。。。再次感谢