如何创建和自定义 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 上的特色图片。
