为Wordpress里的中文文章自动截取摘要

一般而言,文章列表页有三种形式:

  1. 只显示文章标题;
  2. 显示文章标题及正文摘要;
  3. 显示文章标题及正文全。

以个人浏览体验而言,我最喜欢显示摘要的网站。只显示文章标题的做法,浏览十分便捷,但是经常有标题党潜伏。显示全文的做法呢,一个列表页被拉的有万里长城那么长,找各篇文章的标题都要找半天。

此外,从SEO的角度,列表里显示全文也很容易坠入Duplicate content的陷阱。在Wordpress里,一篇文章除了独立显示的页面之外,还会被显示在首页、存档页、分类页和标签页内,在这些列表页只显示摘要可以大大减少被google判断为重复内容的可能。

wordpress在显示文章内容的时候,本身就有the_content()和the_excerpt()两种方法。全者用于显示全文,后者用于显示概要。概要可以单独撰写,如果为空则截取正文替代。在英文blog里,使用the_excerpt()输出的效果相当不错,他会调用wp_trim_excerpt()来截取正文开头的55个词,作为摘要。它利用的是英文单词之间以空格分割的特性,以空格为分隔符来截取字串。但中文段落里,字词之间却并不使用空格分割,这样自动截取出来的摘要,往往就是正文全文。

针对中文文章自动截取摘要的解决方案

移除默认的wp_trim_excerpt,另行处理摘要。考虑到中文的特性,可以采用’。’为分割符来截取,每篇文章截取开头数句作为摘要。


remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt','wp_trim_excerpt_cn');
function wp_trim_excerpt_cn($text) {
    global $locale;
    if($locale !== 'zh_CN') return wp_trim_excerpt($text);
   if ( '' == $text ) {
      $text = get_the_content('');
      $text = strip_shortcodes( $text );
      $text = str_replace(']]>', ']]>', $text);
      $text = strip_tags($text,'<a><img>');
      $excerpt_length = apply_filters('excerpt_length', 3);
      $words = explode('。', $text, $excerpt_length + 1);
      if (count($words) > $excerpt_length) {
         array_pop($words);
            array_push($words, '<a href="'.get_permalink().'">[...]</a>');
         $text = implode('。', $words);
      }
   }
   return $text;
}

 

以上代码可添加到所用主题functions.php内。

Related posts:

  1. JavaScript in_array function jQuery有个inArray( value, array ),返回的是key,如果没找到,则返回-1。 用的时候老混淆,所以写一个可以和php里in_array一样用法的。    function in_array(v,a){     ...
Twitter Digg Delicious Stumbleupon Technorati Facebook

No comments yet... Be the first to leave a reply!