前几天的文章《闲来蛋疼: 把所有文章的more标签去掉了》里面谈到我把辛辛苦苦加上去的more标签又去掉了,做了这么蛋疼的事,很多盆友也发表了评论,其中 max 盆友在评论中说道:用 more 标签好处是灵活性高,如果有些只有两三百个字的文章就不需要用 more 标签,我一般也只在长文章才用 more 来截断。另外如果要用摘要的方式显示文章,不需要用插件,用 mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content )), 0, 140, "......" ); 就行了,支援中文,缩略图可以另外处理,并没有影响。
今天在帮朋友修改主题时提到“不需要插件”实现文章截断,不需要显示图片、链接什么的,只要正确截断中文即可,于是我就想到了 max 所说的方法,在本地测试一翻,的确不错,而且可以为 read-more 加上 nofollow,又省了一个插件,非常好!
下面是方法
打开主题的 index.php / home.php /archive.php / ... 等文章列表页,找到类似
<?php the_content() ?>
或者 <?php the_excerpt() ?>
的删除掉,替换为下面的代码:
<p><?php echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 300,"..."); /* 300为字符数,注意这个要保持偶数,300即150个中文 */ ?></p> <p class="read-more"><a href="<?php the_permalink(); ?>" rel="nofollow">Read more »</a></p>
PS: 如果你要显示图片,只要给strip_tags函数加个运行的图片标签<img>即可,即 strip_tags(apply_filters('the_content', $post->post_content ))
变为 strip_tags(apply_filters('the_content', $post->post_content ),"<img>")
,但这样有个弊端,就是碰到刚好截断到图片链接就会出错,所以要先考虑自己文章的图片位置,要么靠前,要么靠后点
简单吧,真没想到这么简单就解决了,当然代码的执行效率不知道,喜欢的就折腾吧。
- 本文标题:简单的文章截断方法, 支持 Read more 加上 nofollow
- 本文链接:https://zww.me/archives/25181
- 发布时间:2010年06月23日 21:54
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
Nofolow是个好东东
@Mucid 的确
我咋搜索不到那段代码呢?
@漏网小鱼 搜什么代码,我自己的才有
以前还真没考虑过nofollow,看来能折腾的又多一样。
@Vicia 哈,慢慢折腾,话说你最近很少写文章
看来我有时间也要搞搞。前天也在mg12那看到有关这个。
@朵未 有段时间没去mg12那了,其实也很少去
为什么readmore也要加nofollow
@哲哲 去mg12那吧,他那写了
我也加上去 感觉会好一点~
@海天 应该好点,毕竟链接同一个页面不用重复
用语太专业了,是不是文章列表全部显示简介啊?或者显示文章前150个字?
@在线电影 摘录文章内容的前150个文字。
这个很棒,但是有点担心乱码:
如果在摘要中只有一个字母,其他都是汉字,那最后一个汉字就要被分为两半,可能会出现乱码~
有没测试过这个呢?
@疾风 不会,自己可以测试
不错,正想把我那个自动截断的插件省下来!顺便点下你广告!哈哈
@闲云野鹤 哈,感谢
MORE标签都去了。。。果然很蛋疼。。
@龙崽 对,不是一般的
用上了,哈哈
@蓝冰 嘿嘿,这个整齐
果然是很蛋疼的举动。
@FORECE 你说的是上一篇文章吧
Read more有必要加上 nofollow么!?
@严重浪漫
随意吧
貌似没有什么用处啊~~反正在3.0.1的版本 日志内容出不来,难不成我这么衰~~
嗯,回复下,是在分类页面无效,在其他页面有用,这是为什么呢?
@tonic
分类页面是archive.php这个文件,是不是忘了修改了?
哦,因为是别人在制作的主题,里面有个别的页面,是独立出来的,不是archive.php,是不是需要在function里添加支持这个页面?还是怎么样?谢谢帮忙哦
@tonic
看你的页面代码,我这文章的方法是直接替换the_content()或者the_excerpt()的
沙发。。。
就晚来了几个月,沙发就没了,你这儿的人气也太高了!真实羡慕啊。
@Jayuh
厄~竟然跑到57楼来沙发……
好方法,记下了!
其实,很想求助zwwooooo 一个问题:我在当前theme首页采用mb_strimwidth 展示一部分post-content,但不兼容ie6,很是奇怪。有空能否帮我解惑下,先谢谢了。
@宝宝健康成长
这是php函数,跟ie6有啥关系?……
@宝宝健康成长
你的是css样式问题,你把内容隐藏了,ie6变态,要么不理,要么加些hack,简单提示下:
style.css里面找到
.d1 li {...}
把里面的height:27px;或者是overfollow:hidden;删掉
@zwwooooo 非常感谢
英文主题,默认自动截断,但对中文文章无效,添加手动截断也无效,是什么原因呢?
@Hello Beautiful
英文主题没有考虑中文,所以需要用支持双字节截断的函数,你可以试试本文所说方法修改主题。
@zwwooooo
已经试过了,还是无法截断。博主能不能帮我看看?
@Hello Beautiful
你是如何判断无法截断?那里好像正常啊,完全长短是不可能的,你的文章有英文字符,你的字体不是等宽的,所以不可能会一样,总是会有出入。
@zwwooooo
archive.php修改后,归档页能自动截断,但对index.php修改后没有效果,我的首页设置的一个静态页面,把最新文章放在了边栏的“最新文章”小工具里,问题就是小工具里的最新文章不能自动截断,请问在哪里修改?
@Hello Beautiful
简单来说就是你不会修改。有些主题会写自定义函数来代替wp内置函数。
@zwwooooo
哈哈。。是啊。不过还好被我找到了,现在解决了。谢谢。