wp_trim_words() non taglia the_content() in WordPress

8 mar 2019, 10:01:17
Visualizzazioni: 20.4K
Voti: 4

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?

0
Tutte le risposte alla domanda 1
3
11

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);
?>
8 mar 2019 10:11:34
Commenti

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

teccraft teccraft
8 mar 2019 10:45:12

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

teccraft teccraft
8 mar 2019 12:38:05

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.

Eric Hepperle - CodeSlayer2010 Eric Hepperle - CodeSlayer2010
19 mar 2025 21:28:06