首页 > 混论分类 > WordPress 自动生成摘要的三种方式

WordPress 自动生成摘要的三种方式

WordPress 显示摘要信息

 在抓虾里订阅的独立博客中,很多人采用了wordpress,郁闷的是,有些RSS只能看到摘要,无法看到原文,如“点石博客”。原因我知道,点石是一个SEO的社区,这样做是为了避免“内容复制”。这其实是显示摘要信息的原因之一。

 为什么要显示摘要信息?

  1. 增加用户体验,使用户快速了解文章信息,决定是否阅读,在单位屏幕空间内显示更多的文章,减少用户不断的下拉屏幕的动作;
  2. 节省带宽,加快网站访问速度,当然,也节省了搜索引擎spider的带宽付出;
  3. 避免搜索引擎认为的“网页复制”问题。

关于第三点,很多博客默认设置为显示全文,并未受到搜索引擎“复制网页”的惩罚。显示摘要为了解决搜索引擎的“复制网页”问题,是一种“精益求精”的行为。我倒认为显示摘要信息重点是基于前面两个吧!

关于“文章列表”页面

内容网站的结构一般是“文章列表—->文章内容”,对于搜索引擎来说,一个“无序”的“文章列表”对其索引是没有意义的,只有“文章内容”才是有意义的。为什么要说“无序”呢?因为对于一个专题性比较强的“链接集合”,对于用户来说是有“用处”的,这体现了制作网页者的思考和整理过程。诚然,搜索引擎对于某个关键字的SERP也提供了这样的一个“链接集合”,但是它完美吗?它只是“关键字”的集合,一个关键字可以引申很多的关键字,这要人类的“发散性思维”或者“相关联想”加上其本身的知识结构才能做到,机器算法的搜索引擎是帮不到的。这就能搜索引擎为啥要收录那些很多链接的页面,如果它自身有人类的智慧,早就把文章列表全部noindex。

我看到有的文章为了解决“复制网页”问题,他们建议在网页的meta里面加上robots,对这些“列表网页”加上“follow,noindex”,意思是搜索引擎的机器人可以爬行,但不要索引这个网页,可惜百度是不支持这个的,对于中文网页来说,只能弃用这种方式。直接在robots文件里面设置,发现很难。方法就只有一个了,对“文章列表”页采取显示摘要的方式。

WordPress文章列表页显示摘要信息

网上有很多wordpress显示摘要信息的插件,都不是太好,如“点石博客”就采取了,他的功能主要是截取第一段作为摘要信息,这个有两大缺陷:

  1. 第一段并不能完全说明文章的内容概要,当然可以通过写手有意识地写作可以达到,但有些时候会发现特别别扭;
  2. 在摘要里面无法显示html格式的东西,如链接和图片;
  3. rss无法全文输出。

其实wordpress本身已经提供了这个功能,可以在选项Optional Excerpt里面填入相关html代码,然后在模板里面修改一下即可。这样就做到了摘要自由撰写,rss全文输出。(不推荐使用more标签,因为它不自由,只能截前面,不能截中间或者最后的文字。)

模板修改代码示例:

要修改的三个文件:

index.php 首页文件以及首页开始的上一页下一页等页面;

archive.php 存档页,如按月份、分类存档等;

search.php 搜索结果页。

上述页面里面遇到

  1. <?php  the_content(__('(more...)')); ?>

改成

  1. <?php if(!is_single()) {
  2.        the_excerpt();
  3.   } else {
  4.        the_content(__('(more...)'));
  5.   } ?>

说明,the_excerpt()表示显示摘要信息,the_content()表示显示全文,the_content(__(’(more…)’))表示启用more标签。


打开WordPress的wp-includes\formatting.php,找到其中的function wp_trim_excerpt(about line 900),将如下代码

$excerpt_length = 55;
$words = explode(’ ‘, $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_push($words, ‘[…]’);
$text = implode(’ ‘, $words);
}

更改为

  $excerpt_length = 3;
  $words = explode('\n', $text, $excerpt_length + 1);
  if (count($words) > $excerpt_length) {
  array_pop($words);
  array_push($words, '<p />……<a href=”' . get_permalink($post->ID) . '”>[阅读全文]</a>');
  $text = implode('\n', $words);
  }

就可以了,WordPress默认的生成摘要是用空格来判断的,就是取到55个空格结束,这适用于西方采用空格作为词间隔的语言,但中文是不分词的,所以我使用读取3行的方式,取前3行,对哪种语言都是适用的。


在WordPress系统中,默认的首页和目录页使用的书全文输出,这对于文章内容较长的博客来说很不方面,下面我介绍一个方法,可以简单的实现在WordPress首页和目录页显示摘要而非全文。
  首先找到wp-content/themes下你使用的模板目录,查找目录中的文件,如果有home.php则修改home.php,没有的话就修改index.php,找到<?php the_content(); ?>这一行,将其修改为以下代码:
 <?php if (function_exists('the_excerpt_reloaded')) { ?>
 <?php the_excerpt_reloaded(120, '<p><a><ul><ol><li><img><br /><blockquote><em><strong><div>', 'content', FALSE, '', FALSE, 1, TRUE); ?>
 <?php } else { ?>
 <?php the_excerpt(); ?>
 <?php } ?>
 <div class="details"><div class="inside"><?php comments_popup_link('No Comments', '1 Comment', '% Comments'); ?> so far | <a href="<?php the_permalink() ?>">Read On »</a></div></div>

  这时,你的WordPress首页和分类就显示为摘要信息而不是全文信息了。
  这段代码可以使用一个插件the_excerpt_reloaded,也可以不使用,我以前就被误导了,其实不安装the_excerpt_reloaded插件这段代码也可以输出摘要,如果安装了插件,则会使用上面的函数输出摘要。

分类: 混论分类 标签:
  1. 2010年3月29日15:41 | #1

    不错,我也试试

  2. 2010年3月29日22:08 | #2

    @kxzw
    呵呵。挺老的文章了。用了这么久WP。我还是觉得自己填写more标签比较好。

  1. 2008年7月19日14:07 | #1
  2. 2009年5月21日18:53 | #2
  3. 2010年4月30日23:45 | #3
  4. 2011年3月2日09:59 | #4

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。直接点击评论上方的回复实现此功能