对the_content()和the_excerpt()感到困惑

时间:2019-07-08 06:40:23

标签: wordpress

我已经在设置->阅读页面上设置

您的首页显示= 您的最新帖子
对于提要中的每篇文章,请显示= 摘要

在WordPress管理页面上,我有10篇文章。每篇文章都有主要内容,有些文章没有摘录内容,这意味着某些文章的摘录框为空。

我的目标是因为内容众多,因此显示所有带有阅读更多链接的文章。

为此,我正在使用以下代码:

<?php the_excerpt(); ?>

以及在functions.php文件中:

function wpdocs_custom_excerpt_length( $length ) {
    return 5;
}
add_filter( 'excerpt_length', 'wpdocs_custom_excerpt_length', 999 );

function wpdocs_excerpt_more( $more ) {
    if ( ! is_single() ) {
        $more = sprintf( '<a class="read-more" href="%1$s">%2$s</a>',
            get_permalink( get_the_ID() ),
            __( '&nbsp;Read More>>>', 'wordpress-theme' )
        );
    }

    return $more;
}
add_filter( 'excerpt_more', 'wpdocs_excerpt_more' );

现在,在博客页面上,我可以看到一些具有阅读更多链接,而另一些具有完整文章而没有阅读更多链接。为什么?

更新

我可以看到,如果我在摘录框中添加了任何内容,则该内容从该专家框中显示,并且未显示更多链接

如果该框为空,则显示的是主内容框中的内容,其中包含截断的字符,并且显示更多内容

我更新的问题:如果内容来自摘录框,为什么它没有显示更多信息?

1 个答案:

答案 0 :(得分:0)

按字符数限制摘录,但不要截断最后一个单词。这样一来,您最多可以返回字符数,但保留完整的单词,因此仅返回可以容纳指定数量限制的单词,并允许您指定摘录的来源。

function get_excerpt($limit, $source = null){

    $excerpt = $source == "content" ? get_the_content() : get_the_excerpt();
    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, $limit);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'... <a href="'.get_permalink($post->ID).'">more</a>';
    return $excerpt;
}

/*
Sample...  Lorem ipsum habitant morbi (26 characters total) 

Returns first three words which is exactly 21 characters including spaces
Example..  echo get_excerpt(21);  
Result...  Lorem ipsum habitant 

Returns same as above, not enough characters in limit to return last word
Example..  echo get_excerpt(24);    
Result...  Lorem ipsum habitant  

Returns all 26 chars of our content, 30 char limit given, only 26 characters needed. 
Example..  echo get_excerpt(30);    
Result...  Lorem ipsum habitant morbi
*/

此功能可以在整个主题文件中多次使用,每个主题文件均指定了不同的字符数限制。

此功能可以从任何一个中摘录

  • the_content
  • the_excerpt

例如,如果您在帖子编辑器屏幕的the_excerpt框中有包含文本的帖子,但想从the_content正文中摘录,而不是出于特殊用例,则应该这样做;

get_excerpt(140, 'content'); //excerpt is grabbed from get_the_content

这告诉函数您要the_content中的前140个字符,而不管是否在the_excerpt框中设置了摘录。

get_excerpt(140); //excerpt is grabbed from get_the_excerpt

这告诉函数您要先从the_excerpt开始的前140个字符,在没有摘录的地方,the_content将用作后备。

可以改进此功能以使其更加高效,或者可以将WordPress过滤器与the_contentthe_excerpt结合使用,也可以按原样在没有合适的,内置的WordPress API替代方案。