Blog
Blog sobre programación y diseño en la web
Cómo limitar el número de palabras en the_content o the_excerpt en Wordpress
Translate this page into EnglishVamos a ver una forma de limitar el número de palabras del contenido o del resumen de un artículo en Wordpress sólo cuando y donde queramos y sin alterar el código principal ni el número de caracteres en el administrador, lo cual puede ser muy útil para que todo se mantenga tal cual al actualizar nuestra versión de Wordpress o a la hora de mostrar los resúmenes en la página principal del blog.
Esto lo he hecho en la portada de Emenia, que como podéis ver es una página en principio estática, donde no se publican los artículos del blog (este se hace seleccionando en el administrador de Wordpress dentro de Opciones/Lectura La página inicial mostrará una página estática). Si os fijáis veréis que en su lado derecho hay un cuadro con los dos últimos artículos del blog. Necesitaba incluír un número muy limitado de palabras en este resumen, pero sin afectar al número de caracteres que por defecto muestra Wordpress cuando escribimos the_excerpt() – 55 caracteres – que quería que funcionara con normalidad en el blog.
Voy a dividir el código en varias partes para explicarlo con más facilidad y al final incluiré el código completo.
Las primeras líneas lo que hacen es limitar el número de entradas que se van a mostrar a dos. Por supuesto que cambiando el número de ‘numberposts=2′ podremos publicar más (o menos) entradas. Se crea un bucle foreach que lo envuelve todo y que finaliza con endforeach;
1 2 3 4 5 6 7 8 9 10 11 | <ul> <?php $recentposts = get_posts('numberposts=2'); foreach ($recentposts as $post) : setup_postdata($post); ?> Aquí escribiremos el código que se aplicará a cada artículo <?php endforeach; ?> </ul> |
A continuación con the_title() obtendremos el título del artículo en forma de enlace al artículo completo gracias a the_permalink(), que escribe en enlace al artículo.
Y ahora necesitamos obtener el contenido del artículo y almacenarlo en una variable. No podemos usar the_content() o the_excerpt() porque ejecutan el script y muestran el contenido completo, pero sí podemos utilizar get_the content() o get_the_excerpt(). Lo almacenaremos en una variable que llamaremos $textoLargo. También vamos a almacenar el enlace correspondiente a cada artículo en una variable. Eso lo logramos con get_permalink($post->ID)
Vamos a verlo:
1 2 3 4 | <p><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></p> <?php $textoLargo= get_the_excerpt(); $permalink = get_permalink($post->ID); |
Ahora viene quizás la parte más compleja. Necesitamos crear una función que haga todo el trabajo cada vez que necesitemos reducir el tamaño del texto incluído en la variable $textoLargo.
Para ello vamos a utilizar PHP. Abrimos el archivo functions.php que se encuentra normalmente en el directorio de nuestro template, junto a todos los demás archivos, y escribimos:
1 2 3 4 5 6 7 8 | function limitar_palabras( $str, $num, $append_str='' ) { $palabras = preg_split( '/[\s]+/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE ); if( isset($palabras[$num][1]) ){ $str = substr( $str, 0, $palabras[$num][1] ) . $append_str; } unset( $palabras, $num ); return trim( $str ); } |
Esta función es la que va a realizar todo el trabajo. Como vemos acepta tres parámetros: $str que es la cadena de texto que vamos a acortar, $num que es el número de palabras que se mostrarán y por último cualquier cadena de texto o código que queramos unir al nuevo texto ya cortado (por defecto este parámetro será una cadena de texto vacía, de ahí las dos comillas en $append_str=”). Dentro ya de la función utilizamos preg_split que lo que hace es cortar una cadena de texto utilizando una regular expression. Podemos ver la descripción y uso de preg_split en el manual de funciones de PHP.
Seguimos donde lo habíamos dejado más arriba una vez hemos guardado functions.php con la nueva función incorporada.
Ahora vamos a crear una nueva variable que llamaremos $textoCorto que almacenará el texto ya cortado y que invocará la función limitar_palabras pasando estos parámetros:
El texto a cortar (que está en la variable $textoLargo), el número de caracteres del nuevo texto (en este caso 13) y el texto adicional que vamos a incluir tras el texto cortado (en este caso unos corchetes con dos puntos en su interior para mostrar que hay más texto y la palabra Más con el enlace al artículo, que habíamos guardado en la variable $permalink). Para finalizar mostramos ya en la página el texto ya cortado con un echo:
1 2 3 | $textoCorto=limitar_palabras($textoLargo, 13,'[...] <a href="'. $permalink . '" title="Ir al artículo">Más»</a>' ); echo '<p>' . $textoCorto . '</p>'; ?> |
¡Y eso sería todo! Ya tendríamos los dos últimos artículos con su título y en enlace al artículo, con su contenido limitado a 13 palabras y con un Más>> también enlazado al artículo completo.
Este sería el código completo:
1 2 3 4 5 6 7 | <p><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></p> <?php $textoLargo= get_the_excerpt(); $permalink = get_permalink($post->ID); $textoCorto=limitar_palabras($textoLargo, 13,'[...] <a href=" '. $permalink . ' " title="Ir al artículo">Más»</a>' ); echo '<p>' . $textoCorto . '</p>'; ?> |
Más lecturas recomendadas:
CJD Blog – Muestra cómo crear resúmenes personalizados creando una función en Wordpress, una solución más pura de Wordpress, aunque algo más compleja: http://www.chrisjdavis.org/custom-excerpts-for-wordpress
4 Comentarios a “Cómo limitar el número de palabras en the_content o the_excerpt en Wordpress”:
Escribir un comentario
XHTML: Puedes usar estos códigos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">



Primero ke nada deberias decir donde se hacen todos estos cambios, no te parece…
Hola 123,
Este código lo podemos incluir en cualquier página generada con Wordpress. El objetivo es incluir los últimos artículos de un blog con una serie limitada de palabras inferior a la que tenemos definida en el administrador de Wordpress para el Extracto.
Acabo de reducir la cantidad de palabras de 55 a 15, tan solo tocando el numero en la variable del excerpt en el archivo “formatting.php” que esta dentro de “wp-includes”…
ahora intento averiguar cómo cambiar el tipico [...] por un enlace tipo “seguir leyendo…”
si no, tu idea me parece bastante buena, probaré a ver…
zenkiu
Gracias Jose Antonio, lo malo de retocar el archivo formatting.php es cuando tengas que actualizar tu versión de wordpress. Tendrás que volver a retocar el archivo tras cada actualización.