excerpt_length nu funcționează
Încerc să construiesc o temă și vreau să controlez lungimea rezumatelor articolelor prin următorul cod în functions.php:
function theme_excerpt_length( $length ) {
return 45; // Returnează 45 cuvinte pentru rezumat
}
add_filter( 'excerpt_length', 'theme_excerpt_length', 999 );
Dar nu pare să aibă efectul dorit de reducere a lungimii rezumatului la 45 de cuvinte. Chiar și fără această funcție, unele rezumate sunt mai lungi decât valoarea implicită de 55 de cuvinte. Ce ar putea fi în neregulă?

Există două metode rapide pentru a afișa lungimi personalizate de rezumat în tema ta folosind wp_trim_words
. Reține, dacă folosești the_excerpt()
, lungimea rezumatului tău va fi întotdeauna maxim 55 de cuvinte, niciodată mai mult. Dacă folosești the_content()
, poți specifica o lungime de rezumat mai mare de 55 de cuvinte.
Folosește următorul cod pentru a afișa rezumatul tău. Nu uita să înlocuiești get_the_excerpt
cu get_the_content
dacă ai nevoie de un rezumat mai lung de 55 de cuvinte, și înlocuiește <a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Read more »', 'pietergoosen' ) . '</a>
cu orice sfârșit de rezumat ai nevoie. Sfârșitul meu afișează un text "citeste mai mult" cu numele postului.
function pietergoosen_custom_excerpts($limit) {
return wp_trim_words(get_the_excerpt(), $limit, '<a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Read more »', 'pietergoosen' ) . '</a>');
}
Acum folosește echo pietergoosen_custom_excerpts($limit);
oriunde în șabloanele tale unde ai nevoie să afișezi rezumate. Doar schimbă $limit
la numărul real de cuvinte, de exemplu echo pietergoosen_custom_excerpts(45);
pentru a afișa 45 de cuvinte.
EDITARE
Vezi și răspunsul meu despre un rezumat personalizat.

Aceasta este funcția pe care o folosesc pentru a controla lungimea fragmentelor (excerpt) sau a conținutului, în special în situațiile în care utilizatorul final nu este probabil să-și amintească să adauge tag-ul <!--more-->
, dar design-ul temei o necesită.
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;
}
De aici, poți schimba codul fragmentului în fișierele tale de șablon de la:
<?php the_excerpt();?>
...la:
<?php echo excerpt(25);?>
unde 25 este numărul de caractere pe care dorești să le afișezi. Când proiectez teme, prefer să mă bazez pe caractere în loc de cuvinte, deoarece spațierea este puțin mai consistentă.

Am încercat asta. Există o reducere a lungimii dar nu exact la lungimea specificată a fragmentului. De exemplu, am specificat 45, dar tot am primit un fragment de genul: "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..."

Dacă ai un fragment personalizat (custom excerpt), filtrul "excerpt_length" nu va funcționa pentru acesta. Poți folosi acest filtru pentru a trunchia fragmentul personalizat.
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);
Succes!

Dacă ai ajuns la această întrebare pentru că folosești blocul "Excerpt" în editorul Gutenberg și încerci să setezi o lungime implicită pentru el (sau orice altceva în afara intervalului permis inițial de 10-100 de cuvinte), s-ar putea să observi că filtrul excerpt_length
nu are efect asupra blocului și nici măcar nu poți folosi filtrul the_excerpt
pentru a suprascrie conținutul excerpt-ului. Acest lucru se întâmplă din cauza ultimelor actualizări ale blocului Excerpt în WordPress.
Totuși, poți folosi următorul cod pentru a edita setările implicite ale blocului Excerpt din 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' );
Mai multe detalii aici: https://core.trac.wordpress.org/ticket/59348
