什么是摘要

WordPress 摘要是一段非必需的,对文章的概述性文字;简单地说,就是文章大意。小学的时候都学过概括全文大意,写摘要的时候就派上用场了。

如何给文章添加摘要

编辑文章时,在文章编辑框下面的摘要编辑框里添加即可。

摘要应该满足以下要求:

  • 概括全文大意
  • 关键词突出
  • 简短,最好按照搜索引擎的 Meta Description(元描述) 的规则来写,中文字符 50-80 个就差不多了。

摘要可以作为元描述,没错!

很多主题会将摘要作为元描述,符合逻辑,代码也简单。

All In One SEO Pack插件也会将摘要作为描述,如果你没有手动填元描述的话。注意,用 All In One SEO 时填写摘要是明智的选择,不要寄希望于自动元描述功能,这功能对中文支持的不好,详情看这里

如何在摘要之后添加浏览全文的链接

摘要通过 the_excerpt() 函数输出,这个函数很专一,只管输出摘要,所以你得打点一下,在后面加段代码

1
<a href="<?php echo get_permalink(); ?>"> [ Read More → ]</a>

手动摘要和自动摘要

懒人都喜欢自动化,WordPress 的摘要并不一定要手动去填,它可以自动生成。

当文章没有手动摘要时,而且当前文章模板使用 the_excerpt() 的模板标签时,WordPress 将会自动截取文章的前 55 个单词作为自动摘要;而当文章模板使用 the_content() 的模板标签时,WordPress 则会在文章中搜索 More 标签,并将其之前的部分作为内容预告。

我们都知道下面这段代码可以实现自动截取文章前多少个字符作为短描述的功能

1
<?php echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 300," ...<a href='".get_permalink()."' target='_blank'> 查看详情 &gt;&gt;");?>

其实,用 WordPress 的 the_excerpt()(摘要函数) 可以实现相同的功能。

翻开 twentyeleven 主题的 functions.php,可以发现几个处理摘要的函数

//设定摘要长度

1
2
3
4
function twentyeleven_excerpt_length( $length ) {
    return 40;
}
add_filter( 'excerpt_length', 'twentyeleven_excerpt_length'%20);

//给自动摘要添加 「继续阅读」 链接

1
2
3
4
5
6
7
8
9
function twentyeleven_continue_reading_link() {
    return ' <a href="'%20. esc_url(get_permalink()) . '">'%20. __('Continue reading <span class="meta-nav">&rarr;</span>', 'twentyeleven') . '</a>';
}
function twentyeleven_auto_excerpt_more($more) {
    return ' &hellip;'%20. twentyeleven_continue_reading_link();
}
add_filter('excerpt_more', 'twentyeleven_auto_excerpt_more');

//给手动摘要添加 「继续阅读」 链接

1
2
3
4
5
6
7
8
9
//需要调用 twentyeleven_continue_reading_link() 函数
function twentyeleven_custom_excerpt_more($output) {
    if (has_excerpt() && !is_attachment()) {
        $output .= twentyeleven_continue_reading_link();
    }
    return $output;
}
add_filter('get_the_excerpt', 'twentyeleven_custom_excerpt_more');

唯一的问题是对中文的支持,中文编码格式是多字节的,WP 的自动摘要默认输出前 55 个单词不适用,英文单词通常用空格分隔,中文却很少出现空格。这就是为什么这一节开头的代码要用 mb_strimwidth 去截取 content 内容。我们可以将 twentyeleven_custom_excerpt_more 函数稍微改一下

1
2
3
4
5
6
7
8
9
10
11
function twentyeleven_custom_excerpt_more($output) {
    if (!is_attachment()) {
        if (!has_excerpt()) {
            $output = mb_strimwidth($output, 0, 300);
        }
        $output .= twentyeleven_continue_reading_link();
    }
    return $output;
}
add_filter('get_the_excerpt', 'twentyeleven_custom_excerpt_more');

当没有填写手动摘要时,用 mb_strimwidth 截取 WP 产生的自动摘要的长度,这样就不会输出长长的自动摘要了。

很多主题都使用 the_content() 输出内容,还有必要理会摘要吗?

也许你的博客不需要摘要,但博客的 rss feed 需要摘要的,你一定记得后台设置-> 阅读中,可以设置 feed 中的每篇文章显示为全文或者摘要。如果你想赚点流量,让 feed 中的文章输出摘要并带上继续阅读的链接再理想不过了。