WordPress 自动生成摘要的三种方式
WordPress 显示摘要信息
在抓虾里订阅的独立博客中,很多人采用了wordpress,郁闷的是,有些RSS只能看到摘要,无法看到原文,如“点石博客”。原因我知道,点石是一个SEO的社区,这样做是为了避免“内容复制”。这其实是显示摘要信息的原因之一。
为什么要显示摘要信息?
- 增加用户体验,使用户快速了解文章信息,决定是否阅读,在单位屏幕空间内显示更多的文章,减少用户不断的下拉屏幕的动作;
- 节省带宽,加快网站访问速度,当然,也节省了搜索引擎spider的带宽付出;
- 避免搜索引擎认为的“网页复制”问题。
关于第三点,很多博客默认设置为显示全文,并未受到搜索引擎“复制网页”的惩罚。显示摘要为了解决搜索引擎的“复制网页”问题,是一种“精益求精”的行为。我倒认为显示摘要信息重点是基于前面两个吧!
关于“文章列表”页面
内容网站的结构一般是“文章列表—->文章内容”,对于搜索引擎来说,一个“无序”的“文章列表”对其索引是没有意义的,只有“文章内容”才是有意义的。为什么要说“无序”呢?因为对于一个专题性比较强的“链接集合”,对于用户来说是有“用处”的,这体现了制作网页者的思考和整理过程。诚然,搜索引擎对于某个关键字的SERP也提供了这样的一个“链接集合”,但是它完美吗?它只是“关键字”的集合,一个关键字可以引申很多的关键字,这要人类的“发散性思维”或者“相关联想”加上其本身的知识结构才能做到,机器算法的搜索引擎是帮不到的。这就能搜索引擎为啥要收录那些很多链接的页面,如果它自身有人类的智慧,早就把文章列表全部noindex。
我看到有的文章为了解决“复制网页”问题,他们建议在网页的meta里面加上robots,对这些“列表网页”加上“follow,noindex”,意思是搜索引擎的机器人可以爬行,但不要索引这个网页,可惜百度是不支持这个的,对于中文网页来说,只能弃用这种方式。直接在robots文件里面设置,发现很难。方法就只有一个了,对“文章列表”页采取显示摘要的方式。
WordPress文章列表页显示摘要信息
网上有很多wordpress显示摘要信息的插件,都不是太好,如“点石博客”就采取了,他的功能主要是截取第一段作为摘要信息,这个有两大缺陷:
- 第一段并不能完全说明文章的内容概要,当然可以通过写手有意识地写作可以达到,但有些时候会发现特别别扭;
- 在摘要里面无法显示html格式的东西,如链接和图片;
- rss无法全文输出。
其实wordpress本身已经提供了这个功能,可以在选项Optional Excerpt里面填入相关html代码,然后在模板里面修改一下即可。这样就做到了摘要自由撰写,rss全文输出。(不推荐使用more标签,因为它不自由,只能截前面,不能截中间或者最后的文字。)
模板修改代码示例:
要修改的三个文件:
index.php 首页文件以及首页开始的上一页下一页等页面;
archive.php 存档页,如按月份、分类存档等;
search.php 搜索结果页。
上述页面里面遇到
- <?php the_content(__('(more...)')); ?>
改成
- <?php if(!is_single()) {
- the_excerpt();
- } else {
- the_content(__('(more...)'));
- } ?>
说明,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插件这段代码也可以输出摘要,如果安装了插件,则会使用上面的函数输出摘要。
不错,我也试试
@kxzw
呵呵。挺老的文章了。用了这么久WP。我还是觉得自己填写more标签比较好。