J'ai un site Web sur lequel je dois contrôler la longueur de l'extrait affiché. Certains messages peuvent avoir un extrait manuel, donc je ne peux pas utiliser le filtre excerpt_length
.
Bien sûr, je peux utiliser une sorte de substr()
, mais je cherchais une solution plus élégante (le cas échéant).
Jetez un oeil sur ma réponse ici: Meilleure collection de code pour votre fichier functions.php
Si j'ai bien compris votre question, elle fait ce que vous recherchez.
Placez ceci dans functions.php
:
function excerpt($num) {
$limit = $num+1;
$excerpt = explode(' ', get_the_excerpt(), $limit);
array_pop($excerpt);
$excerpt = implode(" ",$excerpt)."... (<a href='" .get_permalink($post->ID) ." '>Read more</a>)";
echo $excerpt;
}
Ensuite, dans votre thème, utilisez le code <?php excerpt('22'); ?>
pour limiter l’extrait à 22 caractères.
:)
Avec le version récente de Wordpress _ (v.3.3.0 +), vous pouvez réellement utiliser wp_trim_words
.
function excerpt($limit) {
return wp_trim_words(get_the_excerpt(), $limit);
}
Voir aussi: https://stackoverflow.com/a/17177847/851045
Je dirais simplement de regarder comment fonctionne le noyau: http://phpxref.ftwr.co.uk/wordpress/wp-includes/formatting.php.source.html#l1840
J'ai pris la liberté de mettre le code ici pour faciliter la copie et le collage.
global $post;
if( empty($post->post_excerpt) ){
$text = apply_filters( 'the_excerpt', get_the_excerpt() );
} else {
$text = $post->post_excerpt;
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$text = strip_tags($text);
$excerpt_length = apply_filters('excerpt_length', 55);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
$words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
if ( count($words) > $excerpt_length ) {
array_pop($words);
$text = implode(' ', $words);
$text = $text . $excerpt_more;
} else {
$text = implode(' ', $words);
}
}
Essayez ceci: vous pouvez contrôler le nombre de mots que les sorties excert avec le filtre "excerpt_length" ci-dessous sont quelques exemples de la façon dont vous pouvez contrôler la taille en fonction de différentes conditions.
add_filter( 'excerpt_length', 'new_excerpt_length' );
function new_excerpt_length( $more ) {
if(is_front_page()){
if(has_post_thumbnail()){
return 15;
} else {
return 45;
}
} else {
return 100;
}
}
EDIT: Merde, je viens de remarquer que vous avez dit que l'approche du filtre était un non-aller. eh bien c'est pour d'autres personnes qui arrivent ici via google et veulent cela alors.
Simplement, cela peut être fait comme ci-dessous.
function custom_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
Référence: Codex