Ce que j'essaie de faire:
Je souhaite afficher the_excerpt
, mais j’ai un maximum de x
caractères que the_excerpt
peut utiliser, mais je ne souhaite pas afficher quelques caractères d’un mot, mais uniquement des mots entiers.
Quelques informations supplémentaires:
Ce code se trouve sur une page Web non unique/non permanente, telle que des archives, des catégories, une page d'accueil et des recherches, ce qui ne me permet pas d'utiliser <!--more-->
.
Le code:
C'est le code que j'utilise:
add_filter( 'excerpt_length', function( ) {
return 20;
} );
if ( have_posts() ):
while( have_posts() ): the_post();
the_excerpt( );
endwhile;
endif;
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;
});
Cela devrait prendre en compte votre longueur maximale et diviser le texte à la limite de Word la plus proche. Appliquez le filtre et appelez the_excerpt();
dans vos modèles.
Apparemment, il existe une fonction wp_trim_words
de WP 3.3 que vous pouvez également utiliser, mais qui semble très inefficace du point de vue de la source. En plus d'utiliser 3 expressions rationnelles, il divise le texte en une série de mots, ce qui peut être très lent et la mémoire exhaustive pour de gros morceaux de texte ...
Après quelques perplexités, j'ai trouvé cette solution:
$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;
Ça marche! YAY! Mais comme il doit appeler de manière répétée get_the_excerpt
, la page ralentit un peu.