Personalizarea funcției get_the_excerpt() pentru o lungime specifică și afișarea "Citește mai multe"

5 dec. 2012, 20:40:08
Vizualizări: 24.4K
Voturi: 6

Personalizez un șablon. Există o listă care preia introducerea din primele 1-2 paragrafe (toate articolele dintr-o categorie). Dacă setez fragmentul la 295 de cuvinte, uneori lista preia cuvinte suplimentare din următorul paragraf. Aș dori să adaug un tag Citește mai multe pentru a-l opri. Mă poate ajuta cineva cu această 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">Click pentru Articol & Video</a></i>
            <br/>
        </span>
    </div>
</div>
0
Toate răspunsurile la întrebare 5
1

Pentru a obține o anumită lungime a textului, puteți utiliza funcția: wp_trim_words. Aceasta are 3 parametri.

  1. Textul de tăiat. Ex: get_the_content()
  2. Numărul de cuvinte. Ex: 295
  3. Ce să adăugați la sfârșitul textului. Ex: '' Aceasta înseamnă nul.

Utilizați acest cod:

<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">Apăsați pentru Poveste & Videoclip</a></i>
    <br/>
</span>
6 aug. 2016 22:21:59
Comentarii

Explicând ce face codul tău și cum răspunde la întrebare, vei îmbunătăți răspunsul tău.

Gabriel Gabriel
6 aug. 2016 22:58:19
0

Puteți extrage primul sau primele două paragrafe folosind o expresie regulată (regexp)

function custom_excerpt( $content = '' ){

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

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

    // extragem toate paragrafele din $content
    preg_match_all( '#<\s*p[^>]*>(.*?)<\s*/\s*p>#ui', $content, $matches );

    if( ! empty( $matches ) ){

        // adăugăm primul paragraf
        $result = $matches[0][0];

        // adăugăm al doilea paragraf dacă există
        if( isset( $matches[0][1] ) )
            $result .= $matches[0][1];

        // setăm lungimea fragmentului
        add_filter( 'excerpt_length', 'custom_excerpt_length' );

        // creăm fragmentul personalizat
        $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;
}

Apelați funcția cu

<?php print custom_excerpt( get_the_content( 'Citește mai mult' ) ); ?>

Aceasta este o soluție un pic complicată deoarece nu puteți transmite un text direct funcției wp_trim_excerpt(). wp_trim_excerpt() va returna pur și simplu textul dacă i se oferă unul. Trebuie să copiați și să personalizați puțin funcția.

6 dec. 2012 00:53:44
1

Puteți folosi această funcție:

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
Comentarii

Foarte bun, funcționează perfect

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

Puteți utiliza funcția încorporată

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
Comentarii

Bun venit la WPSE Vee. Dacă citești din nou întrebarea, poate vei observa că acesta nu este chiar un răspuns la întrebarea pusă. Dar oricum, mulțumim pentru încercare și încă o dată bun venit pe WPSE!

kraftner kraftner
16 mar. 2015 14:41:09
0

Pentru a obține ceea ce doriți, trebuie să faceți două lucruri.

1) Stabiliți o lungime personalizată a fragmentului (în cuvinte, nu în caractere), cel mai bine realizată urmând acest răspuns.

2) Apelați direct wp_trim_excerpt(), fără a-l încadra în substr

Linia dvs. de cod de mai sus nu face ceea ce vă așteptați. Cred că returnează primele 295 de caractere ale fragmentului, dar nu sunt complet sigur ce va face funcția php substr() când îi transmiteți un șir ca al doilea argument când se așteaptă la un întreg.

5 dec. 2012 21:57:45