web-dev-qa-db-fra.com

Extraits qui ne tronquent pas les mots

Je sais que je peux contrôler la longueur des extraits en utilisant un filtre , mais la longueur est globalement définie. Dans mon cas, j'ai des extraits d'extraits de trois pages différentes.

C'est ce que j'ai maintenant. J'aimerais l'améliorer pour ne pas tronquer les mots.

$content_to_excerpt = strip_tags( strip_shortcodes( get_the_content() ) );
$pos = strpos($content_to_excerpt, ' ', 160);
if ($pos !== false) {
 echo  "<p>" . substr($content_to_excerpt, 0, $pos) . "...</p>";
}
1
Eeyore

Définissez le filtre de manière dynamique en fonction de la page que vous chargez. Si les pages d'archives de catégories ont un extrait de 100 mots, alors que les articles ont un extrait de 10 mots et que tout le reste utilise la valeur par défaut:

function my_custom_excerpt_length( $orig ) {
    if( is_category() ) {
        return 100;
    } elseif( is_single() ) {
        return 10;
    }

    return $orig;
}
add_filter( 'excerpt_length', 'my_custom_excerpt_length' );

Vous pouvez obtenir des informations encore plus spécifiques en attribuant une longueur différente à des catégories spécifiques.


En réponse à Rarst, une nouvelle fonction de modèle the_excerpt_length() permettant d'extraire l'extrait avec un nombre spécifique de mots:

// Excerpt with a specific number of words, i.e. the_excerpt( 100 );
function the_excerpt_length( $words = null ) { 
    global $_the_excerpt_length_filter;

    if( isset($words) ) { 
        $_the_excerpt_length_filter = $words;
    }   

    add_filter( 'excerpt_length', '_the_excerpt_length_filter' );
    the_excerpt();
    remove_filter( 'excerpt_length', '_the_excerpt_length_filter' );

    // reset the global
    $_the_excerpt_length_filter = null;
}

function _the_excerpt_length_filter( $default ) { 
    global $_the_excerpt_length_filter;

    if( isset($_the_excerpt_length_filter) ) { 
        return $_the_excerpt_length_filter;
    }   

    return $default;
}

Ceci serait utilisé dans votre fichier de modèle, à savoir:

<div class="entry">
    <?php the_excerpt_length( 25 ); ?>
</div>
8
Annika Backstrom

Je sais que j'ai déjà vu cette question sur StackOverflow. Non spécifique à l'extrait WordPress, mais sur la troncature de chaînes sur PHP sans mots tronqués. En regardant en arrière sur StackOverflow lui-même, j'ai trouvé ce lien très utile à ce sujet.

Le code utilisé ici est:

// Original PHP code by Chirp Internet: www.chirp.com.au
// Please acknowledge use of this code by including this header. 
function myTruncate($string, $limit, $break=".", $pad="...") { 
  // return with no change if string is shorter than $limit
  if(strlen($string) <= $limit) return $string;

  // is $break present between $limit and the end of the string?
  if(false !== ($breakpoint = strpos($string, $break, $limit))) {
    if($breakpoint < strlen($string) - 1) {
      $string = substr($string, 0, $breakpoint) . $pad; 
    } 
  } 
  return $string; 
}

J'espère que cela t'aides!

1
Fernando Briano