¿Cómo controlar la longitud del extracto manual?

4 ene 2011, 13:58:15
Vistas: 22.5K
Votos: 6

Tengo un sitio web en el que necesito controlar la longitud del extracto mostrado. Algunos de los posts pueden tener extracto manual, por lo que no puedo usar el filtro excerpt_length.

Por supuesto, puedo usar algún tipo de substr(), pero estaba buscando una solución más elegante (si existe).

0
Todas las respuestas a la pregunta 6
2

Echa un vistazo a mi respuesta aquí: Mejor colección de código para tu archivo functions.php

Si entendí correctamente tu pregunta, esto hace lo que estás buscando.

Coloca esto en 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) ." '>Leer más</a>)";
    echo $excerpt;
}

Luego, en tu tema, usa el código <?php excerpt('22'); ?> para limitar el extracto a 22 caracteres.

:)

4 ene 2011 16:43:52
Comentarios

Tu función debería usar un entero adecuado y no una cadena para pasar valores numéricos o simplemente convertir dentro de la función, por ejemplo $num = (int) $num;. '1' != 1 .. :)

t31os t31os
4 ene 2011 17:46:40

¿Sigue siendo esta la mejor práctica? ¿O existe ahora un enfoque más eficiente?

Lewis Lewis
9 mar 2019 19:18:42
0

Con la versión reciente de WordPress (v.3.3.0+), puedes usar wp_trim_words.

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

Ver también: https://stackoverflow.com/a/17177847/851045

16 jul 2014 21:41:30
0

Diría que simplemente mires cómo lo hace el núcleo: http://phpxref.ftwr.co.uk/wordpress/wp-includes/formatting.php.source.html#l1840

Me tomé la libertad de poner el código aquí para facilitar copiar y pegar.

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

Simplemente se puede hacer de la siguiente manera:

function custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

Referencia: Codex

13 mar 2015 07:38:07
0

Prueba esto: Puedes controlar la cantidad de palabras que muestra el extracto con el filtro "excerpt_length". A continuación hay un par de ejemplos de cómo puedes controlar la longitud basándote en diferentes condiciones:

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

EDITO: Vaya, acabo de darme cuenta de que mencionaste que el enfoque con filtros no era viable. Bueno, esto es para otras personas que lleguen aquí a través de Google y busquen esta solución.

24 jun 2013 01:22:55
2
-1

Inserta este código en tu archivo functions.php

/* Límite fácil para extractos
*/
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;
} 

y usa echo easy_excerpt(milimite) en lugar de the_excerpt()
Funciona perfectamente.

8 oct 2015 21:13:39
Comentarios

Por favor publica una solución real

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

Deberías indentar correctamente tu código para mejor legibilidad, revisa la sección de ayuda de formato ;-)

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