¿Cómo puedo limitar la longitud de caracteres en el extracto?

30 oct 2012, 06:47:12
Vistas: 136K
Votos: 12

Posible Duplicado:
extracto en caracteres

Tengo una pregunta después de leer esta publicación (Cómo resaltar términos de búsqueda sin plugin). Me gusta mucho esta función (Término de Búsqueda Sin Plugin) pero la longitud de caracteres es demasiado larga. ¿Qué código PHP debería agregar para hacer el extracto más corto? Agradecería si alguien puede sugerirlo. ¡Gracias!

0
Todas las respuestas a la pregunta 2
4
33

Además del gancho de filtro mencionado en la respuesta de Deepa, aquí hay una función adicional que puede ayudarte a ampliar el uso de the_excerpt de dos maneras:

Te permite...

Limitar el extracto por número de caracteres pero SIN truncar la última palabra. Esto te permitirá devolver un número máximo de caracteres pero conservando palabras completas, por lo que solo se devolverán las palabras que quepan dentro del límite especificado y te permitirá especificar la fuente de donde se obtendrá el extracto.

function get_excerpt($limit, $source = null){

    $excerpt = $source == "content" ? get_the_content() : get_the_excerpt();
    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, $limit);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'... <a href="'.get_permalink($post->ID).'">más</a>';
    return $excerpt;
}

/*
Ejemplo...  Lorem ipsum habitant morbi (26 caracteres en total) 

Devuelve las primeras tres palabras que son exactamente 21 caracteres incluyendo espacios
Ejemplo..  echo get_excerpt(21);  
Resultado...  Lorem ipsum habitant 

Devuelve lo mismo que arriba, no hay suficientes caracteres en el límite para devolver la última palabra
Ejemplo..  echo get_excerpt(24);    
Resultado...  Lorem ipsum habitant  

Devuelve los 26 caracteres de nuestro contenido, se dio un límite de 30 caracteres, solo se necesitan 26 caracteres. 
Ejemplo..  echo get_excerpt(30);    
Resultado...  Lorem ipsum habitant morbi
*/

Esta función se puede usar múltiples veces en los archivos del tema, cada una con diferentes límites de caracteres especificados.

Esta función tiene la capacidad de obtener un extracto de:

  • the_content
  • the_excerpt

Por ejemplo, si tienes publicaciones que contienen texto en el cuadro the_excerpt del editor de publicaciones, pero deseas obtener un extracto de the_content para un caso de uso especial, harías lo siguiente:

get_excerpt(140, 'the_content'); //el extracto se obtiene de get_the_content

Esto le indica a la función que deseas los primeros 140 caracteres de the_content, independientemente de si hay un extracto configurado en el cuadro the_excerpt.

get_excerpt(140); //el extracto se obtiene de get_the_excerpt

Esto le indica a la función que deseas los primeros 140 caracteres de the_excerpt primero y, si no existe un extracto, se usará the_content como alternativa.

La función se puede mejorar para hacerla más eficiente o incorporarse con el uso de filtros de WordPress tanto para the_content como para the_excerpt, o simplemente usarse tal cual en situaciones donde no existe una alternativa adecuada incorporada en la API de WordPress.

30 oct 2012 10:36:23
Comentarios

¡Hola! Gracias a todos por las respuestas proporcionadas. Me gustaría preguntar, ¿cómo hacer que funcione con ... en lugar de [...] al final del extracto?

Jornes Jornes
2 nov 2012 07:24:05

La última línea, $excerpt = $excerpt.'... <a href="'.get_permalink($post->ID).'">más</a>';, es lo que puedes usar para definir tu enlace "leer más" por así decirlo. Puedes ver que añade puntos suspensivos, pero puedes agregar lo que prefieras.

Adam Adam
2 nov 2012 07:36:43

@Jornes puede que llegue 6 años tarde, pero aquí está el código HTML para los puntos suspensivos &hellip;

AlbertSamuel AlbertSamuel
20 jul 2018 10:26:41

@AlbertSamuel Gracias por la respuesta. :)

Jornes Jornes
10 may 2019 09:42:46
4
22

agrega estas líneas en el archivo function.php

function custom_excerpt_length( $length ) {
        return 20;
    }
    add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
30 oct 2012 07:10:18
Comentarios

Esto limita el número de palabras a 20, no los caracteres.

Ionut Necula Ionut Necula
7 dic 2016 17:48:51

¿Por qué hemos añadido el número 999 aquí?

Navnish Bhardwaj Navnish Bhardwaj
11 abr 2018 10:49:03

@NavnishBhardwaj 999 es la prioridad para cargar el filtro. Consulta aquí para más detalles. https://developer.wordpress.org/reference/functions/add_filter/

Annapurna Annapurna
18 abr 2018 09:33:59

@dipali ¿Configurar la longitud del extracto ayudará a reducir el tamaño de la base de datos?

Anand Somani Anand Somani
22 nov 2022 00:12:28