什麼是摘要

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 中的文章輸出摘要並帶上繼續閱讀的連結再理想不過了。