Come controllare la lunghezza dell'estratto manuale?

4 gen 2011, 13:58:15
Visualizzazioni: 22.5K
Voti: 6

Ho un sito web in cui ho bisogno di controllare la lunghezza dell'estratto visualizzato. Alcuni dei post potrebbero avere un estratto manuale quindi non posso utilizzare il filtro excerpt_length.

Potrei, ovviamente, utilizzare qualche tipo di substr(), ma stavo cercando una soluzione più elegante (se esiste).

0
Tutte le risposte alla domanda 6
2

Dai un'occhiata alla mia risposta qui: Miglior raccolta di codice per il tuo file functions.php

Se ho capito bene la tua domanda, fa esattamente quello che stai cercando.

Inserisci questo nel tuo 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) ." '>Leggi tutto</a>)";
    echo $excerpt;
}

Poi, nel tuo tema, usa il codice <?php excerpt('22'); ?> per limitare l'estratto a 22 caratteri.

:)

4 gen 2011 16:43:52
Commenti

La tua funzione dovrebbe utilizzare un intero corretto e non una stringa per passare valori numerici, oppure potrebbe convertire all'interno della funzione, ad esempio $num = (int) $num;. '1' != 1 .. :)

t31os t31os
4 gen 2011 17:46:40

Questa è ancora la best practice? O esiste un approccio più efficiente ora?

Lewis Lewis
9 mar 2019 19:18:42
0

Con la versione più recente di WordPress (v.3.3.0+), puoi effettivamente utilizzare wp_trim_words.

function excerpt($limit) {
    return wp_trim_words(get_the_excerpt(), $limit);
}

Vedi anche: https://stackoverflow.com/a/17177847/851045

16 lug 2014 21:41:30
0

Direi di dare un'occhiata a come lo fa il core: http://phpxref.ftwr.co.uk/wordpress/wp-includes/formatting.php.source.html#l1840

Mi sono permesso di inserire qui il codice per facilitare il copia e incolla.

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 gen 2011 16:27:22
0

Può essere fatto semplicemente come mostrato di seguito.

// Funzione per personalizzare la lunghezza dell'estratto
function custom_excerpt_length( $length ) {
    return 20; // Restituisce 20 parole come lunghezza dell'estratto
}
// Aggiunge il filtro per modificare la lunghezza dell'estratto
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

Riferimento: Codex

13 mar 2015 07:38:07
0

Prova questo: Puoi controllare il numero di parole che l'estratto restituisce utilizzando il filtro "excerpt_length". Di seguito ci sono un paio di esempi su come puoi controllare la lunghezza in base a diverse condizioni

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

MODIFICA: Accidenti, ho appena notato che hai detto che l'approccio con i filtri non era possibile. Beh, questo è per altre persone che arrivano qui tramite Google e vogliono questa soluzione allora.

24 giu 2013 01:22:55
2
-1

Inserisci questo codice nel tuo file functions.php

/* limitazione facile dell'excerpt
*/
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;
} 

e usa echo easy_excerpt(miolimite) invece di the_excerpt()
Funziona perfettamente.

8 ott 2015 21:13:39
Commenti

Per favore pubblica una soluzione reale

Pieter Goosen Pieter Goosen
8 ott 2015 21:28:04

Dovresti indentare correttamente il tuo codice per una migliore leggibilità, controlla la sezione di aiuto per la formattazione ;-)

Pieter Goosen Pieter Goosen
8 ott 2015 22:40:01