web-dev-qa-db-fra.com

extrait en caractères

J'ai du code dans functions.php:

function string_limit_words($string, $Word_limit)
{
  $words = explode(' ', $string, ($Word_limit + 1));
  if(count($words) > $Word_limit)
  array_pop($words);
  return implode(' ', $words);
}

mais je dois limiter l'extrait en nombre de caractères, pourriez-vous m'aider avec ça?

4
Marcin

J'ai utilisé ce code dans l'un de mes derniers projets:

function ng_get_excerpt( $count ){
  $permalink = get_permalink( $post->ID );
  $excerpt = get_the_content();
  $excerpt = strip_tags( $excerpt );
  $excerpt = mb_substr( $excerpt, 0, $count );
  $excerpt = mb_substr( $excerpt, 0, strripos( $excerpt, " " ) );
  $excerpt = rtrim( $excerpt, ",.;:- _!$&#" );
  $excerpt = $excerpt . '<a href="'.$permalink.'" style="text-decoration: none;">&nbsp;(...)</a>';
  return $excerpt;
}

Je l'ai eu d'ici:

http://wordpress.org/support/topic/limit-excerpt-length-by-characters

https://stackoverflow.com/questions/10923955/make-function-that-limits-text-not-show-last-punctuation-mark

Il a l’avantage de ne pas permettre la ponctuation à la fin et se termine par le dernier mot complet

L'utilisation des filtres suggérés par @ medhamza7 ou @bainternet ou @fuxia est préférable.

4
Nicolai

Utilisez la fonction utf8_truncate() de cette réponse et frayez-vous un chemin à travers wp_trim_excerpt().

Exemple de code, non testé:

add_filter( 'excerpt_more', 'wpse_69436_excerpt_more' );

function wpse_69436_excerpt_more( $more )
{
    add_filter( 'wp_trim_excerpt', 'wpse_69436_trim_excerpt' );
    // we remove the more text here
    return '';
}

function wpse_69436_trim_excerpt( $excerpt )
{
    return utf8_truncate( $excerpt, 300 );
}
2
fuxia

WordPress a un filtre pour ce qui est commodément nommé excerpt_length et accepte un certain nombre de caractères, donc:

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

changer 50 à la limite que vous voulez.

Mise à jour par commentaire @toscho:

c’est la solution ci-dessus qui concerne les mots également et non les caractères, voici donc une solution rapide:

add_filter('the_excerpt','excerpt_char_limit');
function excerpt_char_limit($e){
    return substr($e,0,50);
}
1
Bainternet

Pour un meilleur moyen, vous pouvez utiliser le filtre get_the_excerpt:

function get_excerpt($excerpt="",$limit=140){

    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = mb_substr($excerpt, 0, $limit);
    $excerpt = mb_substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'...';
    return $excerpt;
}   
add_filter('get_the_excerpt',"get_excerpt");

Modifiez le $limit=140 en fonction du nombre de caractères souhaité. Aussi, si vous voulez d'une manière différente:

add_filter('get_the_excerpt',function ($excerpt="",$limit=140){

    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = mb_substr($excerpt, 0, $limit);
    $excerpt = mb_substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'...';
    return $excerpt;
});

Cela évitera tout conflit tel que le nom existant de la fonction get_excerpt.

1
med amine hamza