文章自动生成摘要输出

Posted by Harid2011 - May - 05 留个言

WordPress自带有摘要功能,不过在写日志的时候需要手动添加“more”标签。这里介绍一种让文章自动生成摘要输出的方法,其主要功能是在主循环输出文章内容的时候判断是否是文章页,如果是文章页,则整篇输出,否则则只输出预设的字节数。

该自动生成文章摘要的方法是利用一个控制自动生成摘要输出的函数,在该函数里,将文章内容与欲截取长度作为参数传给一个另一个截取字符的函数,然后返回截断后的文章内容,也就是最终展现的摘要。最后,将该控制自动生成摘要的函数由“add_action()”方法添加至hook列表里的“the_content”钩子(这样就不用更改主循环里的“the_content()”函数)。这以后,每次写完文章不用添加WordPress带的“more”标签就可以自动输出摘要了。

function.php里添加下面两个函数:

1、控制生成摘要的函数。

/*Auto cut article*/
$size = 336;    //Bytes
$more_link_text = '[Read more...]';
add_action('the_content', 'control_content_size');
function control_content_size($content) {
    global $size, $more_link_text;
    if (is_singular()) return $content;
    $content = strip_tags($content);
    $content = cut_str($content, $size);
    $content = '

' . $content . '

$more_link_text

"; return $content; }

2、截取字符的函数。

1)、第一种版本:

/* Cut string*/
function cut_str($str, $len) {
    if (!isset($str[$len])) {
    } else {
        if (seems_utf8($str[$len-1]))
            $str = substr($str, 0, $len)."...";
        else {
            if(seems_utf8($str[$len-3].$str[$len-2].$str[$len-1]))
                $str = substr($str, 0, $len-3) . $str[$len-3] . $str[$len-2] . $str[$len-1] ."...";
            elseif(seems_utf8($str[$len-2].$str[$len-1].$str[$len]))
                $str = substr($str, 0, $len-2) . $str[$len-2].$str[$len-1].$str[$len]."...";
            elseif(seems_utf8($str[$len-1].$str[$len].$str[$len+1]))
                $str = substr($str, 0, $len-1) . $str[$len-1].$str[$len].$str[$len+1]."...";
            else
                $str = substr($str, 0, $len)."...";
        }
    }
    return $str;
}

2)、第二种版本:

function cut_str($string, $sublen, $start = 0, $code = 'UTF-8'){
    if($code == 'UTF-8'){
        $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
        preg_match_all($pa, $string, $t_string);
        if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
        return join('', array_slice($t_string[0], $start, $sublen));}
    else{
        $start = $start*2;
        $sublen = $sublen*2;
        $strlen = strlen($string);
        $tmpstr = '';
        for($i=0; $i<$strlen; $i++){
            if($i>=$start && $i<($start+$sublen)){
                if(ord(substr($string, $i, 1))>129) $tmpstr.= substr($string, $i, 2);
            else $tmpstr.= substr($string, $i, 1);}
            if(ord(substr($string, $i, 1))>129) $i++;}
            if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";
        return $tmpstr;
    }
}

上面的两种版本的截取字符函数任取其一使用。

   声明:本文采用 BY-NC-SA 协议进行授权 | 星期九
   原创文章转载请注明:转自《文章自动生成摘要输出

Comments(12) Leave comments
  1. Gravatar
    狒狒 Internet Explorer Internet Explorer 8.0 Windows Windows 7
    七月 24th, 2011 at 09:41  | #1

    狒狒博客来访,学习下!

    • Gravatar Harid  @  七月 24th, 2011 at 09:53 replied.

      @狒狒, 这个自动摘要推荐一下, 😆 ,我现在一直用这个来自动生成首页摘要,挺方便的。

  2. Gravatar
    ixwebhosting Google Chrome Google Chrome 12.0.742.122 Windows Windows XP
    七月 16th, 2011 at 17:39  | #2

    自动生成的摘要,据说百度不感冒!

    • Gravatar Harid  @  七月 16th, 2011 at 18:26 replied.

      @ixwebhosting, 不需要百度对摘要有动作啊,摘要只是在首页显示近期文章的时候有用,具体到单篇文章的话,可以对单篇文章添加meta标签实现对百度等的友好。

  3. Gravatar
    Jessy Internet Explorer Internet Explorer 8.0 Windows Windows XP
    七月 3rd, 2011 at 22:11  | #3

    这种方法不错,免去了修改循环

    • Gravatar Harid  @  七月 6th, 2011 at 17:05 replied.

      @Jessy, 嗯,我现在一直在用这个来自动截取。

  4. Gravatar
    Demon Internet Explorer Internet Explorer 9.0 Windows Windows 7
    五月 6th, 2011 at 19:26  | #4

    还是more好

  5. Gravatar
    yanyi Google Chrome Google Chrome 11.0.696.60 Windows Windows 7
    五月 6th, 2011 at 14:03  | #5

    测试下云输入法,这玩意儿对网速还是有要求的,上次我在宿舍用打一个字卡半天。

  6. Gravatar
    小羿 Google Chrome Google Chrome 12.0.742.12 Windows Windows 7
    五月 6th, 2011 at 11:42  | #6

    我还是用插件的 哎~

    • Gravatar Harid  @  五月 6th, 2011 at 11:55 replied.

      @小羿, 插件不多的话也行啊,多了的话就慢了。

  7. Gravatar
    yesureadmin Google Chrome Google Chrome 10.0.648.204 Windows Windows XP
    五月 6th, 2011 at 08:52  | #7

    都习惯手动了,曾有一天,花一上午手动加了more

    • Gravatar Harid  @  五月 6th, 2011 at 10:21 replied.

      @yesureadmin, 这种事情我好像也干过,一开始我用一个插件来自动摘要,后来插件卸了,就花了好久去给所有的文章加more,那时文章数少。

21 + 34 =  (required)
comment_ad

 NOTICE1: You should type some Chinese word (like “你好”) in your comment to pass the spam-check, thanks for your patience!

 NOTICE2: 请申请gravatar头像(http://en.gravatar.com),木有头像的会显示为“小怪物”头像,将难以通过审核!

分享按钮