excerpt_length non funziona - Risoluzione problemi WordPress
Sto cercando di costruire un tema e voglio controllare la lunghezza degli estratti dei post facendo qualcosa come questo in functions.php:
// Funzione per modificare la lunghezza degli estratti
function theme_excerpt_length( $length ) {
return 45; // Restituisce 45 parole come lunghezza desiderata
}
// Aggiunge il filtro con priorità alta (999)
add_filter( 'excerpt_length', 'theme_excerpt_length', 999 );
Ma non sembra avere l'effetto desiderato di ridurre la lunghezza dell'estratto a 45 parole. Inoltre, anche senza questa funzione, alcuni estratti sono più lunghi del valore predefinito di 55 parole. Cosa potrebbe non funzionare?

Ci sono due modi rapidi per visualizzare lunghezze personalizzate degli estratti nel tuo tema utilizzando wp_trim_words
. Ricorda, se usi the_excerpt()
, la lunghezza del tuo estratto sarà sempre un massimo di 55 parole, mai di più. Se invece usi the_content()
, puoi specificare una lunghezza dell'estratto superiore a 55 parole.
Usa il seguente codice per visualizzare il tuo estratto. Ricorda di sostituire get_the_excerpt
con get_the_content
se hai bisogno di un estratto con più di 55 parole, e sostituisci <a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Read more »', 'pietergoosen' ) . '</a>
con qualsiasi chiusura di estratto tu necessiti. La mia chiusura mostra un testo "leggi tutto" con il nome del post.
function pietergoosen_custom_excerpts($limit) {
return wp_trim_words(get_the_excerpt(), $limit, '<a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Read more »', 'pietergoosen' ) . '</a>');
}
Ora puoi semplicemente usare echo pietergoosen_custom_excerpts($limit);
ovunque nei tuoi template dove hai bisogno di visualizzare estratti. Basta cambiare $limit
con il numero effettivo di parole, ad esempio echo pietergoosen_custom_excerpts(45);
per visualizzare 45 parole.
MODIFICA
Dai un'occhiata anche alla mia risposta su un estratto personalizzato

Questa è la funzione che utilizzo per controllare la lunghezza degli estratti/contenuti, specialmente in situazioni in cui è improbabile che l'utente finale ricordi di aggiungere il tag <!--more-->
, ma il design del tema lo richiede.
function excerpt($limit) {
$excerpt = explode(' ', get_the_excerpt(), $limit);
if (count($excerpt)>=$limit) {
array_pop($excerpt);
$excerpt = implode(" ",$excerpt).'...';
} else {
$excerpt = implode(" ",$excerpt);
}
$excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
return $excerpt;
}
Da qui, puoi modificare il codice dell'estratto nei tuoi file template da:
<?php the_excerpt();?>
...a:
<?php echo excerpt(25);?>
dove 25 è il numero di caratteri che vuoi visualizzare. Quando progetto temi, tendo a utilizzare i caratteri invece delle parole perché la spaziatura risulta un po' più consistente.

Ho provato questo. C'è una riduzione nella lunghezza ma non esattamente quella specificata per l'estratto. Ad esempio ho specificato 45, ma ho comunque ottenuto un estratto come: "Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem..."

Se hai un estratto personalizzato, il filtro "excerpt_length" non funzionerà su di esso. Puoi utilizzare questo filtro per tagliare l'estratto personalizzato.
function custom_excerpt_length($excerpt) {
if (has_excerpt()) {
$excerpt = wp_trim_words(get_the_excerpt(), apply_filters("excerpt_length", 30));
}
return $excerpt;
}
add_filter("the_excerpt", "custom_excerpt_length", 999);
Buona fortuna!

Se hai trovato questa domanda, è perché stai utilizzando il blocco "Estratto" nell'editor Gutenberg e stai cercando di impostare una lunghezza predefinita per esso (o qualsiasi valore diverso da quello originariamente consentito tra 10-100 parole). Potresti notare che il filtro excerpt_length
non ha alcun effetto sul blocco, e non puoi nemmeno usare il filtro the_excerpt
per sovrascrivere il contenuto dell'estratto. Ciò è dovuto agli aggiornamenti più recenti apportati al blocco Estratto in WordPress.
Tuttavia, puoi utilizzare il seguente codice per modificare le impostazioni predefinite del blocco Estratto in Gutenberg:
function filter_metadata_registration( $metadata ) {
if ($metadata['name'] === 'core/post-excerpt') {
$metadata['attributes']['excerptLength'] = [
'type' => 'number',
'default' => 9999,
];
}
return $metadata;
};
add_filter( 'block_type_metadata', 'filter_metadata_registration' );
Maggiori informazioni: https://core.trac.wordpress.org/ticket/59348
