web-dev-qa-db-fra.com

Comment contrôler la longueur de l'extrait manuel?

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).

6
hannit cohen

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.

:)

6
Martin-Al

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

6
Giraldi

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(']]>', ']]&gt;', $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);
  }
}
1
John P Bloch

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.

0
Infinity Media

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

0
Ibnul Hasan