将get_the_excerpt()定制为特定长度并“阅读更多”输出。

时间:2012-12-05 作者:Chrisq

我正在制作模板。这里有一个从前1-2段(一个类别中的所有文章)抓取介绍的列表。如果我将摘录设置为295个单词,有时列表会从下一段中抓取其他单词。我想添加一个Read More标签来阻止它。有人能帮我做那个部分吗?

<div id="all-div-cabrand-content-stories">
    <div class="kids-families-con-cabrand-stories">
        <?php echo get_the_post_thumbnail($page->ID, \'thubmnailstorysmall\'); ?>
    </div>
    <div class="kids-con-cabrand-new-stories">
        <span>
            <?php print substr(get_the_excerpt(),wp_trim_excerpt(),295); ?>
            <i><a style="color:#1975D1;float:Right;" class="title" href="<?php the_permalink() ?>" rel="bookmark">Click for Story & Video</a></i>
            <br/>
        </span>
    </div>
</div>

5 个回复
SO网友:Ibrahim Rana

要获得特定长度,可以使用:wp_trim_words 作用它有3个参数。

要修剪的文本。例如:get_the_content()295\'\' 这意味着空值使用此选项:

<span>
    <?php echo wp_trim_words( get_the_content(), 295, \'\' ); ?>
    <i><a style="color:#1975D1;float:Right;" class="title" href="<?php
        the_permalink() ?>" rel="bookmark">Click for Story & Video</a></i>
    <br/>
</span>

SO网友:Ralf912

可以使用正则表达式(regexp)获取前一段或前两段

function custom_excerpt( $content = \'\' ){

    if( empty( $content ) )
        return $content;

    $result = \'\';
    $matches = array();

    // grab all paragraphs from $content
    preg_match_all( \'#<\\s*p[^>]*>(.*?)<\\s*/\\s*p>#ui\', $content, $matches );

    if( ! empty( $matches ) ){

        // add the first paragraph
        $result = $matches[0][0];

        // add the swecond paragraph if available
        if( isset( $matches[0][1] ) )
            $result .= $matches[0][1];

        // set the excerpt length
        add_filter( \'excerpt_length\', \'custom_excerpt_length\' );

        // create the custom excerpt
        $result = custom_trim_excerpt( $result );

    }

    return $result;

}

function custom_excerpt_length(){

    return 295;

 }

function custom_trim_excerpt( $text = \'\' ){

    $text = strip_shortcodes( $text );

    $text = apply_filters(\'the_content\', $text);
    $text = str_replace(\']]>\', \']]&gt;\', $text);
    $excerpt_length = apply_filters(\'excerpt_length\', 55);
    $excerpt_more = apply_filters(\'excerpt_more\', \' \' . \'[...]\');
    $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );

    return $text;
}
使用调用函数

<?php print custom_excerpt( get_the_content( \'Read More\' ) ); ?>
这有点棘手,因为你不能交出wp_trim_excerpt() 文本。wp_trim_excerpt() 将只返回文本(如果给定)。您必须稍微复制和自定义该函数。

SO网友:ind88

您可以使用此功能:

function get_excerpt_trim($num_words=\'20\', $more=\'...\'){
    $excerpt = get_the_excerpt();
    $excerpt = wp_trim_words( $excerpt, $num_words , $more );
    return $excerpt;
}

https://codex.wordpress.org/Function_Reference/wp_trim_words

SO网友:Vee

您可以使用内置功能

function custom_excerpt_length( $length ) {
    return 20;
}
add_filter( \'excerpt_length\', \'custom_excerpt_length\', 999 );

http://codex.wordpress.org/Function_Reference/the_excerpt

SO网友:Freddy

要得到你想要的,你需要做两件事。

1) 建立自定义摘录长度(用文字,而不是字符),最好通过以下方式实现this answer.

2) 只需调用wp\\u trim\\u execrpt(),不要将其包装在substr中

上面的代码行并没有达到预期的效果。我相信它返回了节选的前295个字符,但我不完全确定是什么php subtr() 当函数需要整数时,将字符串作为第二个参数传递给它时,函数将执行此操作。

结束