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?
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;"> (...)</a>';
return $excerpt;
}
Je l'ai eu d'ici:
http://wordpress.org/support/topic/limit-excerpt-length-by-characters
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.
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 );
}
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);
}
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
.