wp_trim_words() nu limitează the_content() în WordPress
În site-ul meu WordPress, vreau să afișez un text scurt pentru fiecare articol în șablonul personalizat de blog. Vreau să afișez un buton Citește mai mult
cu un link către articol la final, astfel încât utilizatorul să poată face click pe acel link pentru a vedea articolul complet.
Dar primesc întotdeauna întregul articol în loc de un rezumat.
Iată codul meu:
$moreLink = '<a href="' . the_permalink() . '"> Citește mai mult...</a>';
$wp_query = new WP_Query();
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>" title="Citește mai mult"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php echo wp_trim_words( the_content(), 55, $moreLink); ?>
<?php endwhile; ?>
Am încercat diferite variante de cod în loc de wp_trim_words(the_content(), 55, $moreLink);
găsite online, dar fără succes. Chiar am folosit aceeași linie de cod pe un alt șablon personalizat și funcționează bine. Totuși, cu acest șablon nu funcționează.
Am făcut vreo greșeală în codul meu?

Problema constă în această linie:
<?php echo wp_trim_words( the_content(), 55, $moreLink); ?>
Apelezi funcția the_content
acolo. Această funcție afișează tot conținutul și nu returnează nimic. Înseamnă că afișezi conținutul, iar apoi transmiți un șir gol către wp_trim_words
.
Ar trebui să fie:
<?php echo wp_trim_words( get_the_content(), 55, $moreLink); ?>
Fii atent deoarece, așa cum este descris în codex, get_the_content()
nu trece conținutul prin filtrul 'the_content'. Aceasta înseamnă că nu va executa shortcode-uri. Dacă vrei să obții exact ceea ce afișează the_content()
, trebuie să folosești
<?php
$my_content = apply_filters( 'the_content', get_the_content() );
echo wp_trim_words( $my_content, 55, $moreLink);
?>
Sugerez să folosești și wp_strip_all_tags()
, altfel poți avea probleme cu tag-urile deschise care au fost tăiate.
Exemplu complet:
<?php
$my_content = apply_filters( 'the_content', get_the_content() );
$my_content = wp_strip_all_tags($my_content);
echo wp_trim_words( $my_content, 55, $moreLink);
?>

Funcționează, dar în loc de conținutul real, îmi afișează shortcode-ul postării ca acesta.

@Domnule Cariol Mulțumesc pentru răspuns. Soluția pe care ai oferit-o funcționează perfect.

Mulțumesc Krysiek pentru această explicație! Chiar dacă foloseam get_the_content()
în cazul meu, tot nu funcționa până când nu am aplicat "exemplul complet" pe care l-ai oferit. Cumva necesită apply_filters() și/sau wp_strip_all_tags(). Pare un pic încâlcit, dar este singurul lucru care a funcționat.
