如何在循环中强制摘录/摘要

时间:2014-12-28 作者:Borek Bernard

当我处于“循环”(归档页等)中时,如何强制所有文章的摘要/摘录,而不管它们是否包含<!--more--> 是否标记?

详细信息:

我要从_s 使用显示博客文章内容的模板the content.php template 它在其中调用the_content() 作用此函数检查帖子并尝试查找<!--more--> 添加标签。如果找到一个,它会返回一个摘要和一个阅读更多链接,如果没有,它只会输出整个帖子。

我想保留第一部分,即尊重<!--more--> 如果内容作者使用了标签,但如果他/她忘记了,我还是想自动显示摘要/摘录(类似于第一段或第二段)。

最好的方法是什么?有a the_content filter 但例如,“阅读更多”自定义文本不在其中。你有什么建议吗?

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

EDIT

好的,有一个非常隐藏的本机函数,get_extended() 我从来都不知道,而且被“凯撒”在his answer. 我的答案只能是@kaiser答案的扩展

ORIGINAL ANSWER

没有本机函数可以执行此操作。这里最好使用PHP函数,如strpos 搜索more标记,然后根据结果执行操作。

你可以试试这样的

if( strpos( $post->post_content, \'<!--more-->\' ) ) {
    the_content( __( \'&hellip; Read more about this article <span class="meta-nav">&rarr;</span>\' ) );
}
else {
    the_excerpt();
}

SO网友:kaiser

当然,有一个API函数隐藏在内核深处,用于检索<!--more--> 内容中的标记。由于完全没有命名约定,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 --> 无论如何都不行。

结束

相关推荐

Custom taxonomy template loop

我知道这个问题问得很多,但我找不到一个适合我的答案。我制作了一些自定义帖子类型和一些自定义分类法。我有自定义的帖子类型Products 并与分类法相联系Product Categories. 当用户在产品页面上单击产品类别时,我想向他显示该特定类别中的所有产品。问题是,产品类别将约为50种。现在我发现的唯一一件事就是把这个<?php $loop = new WP_Query( array( \'post_type\' => \'all_products\', \'posts_per_page\