Cómo truncar texto fácilmente en PHP
Si trata a WordPress exclusivamente como una aplicación de blogs o, incluso en un sentido más liberal, como un sistema de administración de contenido, es probable que esté acostumbrado a usar el editor o el campo de extracto para escribir un adelanto y luego introducir un enlace Leer más.
WordPress para aplicaciones web (otra vez)
Para aquellos que han leído este sitio por un tiempo, estoy específicamente interesado en usar WordPress como base para el desarrollo de aplicaciones web (vea también this, this, this y this ).
En el momento de esta publicación, este es un artículo que tiene unos seis años.
Por lo tanto, hay ocasiones en las que el contenido que va a representar en el front-end puede provenir de una fuente de terceros.
Volver al Contenido
Es decir, la aplicación funciona así:
- ponerse en contacto con una API de terceros,
- importar datos de la llamada y analizarlos según sea necesario,
- escribirlo en la base de datos,
- presentar la información en el front-end cuando se le solicite.
Hay muchas cosas que pueden pasar entre cada uno de los pasos anteriores, pero lo principal que quiero compartir en esta publicación es una forma efectiva de truncar texto fácilmente usando PHP para renderizar en el front-end.
Esto es útil para proporcionar teasers, enlaces a sitios de terceros y más, todo sin necesidad de escribir o editar contenido manualmente.
Para dar un caso de uso de muestra para la función que voy a compartir, es útil tener algunos requisitos. Son arbitrarios para esta publicación, pero la implementación debe ser lo suficientemente concreta como para que pueda incluirla en la publicación sin ningún problema.
Asumamos:
- estamos extrayendo texto de una API de terceros,
- los datos se almacenan en algún lugar dentro de la base de datos,
- los datos son texto sin formato (sin marcado ni ningún otro tipo de entidades basadas en web en la estructura),
- necesitamos una función que acepte el texto y una longitud para truncar el texto.
Dados esos requisitos, podemos configurar una función para aceptar texto y una longitud de argumentos. Si el texto es menor o igual a la longitud especificada, no hay nada que hacer; de lo contrario, podemos truncar el texto a la longitud especificada y agregar puntos suspensivos al final.
<?php
/**
* Truncates the specified text to the specified length to the last whole word and
* adds ellipses to the end of the truncated string.
*
* @param string $text The text to truncate.
* @param int $length The maximum allowed length of the text.
* @return string The text if it's less than the length of the specified length or the text truncated to the specified length.
*/
public function truncate($text, $length)
{
if ($length >= strlen($text)) {
return $text;
}
return preg_replace(
"/^(.{1,$length})(s.*|$)/s",
'1...',
$text
);
}
Las implementaciones para esto en el contexto de WordPress podrían provenir de la lectura de datos almacenados en tablas personalizadas, en los metadatos de la publicación, en la tabla de publicación o, básicamente, en cualquier lugar donde se almacene texto sin procesar y desee representarlo en el front-end. .
Si hay otro contenido en el texto como HTML u otras entidades, es posible que sea necesario hacer concesiones. Si está en WordPress, hay filtros y otras formas de manejar esos datos antes de truncar el texto, pero eso va más allá del punto de truncar fácilmente el texto en PHP, ¿verdad?
Entonces, al menos, use esto únicamente para texto y, como máximo, tenga en cuenta otros tipos de contenido en el texto antes de pasarlo a preg_replace y debería estar listo para comenzar.