Cum să controlezi lungimea fragmentului manual (excerpt)?

4 ian. 2011, 13:58:15
Vizualizări: 22.5K
Voturi: 6

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ă).

0
Toate răspunsurile la întrebare 6
2

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.

:)

4 ian. 2011 16:43:52
Comentarii

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 .. :)

t31os t31os
4 ian. 2011 17:46:40

Este încă cea mai bună practică? Sau există acum o abordare mai eficientă?

Lewis Lewis
9 mar. 2019 19:18:42
0

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);
}

Vezi și: https://stackoverflow.com/a/17177847/851045

16 iul. 2014 21:41:30
0

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(']]>', ']]&gt;', $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);
  }
}
4 ian. 2011 16:27:22
0

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

13 mar. 2015 07:38:07
0

Î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.

24 iun. 2013 01:22:55
2
-1

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.

8 oct. 2015 21:13:39
Comentarii

Te rog postează o soluție reală

Pieter Goosen Pieter Goosen
8 oct. 2015 21:28:04

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

Pieter Goosen Pieter Goosen
8 oct. 2015 22:40:01