什麼是摘要

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="http://'/code%20code.%20esc_url(get_permalink())%20.%20/codecode%20class="php string">'">'%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 中的文章輸出摘要並帶上繼續閲讀的鏈接再理想不過了。