web-dev-qa-db-fra.com

Personnalisation de get_the_excerpt () en fonction de la longueur et de la sortie "Read More".

Je costume un modèle. Une liste contient l’introduction des 1-2 premiers paragraphes (tous les articles d’une catégorie). Si je règle l'extrait à 295 mots, la liste récupère parfois des mots supplémentaires du paragraphe suivant. J'aimerais ajouter une balise Lire plus pour l'arrêter. Quelqu'un peut-il m'aider avec cette partie?

<div id="all-div-cabrand-content-stories">
    <div class="kids-families-con-cabrand-stories">
        <?php echo get_the_post_thumbnail($page->ID, 'thubmnailstorysmall'); ?>
    </div>
    <div class="kids-con-cabrand-new-stories">
        <span>
            <?php print substr(get_the_excerpt(),wp_trim_excerpt(),295); ?>
            <i><a style="color:#1975D1;float:Right;" class="title" href="<?php the_permalink() ?>" rel="bookmark">Click for Story & Video</a></i>
            <br/>
        </span>
    </div>
</div>
3
Chrisq

Vous pouvez saisir le premier ou les deux premiers paragraphes avec une expression régulière (regexp)

function custom_excerpt( $content = '' ){

    if( empty( $content ) )
        return $content;

    $result = '';
    $matches = array();

    // grab all paragraphs from $content
    preg_match_all( '#<\s*p[^>]*>(.*?)<\s*/\s*p>#ui', $content, $matches );

    if( ! empty( $matches ) ){

        // add the first paragraph
        $result = $matches[0][0];

        // add the swecond paragraph if available
        if( isset( $matches[0][1] ) )
            $result .= $matches[0][1];

        // set the excerpt length
        add_filter( 'excerpt_length', 'custom_excerpt_length' );

        // create the custom excerpt
        $result = custom_trim_excerpt( $result );

    }

    return $result;

}

function custom_excerpt_length(){

    return 295;

 }

function custom_trim_excerpt( $text = '' ){

    $text = strip_shortcodes( $text );

    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]&gt;', $text);
    $excerpt_length = apply_filters('excerpt_length', 55);
    $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
    $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );

    return $text;
}

Appeler la fonction avec

<?php print custom_excerpt( get_the_content( 'Read More' ) ); ?>

Ceci est un peu délicat car vous ne pouvez pas remettre wp_trim_excerpt() un texte. wp_trim_excerpt() renverra simplement le texte s'il en est fourni. Vous devez copier et personnaliser un peu la fonction.

2
Ralf912

Pour obtenir une longueur spécifique, vous pouvez utiliser: wp_trim_words function. Il a 3 paramètres.

  1. Texte à couper. Ex: get_the_content()
  2. Nombre de mots. Ex: 295
  3. Quoi ajouter après la fin du texte. Ex: '' Cela signifie null.

Utilisez ceci:

<span>
    <?php echo wp_trim_words( get_the_content(), 295, '' ); ?>
    <i><a style="color:#1975D1;float:Right;" class="title" href="<?php
        the_permalink() ?>" rel="bookmark">Click for Story & Video</a></i>
    <br/>
</span>
2
iBrAhiM

Vous pouvez utiliser cette fonction:

function get_excerpt_trim($num_words='20', $more='...'){
    $excerpt = get_the_excerpt();
    $excerpt = wp_trim_words( $excerpt, $num_words , $more );
    return $excerpt;
}

https://codex.wordpress.org/Function_Reference/wp_trim_words

1
ind88

Pour obtenir ce que vous voulez, vous devez faire deux choses.

1) Établissez une longueur d’extrait personnalisée (en mots, pas en caractères), obtenue de manière optimale en suivant cette réponse .

2) Appelez simplement wp_trim_excerpt (), ne l'enroulez pas à l'intérieur de substr

Votre ligne de code ci-dessus ne fait pas ce que vous vous attendez à faire. Je crois qu'il renvoie les 295 premiers caractères de l'extrait, mais je ne suis pas tout à fait sûr de ce que la fonction php subtr () va faire lorsque vous lui passez une chaîne comme second argument lorsqu'il attend un entier. .

0
Freddy