WordPress自带有摘要功能,不过在写日志的时候需要手动添加“more”标签。这里介绍一种让文章自动生成摘要输出的方法,其主要功能是在主循环输出文章内容的时候判断是否是文章页,如果是文章页,则整篇输出,否则则只输出预设的字节数。
该自动生成文章摘要的方法是利用一个控制自动生成摘要输出的函数,在该函数里,将文章内容与欲截取长度作为参数传给一个另一个截取字符的函数,然后返回截断后的文章内容,也就是最终展现的摘要。最后,将该控制自动生成摘要的函数由“add_action()”方法添加至hook列表里的“the_content”钩子(这样就不用更改主循环里的“the_content()”函数)。这以后,每次写完文章不用添加WordPress带的“more”标签就可以自动输出摘要了。
往function.php里添加下面两个函数:
1、控制生成摘要的函数。
1 2 3 4 5 6 7 8 9 10 11 12 | /*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 = '<p>' . $content . '</p><p><a href="' . get_permalink() . "\" class=\"more-link\">$more_link_text</a></p>"; return $content; } |
2、截取字符的函数。
1)、第一种版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* 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)、第二种版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 协议进行授权 | 星期九
原创文章转载请注明:转自《文章自动生成摘要输出》
狒狒博客来访,学习下!
@狒狒, 这个自动摘要推荐一下,
,我现在一直用这个来自动生成首页摘要,挺方便的。
自动生成的摘要,据说百度不感冒!
@ixwebhosting, 不需要百度对摘要有动作啊,摘要只是在首页显示近期文章的时候有用,具体到单篇文章的话,可以对单篇文章添加meta标签实现对百度等的友好。
这种方法不错,免去了修改循环
@Jessy, 嗯,我现在一直在用这个来自动截取。
还是more好
测试下云输入法,这玩意儿对网速还是有要求的,上次我在宿舍用打一个字卡半天。
我还是用插件的 哎~
@小羿, 插件不多的话也行啊,多了的话就慢了。
都习惯手动了,曾有一天,花一上午手动加了more
@yesureadmin, 这种事情我好像也干过,一开始我用一个插件来自动摘要,后来插件卸了,就花了好久去给所有的文章加more,那时文章数少。
Random Posts
Recent Posts
Recent Comments
By Plastic injection mould
By OOZJ
By Jusbe
By 互联网战
By 互联网战
By ixwebhosting
Blogroll
Categories
Tag Cloud
360 5800 Alexa C++ Chrome Cisco Dedecms Discuz Fcitx Fedora GFW Gravatar IE Linux Mobile ModelSim Music QT Quartus Shell Verilog VPN VPS Windows Wordpress XAMPP Xilinx xp 下载 垃圾评论 情感 手机 插件 星期九 注册 电子信息 程序设计 站长工具 缩略图 网络应用 考研 胡思乱想 西工大 视频 软件Meta