问题描述
当我在”the loop”(存档页面等) 中,如何强制所有文章的 teasers /摘录,不管它们是否包含<!--more-->
标签?
细节:
我从_s
模板开始,它使用 content.php
模板显示博客文章内容,该模板称为 the_content()
函数。此功能检查该帖子,并尝试找到<!--more-->
标签。如果找到该标签,则返回一个预告片和一个更多的链接,如果不是只输出整个帖子。
我想保留第一部分,如果内容作者使用<!--more-->
标签,但是如果他/她忘记了它,我想自动显示前导/摘录 (类似于第一段或第二段) 。
这样做最好的方法是什么?有一个 the_content
滤波器,阅读更多的自定义文本不会出现。你会推荐什么
最佳解决思路
编辑
好的,有一个非常隐藏的本机功能,get_extended()
,我从来不知道,并由 @kaiser 在 his answer 中大大解释。我的答案只能是 @kaiser 的答案的扩展
原始答案
没有本机功能来做到这一点。这里最好的办法是使用像 strpos
这样的 PHP 函数来搜索更多的标签,然后根据结果做一些事情。
你可以尝试这样的东西
if( strpos( $post->post_content, '<!--more-->' ) ) {
the_content( __( '… Read more about this article <span class="meta-nav">→</span>' ) );
}
else {
the_excerpt();
}
次佳解决思路
当然,在内核的<!--more-->
标签之前和之后都有一个 API 函数 (隐藏在内核的深度) 。由于完全为零的命名约定,WP 中的便捷部件通常被监视:get_extended()
。
// In the loop, after `the_post()` filled the global `$post`:
$info = get_extended( $post );
// The resulting data is an Array:
[Array] $info
'main' => the text before the `<!--more-->`
'extended' => the content after the `<!--more-->` comment
'more_text' => the custom "Read More" text
结果将如下所示:
if ( have_posts() )
{
while ( have_posts() )
{
the_post();
$info = get_extended( $GLOBALS['post'] );
if ( ! empty( $info['extended'] ) )
{
the_content( ! empty( $info['more_text'] ) ? $info['more_text'] : 'Read more' );
}
else
{
the_excerpt();
}
}
}
并根据<!--more-->
的存在切换摘录和内容。请记住,默认情况下,WP 只接受没有空格的<!--more-->
。因此,如果您的作者手工输入并添加空格,<!-- more -->
将无法正常工作 (无论如何) 。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。