web-dev-qa-db-fra.com

add_filter sur "the_excerpt" ne fonctionne que lorsque post n'a pas d'extrait

class my_menu extends WP_Widget
{

function widget($args, $instance)
{

// Excerpt length filter
    $new_excerpt_length = create_function('$length', "return " . $excerpt_length . ";");

    if ( $instance["excerpt_length"] > 0 ) {
    add_filter('excerpt_length', $new_excerpt_length, 999);
    }
 //...
 }}

Ce filtre fonctionne très bien si le message ne contient pas d'extrait. Comment appliquer le même filtre à un message contenant un extrait?

En d’autres termes, lorsque la publication a un extrait réel, mais ne le filtre pas du tout, l’extrait entier est affiché. Cependant, lorsque la publication ne contient pas d'extrait, l'appel get_the_excerpt () est filtré de sorte qu'il ne retourne que le nombre de mots spécifié par "excerpt_length".

3
N2Mystic

J'ai posté un article à ce sujet il y a un moment:

function wp_trim_all_excerpt($text) {
// Creates an excerpt if needed; and shortens the manual excerpt as well
global $post;
   $raw_excerpt = $text;
   if ( '' == $text ) {
      $text = get_the_content('');
      $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', ' ' . '[...]');
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); 

return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); 
}

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wp_trim_all_excerpt');
4
Michael