限制摘录最多x个字符(_E)

时间:2013-03-15 作者:Mike Madern

What I\'m trying to do:
我想显示the_excerpt, 但我最多有x 角色the_excerpt 可以使用,但我不想显示一个单词的几个字符,只显示整个单词。

Some more information:
此代码位于非单一/非永久链接网页上,如存档、类别、首页和搜索,这使我无法使用<!--more-->.

The code:
这是我使用的代码:

add_filter( \'excerpt_length\', function( ) {
    return 20;
} );

if ( have_posts() ):
    while( have_posts() ): the_post();
        the_excerpt( );
    endwhile;
endif;

2 个回复
SO网友:onetrickpony

add_filter(\'wp_trim_excerpt\', function($text){    
   $max_length = 140;

   if(mb_strlen($text, \'UTF-8\') > $max_length){
     $split_pos = mb_strpos(wordwrap($text, $max_length), "\\n", 0, \'UTF-8\');
     $text = mb_substr($text, 0, $split_pos, \'UTF-8\');
   }

   return $text;
});
这应该考虑到您的最大长度,并在最近的单词边界处拆分文本。应用筛选器,然后调用the_excerpt(); 在模板中

显然有一个wp_trim_words 您也可以使用WP 3.3中的函数,但从源代码看效率非常低。由于使用了3个正则表达式,它将文本拆分为一个单词数组,对于大块文本,这可能会变得非常缓慢,并且内存耗尽。。。

SO网友:Mike Madern

经过一些困惑,我找到了这个解决方案:

$limit_characters = 120;

function new_excerpt_length( ) {
    global $length;
    return $length;
}

function get_the_excerpt_special( ) {
    global $limit_characters, $length;

    if(strlen( get_the_excerpt() ) > $limit_characters ) {
        $length--;
        return get_the_excerpt_special();
    } else {
        the_excerpt();
    }
}

if ( have_posts() ):
    while( have_posts() ): the_post();
        add_filter( \'excerpt_length\', \'new_excerpt_length\' );

        $length = 20;
        get_the_excerpt_special( );

        remove_filter( \'excerpt_length\', \'new_excerpt_length\' );

    endwhile;
endif;
它起作用了!耶!但因为它必须反复呼叫get_the_excerpt, 页面速度有点慢。

结束

相关推荐

WordPress二十二主题中是否保留了Front-page.php模板?

我正在写我的第一个“十二个孩子”主题,遇到了(我认为)一个奇怪的怪癖。我修改了头版。php中有一个使用sliderjs的滑块,后来我决定不想将其用作首页模板,所以我更愿意将其称为其他页面的其他内容。令我惊讶的是,我重新命名头版的那一刻。php到文本旋转木马。php并将docblock中的模板名称更改为其他名称。页面将从全宽显示我的内容和下面的小部件更改为类似于我的博客的两列版本,但将小部件分配到首页。所以,这是头版。php十二年保留模板?是否可以将其外观复制到不同的模板中?以下是我的代码供参考:<?