Personalizzazione di get_the_excerpt() per lunghezza specifica e output "Leggi altro"

5 dic 2012, 20:40:08
Visualizzazioni: 24.4K
Voti: 6

Sto personalizzando un template. C'è un elenco che prende l'introduzione dai primi 1-2 paragrafi (tutti gli articoli di una categoria). Se imposto l'estratto a 295 parole, a volte l'elenco prende parole aggiuntive dal paragrafo successivo. Vorrei aggiungere un tag Leggi altro per fermarlo. Qualcuno può aiutarmi con questa parte?

<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">Clicca per Storia e Video</a></i>
            <br/>
        </span>
    </div>
</div>
0
Tutte le risposte alla domanda 5
1

Per ottenere una lunghezza specifica puoi usare la funzione: wp_trim_words. Ha 3 parametri.

  1. Testo da tagliare. Es: get_the_content()
  2. Numero di parole. Es: 295
  3. Cosa aggiungere alla fine del testo. Es: '' Questo significa null.

Usa questo codice:

<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">Clicca per la Storia & Video</a></i>
    <br/>
</span>
6 ago 2016 22:21:59
Commenti

Spiegare cosa fa il tuo codice e come risponde alla domanda migliorerebbe la tua risposta.

Gabriel Gabriel
6 ago 2016 22:58:19
0

Puoi estrarre il primo o i primi due paragrafi con un'espressione regolare (regexp)

function custom_excerpt( $content = '' ){

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

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

    // estrae tutti i paragrafi da $content
    preg_match_all( '#<\s*p[^>]*>(.*?)<\s*/\s*p>#ui', $content, $matches );

    if( ! empty( $matches ) ){

        // aggiunge il primo paragrafo
        $result = $matches[0][0];

        // aggiunge il secondo paragrafo se disponibile
        if( isset( $matches[0][1] ) )
            $result .= $matches[0][1];

        // imposta la lunghezza dell'estratto
        add_filter( 'excerpt_length', 'custom_excerpt_length' );

        // crea l'estratto personalizzato
        $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;
}

Chiama la funzione con

<?php print custom_excerpt( get_the_content( 'Leggi tutto' ) ); ?>

Questo è un po' complicato perché non puoi passare un testo a wp_trim_excerpt(). wp_trim_excerpt() restituirà semplicemente il testo se gli viene fornito. Devi copiare e personalizzare un po' la funzione.

6 dic 2012 00:53:44
1

Puoi utilizzare questa funzione:

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

22 mar 2018 17:34:17
Commenti

Ottimo, funziona perfettamente

Nuno Sarmento Nuno Sarmento
18 feb 2021 17:51:18
1

Puoi utilizzare la funzione integrata

function custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

http://codex.wordpress.org/Function_Reference/the_excerpt

16 mar 2015 13:58:37
Commenti

Benvenuto su WPSE Vee. Se rileggi la domanda potresti notare che questa non è realmente una risposta alla domanda posta. Ma comunque grazie per averci provato e ancora una volta benvenuto su WPSE!

kraftner kraftner
16 mar 2015 14:41:09
0

Per ottenere ciò che desideri, devi fare due cose.

1) Stabilire una lunghezza personalizzata per l'estratto (in parole, non in caratteri), ottenibile al meglio seguendo questa risposta.

2) Basta chiamare wp_trim_excerpt(), senza avvolgerlo all'interno di substr

La tua riga di codice sopra non sta facendo quello che ti aspetti. Credo che stia restituendo i primi 295 caratteri dell'estratto, ma non sono completamente sicuro di cosa farà la funzione php subtr() quando le passerai una stringa come secondo argomento quando si aspetta un intero.

5 dic 2012 21:57:45