it-swarm.com.de

Begrenzen Sie den Auszug mit maximal x Zeichen

Was ich versuche zu tun:
Ich möchte the_excerpt anzeigen, aber ich habe maximal x Zeichen, die the_excerpt möglicherweise verwendet, aber ich möchte nicht ein paar Zeichen eines Wortes anzeigen, sondern nur ganze Wörter.

Einige weitere Informationen:
Dieser Code befindet sich auf einer nicht einzelnen/nicht permalinkfähigen Webseite wie Archiven, Kategorien, Titelseiten und Suchanfragen, sodass ich <!--more--> nicht verwenden kann.

Der Code:
Dies ist der Code, den ich benutze:

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

if ( have_posts() ):
    while( have_posts() ): the_post();
        the_excerpt( );
    endwhile;
endif;
1
Mike Madern
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;
});

Dies sollte Ihre maximale Länge berücksichtigen und den Text an der nächsten Wortgrenze teilen. Wenden Sie den Filter an und rufen Sie the_excerpt(); in Ihren Vorlagen auf


Anscheinend gibt es eine wp_trim_words -Funktion aus WP 3.3, die Sie ebenfalls verwenden können, die aber aus der Quelle sehr ineffizient aussieht. Abgesehen von der Verwendung von 3 Regexen wird der Text in eine Reihe von Wörtern aufgeteilt. Dies kann bei großen Textblöcken sehr langsam und speicherintensiv werden ...

1
onetrickpony

Nach einigem Rätsel fand ich diese Lösung:

$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;

Es klappt! YAY! Da es aber wiederholt get_the_excerpt aufrufen muss, wird die Seite etwas langsamer.

0
Mike Madern