Old

简单的文章截断方法, 支持 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>"),但这样有个弊端,就是碰到刚好截断到图片链接就会出错,所以要先考虑自己文章的图片位置,要么靠前,要么靠后点

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

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: http://zww.me/archives/25181

132 comments

  1. A.shun A.shun Opera 10.54 Windows XP

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

    沙发
  2. A.shun A.shun Opera 10.54 Windows XP

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

    板凳
  3. 林木木 林木木 Google Chrome 5.0.375.70 Windows 7

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

    地板
  4. ......
  5. 宝宝健康成长 宝宝健康成长 Firefox 3.6.15 Windows XP

    其实,很想求助zwwooooo 一个问题:我在当前theme首页采用mb_strimwidth 展示一部分post-content,但不兼容ie6,很是奇怪。有空能否帮我解惑下,先谢谢了。

    62楼
  6. Hello Beautiful Hello Beautiful Google Chrome 17.0.963.56 Windows 7

    英文主题,默认自动截断,但对中文文章无效,添加手动截断也无效,是什么原因呢?

    65楼
    • zwwooooo zwwooooo Firefox 10.0.2 Windows 7 x64 Edition

      @Hello Beautiful
      英文主题没有考虑中文,所以需要用支持双字节截断的函数,你可以试试本文所说方法修改主题。

    • Hello Beautiful Hello Beautiful Google Chrome 17.0.963.56 Windows 7

      @zwwooooo
      已经试过了,还是无法截断。博主能不能帮我看看?

    • zwwooooo zwwooooo Firefox 10.0.2 Windows 7 x64 Edition

      @Hello Beautiful
      你是如何判断无法截断?那里好像正常啊,完全长短是不可能的,你的文章有英文字符,你的字体不是等宽的,所以不可能会一样,总是会有出入。

    • Hello Beautiful Hello Beautiful Google Chrome 17.0.963.56 Windows 7

      @zwwooooo
      archive.php修改后,归档页能自动截断,但对index.php修改后没有效果,我的首页设置的一个静态页面,把最新文章放在了边栏的“最新文章”小工具里,问题就是小工具里的最新文章不能自动截断,请问在哪里修改?

    • zwwooooo zwwooooo Firefox 10.0.2 Windows 7 x64 Edition

      @Hello Beautiful
      简单来说就是你不会修改。有些主题会写自定义函数来代替wp内置函数。

    • Beautiful Beautiful Google Chrome 17.0.963.56 Windows 7

      @zwwooooo
      哈哈。。是啊。不过还好被我找到了,现在解决了。谢谢。

  7. 小蝴蝶 小蝴蝶 Google Chrome 24.0.1312.57 Windows 7

    我是根据官方文档the excerpt给的代码改的,貌似也很好使,可以保留 php the_excerpt() 不用重新截断了~function new_excerpt_more($more) {
    global $post;
    return '[.....] <a href="'. get_permalink($post->ID) . '" title="继续阅读本文" rel="nofollow">More?</a>';
    }
    add_filter('excerpt_more', 'new_excerpt_more');

    66楼
    • zwwooooo zwwooooo Firefox 18.0 Windows 7 x64 Edition

      @小蝴蝶
      这个知道,用的地方不同,如果是通用性就用你这个钩子方法,不过新版的不需要纠结了,支持utf8了。

Leave a Reply