Cum să controlezi lungimea fragmentului manual (excerpt)?
Am un site web în care trebuie să controlez lungimea fragmentului (excerpt) afișat.
Unele dintre articole ar putea avea fragment manual, așa că nu pot folosi filtrul excerpt_length
.
Pot, desigur, să folosesc o funcție de tipul substr()
, dar caut o soluție mai elegantă (dacă există).

Aruncă o privire la răspunsul meu aici: Cea mai bună colecție de cod pentru fișierul tău functions.php
Dacă am înțeles corect întrebarea ta, această funcție face exact ceea ce cauți.
Pune acest cod în functions.php
:
function excerpt($num) {
$limit = $num+1;
$excerpt = explode(' ', get_the_excerpt(), $limit);
array_pop($excerpt);
$excerpt = implode(" ",$excerpt)."... (<a href='" .get_permalink($post->ID) ." '>Citește mai mult</a>)";
echo $excerpt;
}
Apoi, în tema ta, folosește codul <?php excerpt('22'); ?>
pentru a limita rezumatul la 22 de caractere.
:)

Funcția ta ar trebui să folosească un întreg corect și nu un șir de caractere pentru a transmite valori numerice sau ar putea converti în interiorul funcției, de exemplu $num = (int) $num;
. '1' != 1
.. :)

Cu versiunea recentă a WordPress (v.3.3.0+), poți folosi wp_trim_words
.
function excerpt($limit) {
return wp_trim_words(get_the_excerpt(), $limit);
}

Aș sugera să arunci o privire la modul în care funcționează în nucleu: http://phpxref.ftwr.co.uk/wordpress/wp-includes/formatting.php.source.html#l1840
Mi-am permis să pun codul aici pentru ușurința copierii și lipirii.
global $post;
if( empty($post->post_excerpt) ){
$text = apply_filters( 'the_excerpt', get_the_excerpt() );
} else {
$text = $post->post_excerpt;
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$text = strip_tags($text);
$excerpt_length = apply_filters('excerpt_length', 55);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
$words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
if ( count($words) > $excerpt_length ) {
array_pop($words);
$text = implode(' ', $words);
$text = $text . $excerpt_more;
} else {
$text = implode(' ', $words);
}
}

Acest lucru poate fi realizat simplu, așa cum este prezentat mai jos.
function custom_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
Referință: Codex

Încearcă asta: Poți controla numărul de cuvinte afișate în fragmentul de text folosind filtrul "excerpt_length". Mai jos sunt câteva exemple despre cum poți controla lungimea în funcție de diferite condiții.
add_filter( 'excerpt_length', 'new_excerpt_length' );
function new_excerpt_length( $more ) {
if(is_front_page()){
if(has_post_thumbnail()){
return 15;
} else {
return 45;
}
} else {
return 100;
}
}
EDIT: La naiba, tocmai am observat că ai spus că abordarea cu filtrul nu este o opțiune. Ei bine, asta rămâne pentru cei care ajung aici prin Google și doresc această soluție.

Introduceți acest cod în fișierul dvs. functions.php
/* limitare ușoară a excerpt-ului
*/
function
easy_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;
}
și utilizați echo easy_excerpt(limita_mea)
în loc de the_excerpt()
Funcționează perfect.

Ar trebui să indentăm corect codul pentru lizibilitate, verifică secțiunea de ajutor pentru formatare ;-)
