wp_trim_words() non taglia the_content() in WordPress
Nel mio sito WordPress, voglio mostrare un breve testo di ogni blog_post nel template personalizzato del blog. Voglio mostrare un pulsante Leggi di più
con un link al post alla fine in modo che l'utente possa cliccare su quel link e visualizzare il post completo.
Ma ottengo sempre l'intero post invece del suo riassunto.
Ecco il mio codice:
$moreLink = '<a href="' . the_permalink() . '"> Leggi di più...</a>';
$wp_query = new WP_Query();
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>" title="Leggi di più"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php echo wp_trim_words( the_content(), 55, $moreLink); ?>
<?php endwhile; ?>
Ho provato diversi codici invece di wp_trim_words(the_content(), 55, $moreLink);
trovati online senza successo. Ho anche utilizzato la stessa riga di codice su un altro template personalizzato e funziona correttamente. Tuttavia, con questo template non funziona.
Sto facendo qualche errore nel mio codice?

Il problema risiede in questa riga:
<?php echo wp_trim_words( the_content(), 55, $moreLink); ?>
Stai chiamando la funzione the_content
all'interno. Questa funzione stampa tutto il contenuto e non restituisce nulla. Ciò significa che stai stampando il contenuto, e poi passi una stringa vuota a wp_trim_words
.
Dovrebbe essere:
<?php echo wp_trim_words( get_the_content(), 55, $moreLink); ?>
Fai attenzione perché, come descritto nel codex, get_the_content()
non passa il contenuto attraverso il filtro 'the_content'. Questo significa che non eseguirà gli shortcode. Se vuoi ottenere esattamente ciò che the_content()
stampa, devi usare
<?php
$my_content = apply_filters( 'the_content', get_the_content() );
echo wp_trim_words( $my_content, 55, $moreLink);
?>
Suggerisco di usare anche wp_strip_all_tags()
, altrimenti potresti avere problemi con tag aperti che vengono troncati.
Esempio completo:
<?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);
?>

Funziona ma invece del contenuto effettivo, mi mostra lo shortcode del post come questo.

@Mr. Cariol Grazie per la tua risposta. La soluzione che hai fornito funziona perfettamente.

Grazie Krysiek per questa spiegazione! Anche se nel mio caso stavo usando get_the_content()
, non funzionava fino a quando non ho applicato l'"esempio completo" da te fornito. In qualche modo richiede apply_filters() e/o wp_strip_all_tags(). Sembra un po' contorto, ma è l'unica cosa che ha funzionato.
