如何創建和自定義 WordPress 摘錄
已發表: 2020-04-16摘錄是與帖子關聯的可選文本。 大多數時候,它被用作帖子摘要。 如果您使用的是新編輯器,您會看到邊欄中有一個名為Excerpt的選項:

如果未顯示,您可能必須從 Gutenberg 的設置中啟用該選項。 單擊編輯器右上角的省略號圖標,然後單擊選項:

然後尋找摘錄並啟用它:

根據您的主題配置方式,在查看您在博客中的帖子、搜索結果等時會顯示摘錄。例如,在我們的博客上,您可以看到我們所有的帖子如何與其相關摘錄一起呈現:

現在,寫這段摘錄總是強制性的嗎? 如果我們不這樣做,WordPress 會做什麼? 它是顯示什麼還是什麼都沒有? 好吧,我們將回答這些問題,我們將仔細研究 WordPress 為我們提供的自定義摘錄選項。
WordPress摘錄如何工作
WordPress 有兩個函數來獲取帖子的摘錄: get_the_excerpt和the_excerpt 。 兩者都在wp-includes/post-template.php中定義,如果您查看它們的源代碼,您會發現所有the_excerpt所做的只是echo顯get_the_excerpt的結果(在使用the_excerpt過濾之後)。 因此,基本上,我們可以粗略地說,要了解摘錄在 WordPress 中的工作原理,您唯一需要了解的是get_the_excerpt函數。
如您所見, get_the_excerpt非常簡單:
function get_the_excerpt( $post = null ) { // ... $post = get_post( $post ); if ( empty( $post ) ) { return ''; } // ... return apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ); } 基本上,它會加載一篇文章(如果您沒有設置,它會使用 WordPress 循環中可用的文章)並返回其post_excerpt屬性。 因此,似乎沒有摘錄意味著 WordPress 最終不會顯示任何內容,對吧?
沒那麼快,伙計。
請注意,此函數實際上並不直接返回 post_excerpt 的值。 相反,它使用一個新的過濾器來過濾它:get_the_excerpt。 因此,如果有任何與該過濾器相關的操作,最終結果可能會發生變化,不再是空字符串……
事實上,這就是這裡發生的事情! 如果我們不為給定的帖子編寫摘錄,這就是我們將在前端看到的內容:

我們帖子的第一句話將是 WordPress 生成的摘錄。
wp_trim_excerpt函數
如果我們在 WordPress 源代碼中執行快速搜索,我們將看到,默認情況下,只有一個與get_the_excerpt過濾器關聯的操作。 具體來說,在wp-includes/default-filters.php filters.php 中,我們看到一個名為wp_trim_excerpt的函數被掛鉤。
根據 WordPress 文檔, wp_trim_excerpt負責生成最多 55 個單詞的摘錄,並在必要時附加省略號。 這裡是關鍵:如果還沒有摘錄,該函數認為生成摘錄是“必要的”(通常,這相當於說用戶沒有在編輯器中編寫摘錄)。 您可以在函數的源代碼中看到這一點:
function wp_trim_excerpt( $text = '', $post = null ) { $raw_excerpt = $text; if ( '' == $text ) { $post = get_post( $post ); $text = get_the_content( '', false, $post ); // [...] » Generates the excerpt using the post content } return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt ); } 看? 如果沒有摘錄( $text是空字符串),則檢索當前帖子的內容( get_the_content from $post )並使用它來生成摘錄。

從這一點開始,您可以繼續挖掘並發現 WordPress 是如何實際生成源代碼的。 不過,我想你已經明白了,所以讓我們再次看一下文檔,因為它對這個主題有所了解:
返回最多 55 個單詞,必要時附加省略號。 插件/主題可以使用
excerpt_length過濾器修改 55 個字的限制。 '[…]' 字符串可以通過插件/主題使用excerpt_more過濾器進行修改。wp_trim_excerpt文檔
因此,現在您知道了完全自定義 WordPress 為您的帖子生成的自動摘錄的所有知識。
如何自定義自動摘錄
讓我們看一些示例,了解如何使用我們在今天的帖子中看到的過濾器來自定義自動摘錄。 順便說一句,請記住,為了將任何這些修改添加到您的網站,您可能需要創建一個插件。
a) 如何在我的摘錄中更改我想要的字數
這是最簡單的一種。 我們已經看到我們可以使用excerpt_length過濾器來選擇我們想要在摘錄中包含多少個單詞,所以讓我們使用它:
function nelio_100_word_excerpts( $length ) { if ( is_admin() ) { return $length; } return 100; } add_filter( 'excerpt_length', 'nelio_100_word_excerpts', 99 ); 請注意,我們在函數中做的第一件事是確保我們在前端。 如果我們在儀表板 ( is_admin ) 上,我們最好不要對我們的摘錄做任何事情。 一旦我們確定我們處於“安全環境”中,我們只需要返回我們的幻數。 就我而言:100 字。
b) 如何更改自動提取後出現的文本
這也非常簡單,因為我們已經看到它有一個過濾器:
function nelio_clickable_read_more( $more ) { if ( is_admin() ) { return $more; } return sprintf( '<a href="%s">Tell me more!</a>', esc_url( get_the_permalink() ) ); } add_filter( 'excerpt_more', 'nelio_clickable_read_more', 99 );在這種情況下,我們所做的只是返回文本“告訴我更多!” 在摘要之後並使其成為鏈接,以便用戶可以單擊它。
c) 如何將摘錄的長度限制為一定數量的字符
wp_trim_words函數有一個同名過濾器,我們可以使用它來修改 WordPress 使用的最終摘錄。 所以讓我們使用它:
function nelio_140_char_excerpts( $excerpt, $raw_excerpt ) { if ( is_admin() ) { return $excerpt; } if ( '' !== $raw_excerpt ) { return $excerpt; } return mb_substr( $excerpt, 0, 140 ); } add_filter( 'wp_trim_excerpt', 'nelio_140_char_excerpts', 99, 2 ); wp_trim_words過濾器適用於自動和用戶定義的摘錄。 在我的示例中,我只對修改已自動生成的摘錄感興趣,因此我需要添加一個新條件。 如果您還記得, wp_trim_words僅在原始摘錄為空時才會生成自動摘錄,因此您所要做的就是檢查它以獲得所需的結果。
另一方面,請注意我使用mb_substr而不是經典的substr函數。 如果您想知道為什麼,原因很簡單:如果您在博客中使用英語以外的語言撰寫文章,您可能會使用多字節字符,而使用substr縮短多字節字符串可能會出錯。 閱讀 PHP 文檔以獲取更多信息。
d) 如何使用內容的第一段創建摘錄
最後,一個如何使用帖子的第一段創建摘錄的示例。 這次不解釋了,所以注意我在做什麼:
function nelio_first_paragraph_excerpts( $excerpt, $raw_excerpt ) { if ( is_admin() ) { return $excerpt; } if ( '' !== $raw_excerpt ) { return $excerpt; } $content = apply_filters( 'the_content', get_the_content() ); return substr( $content, 0, strpos( $content, '</p>' ) + 4 ); } add_filter( 'wp_trim_excerpt', 'nelio_first_paragraph_excerpts', 99, 2 );簡而言之…
WordPress 的強大之處在於它的可擴展性。 今天,我們詳細了解了 WordPress 如何生成帖子摘錄以及它提供的所有過濾器和功能,以根據您的需求定制最終結果。
我希望你喜歡今天的帖子。 分享給你的朋友,讓更多人知道WordPress的優勢!
Aaron Burden 在 Unsplash 上的特色圖片。
