2010年06月23日 132条评论

简单的文章截断方法, 支持 Read more 加上 nofollow

前几天的文章《闲来蛋疼: 把所有文章的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 &raquo;</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>"),但这样有个弊端,就是碰到刚好截断到图片链接就会出错,所以要先考虑自己文章的图片位置,要么靠前,要么靠后点

简单吧,真没想到这么简单就解决了,当然代码的执行效率不知道,喜欢的就折腾吧。

zww
or
oooo

“简单的文章截断方法, 支持 Read more 加上 nofollow”有132条评论

  1. A.shun says:

    华丽的沙发,不解释~ :razz:

  2. A.shun says:

    nofollow这个我也加了,不过方法不同
    截断方法还是more

    1. zwwooooo says:

      @A.shun 哈,玩玩

  3. 林木木 says:

    前排占个坑吧,严重BS楼上的~

  4. 阿邙 says:

    你推上发的链接每次我都打不开。。
    。。

    1. zwwooooo says:

      @阿邙 因为那个短网址给强x了

  5. winy says:

    顶楼上,严重影响抢sf~

  6. winy says:

    这个以前在万戈那里见过,用了一段时间
    不过还是喜欢用集成插件的方法,因为可以显示图片,不至于那么单调

    1. zwwooooo says:

      @winy 用自己喜欢的方法

  7. 冰古 says:

    我纳闷,在functions.php插入代码跟弄个插件的区别真有这么大吗? :?:

    1. max says:

      @冰古 因为一般的插件还包括 css 和 js,会增加 http 请求,影响页面载入速度。

    2. zwwooooo says:

      @冰古 插件实在是方便啊,但我只用一半

    3. zwwooooo says:

      @max 所以很多人忘functions.php丢功能

  8. ithillad says:

    这么不喜欢more啊,过来为more默哀一下…… :mrgreen:

    1. zwwooooo says:

      @ithillad 大家来more哀 :mrgreen:

  9. ifenwen says:

    没有图片 所以没什么顾忌

    1. zwwooooo says:

      @ifenwen 以前的很多有图片,麻烦

  10. jalena says:

    貌似不错的唆! :evil:

    1. zwwooooo says:

      @jalena 可以玩玩

  11. 万戈 says:

    我用的也是这个方法,支持中文,不错

    1. zwwooooo says:

      @万戈 虽然很多人写过了,但我还是写一下,你明白的 :mrgreen:

    2. 万戈 says:

      @zwwooooo 哈哈,明白明白,我也经常干这事 :mrgreen:

  12. Timothy says:

    首页就是这效果? 所有的文章都read more ?

    1. zwwooooo says:

      @Timothy 除了文章页和页面

  13. 猪八戒 says:

    虽然没看懂,但是还是感觉挺不错的,万戈的博客也有介绍差不多的方法,我就是用他的方法实现的自动摘要。

    1. zwwooooo says:

      @猪八戒 自己觉得好就用

  14. Dianso says:

    我的主机不支持mb_strimwidth,改为substr就可以了

    1. max says:

      @Dianso substr 貌似对中文支援不理想,若是主机不支援 mb_strimwidth 而文本又是中文的话就别用这个方法了,直接用插件或 more 标签吧。

    2. zwwooooo says:

      @max 以前用过substr,的确不怎么好

  15. BoKeam says:

    为什么要加这个。我感觉没什么用

    1. zwwooooo says:

      @BoKeam 就像我感觉很有用一样,没有为什么

  16. 球犯 says:

    哈哈,这是个好方法,收藏了!!!

    1. zwwooooo says:

      @球犯 慢慢折腾

  17. 貌似暂时用不上,但是还是支持博主对WordPress的贡献。

    1. zwwooooo says:

      @古墓候梅 没,这方法是别人的贡献,我只是自己研究下

  18. 苏扬 says:

    觉得这个挺好用的啊,你都真的快成折腾帝了!

    1. zwwooooo says:

      @苏扬 不折腾写不出文章,和你不同啊,你文采好

  19. 爱月 says:

    这里变得更加热闹啦~月阁现在人气很低啊~哈哈~

    恭喜恭喜~等我7月份折腾月阁的时候希望能用上你的新主题~

    1. zwwooooo says:

      @爱月 期待你的折腾,以前你那也很热闹,都是该死的网络环境

  20. max says:

    如果想要保留文本的 html 格式,去掉 strip_tags 就行,不过这样会连 html 的字数也算在内。

    1. zwwooooo says:

      @max 这样好像有个弊端,就是截断刚好是链接的话会出错吧

    2. max says:

      @zwwooooo 呵呵,没错。

发表评论

昵称 *

网址

B em del U Link Code Quote