Personalizarea funcției get_the_excerpt() pentru o lungime specifică și afișarea "Citește mai multe"
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>
Pentru a obține o anumită lungime a textului, puteți utiliza funcția: wp_trim_words. Aceasta are 3 parametri.
- Textul de tăiat. Ex:
get_the_content()
- Numărul de cuvinte. Ex:
295
- 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>

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(']]>', ']]>', $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.

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

Puteți utiliza funcția încorporată
function custom_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

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.
