{"id":230754,"date":"2022-12-13T15:05:00","date_gmt":"2022-12-13T12:05:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230754"},"modified":"2022-12-13T15:05:29","modified_gmt":"2022-12-13T12:05:29","slug":"como-truncar-texto-facilmente-en-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-truncar-texto-facilmente-en-php\/","title":{"rendered":"C\u00f3mo truncar texto f\u00e1cilmente en PHP"},"content":{"rendered":"\n<p>Si trata a WordPress exclusivamente como una aplicaci\u00f3n de blogs o, incluso en un sentido m\u00e1s liberal, como un sistema de administraci\u00f3n de contenido, es probable que est\u00e9 acostumbrado a usar el editor o el campo de extracto para escribir un adelanto y luego introducir un enlace Leer m\u00e1s<strong>.<\/strong><\/p>\n<h3>WordPress para aplicaciones web (otra vez)<\/h3>\n<p>Para aquellos que han le\u00eddo este sitio por un tiempo, estoy espec\u00edficamente interesado en usar WordPress como base para el desarrollo de aplicaciones web (vea tambi\u00e9n <a href=\"https:\/\/tommcfarlin.com\/web-applications-with-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">this<\/a>, <strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-for-web-application-development\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">this<\/a><\/strong>, <strong><a href=\"https:\/\/tommcfarlin.com\/web-application-foundation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">this<\/a><\/strong> y <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/una-forma-orientada-a-objetos-de-trabajar-con-modelos-y-aplicaciones-web\/\" title=\"this\">this<\/a><\/strong> ).<\/p>\n<p>En el momento de esta publicaci\u00f3n, este es un art\u00edculo que tiene unos seis a\u00f1os.<\/p>\n<p>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.<\/p>\n<h3>Volver al Contenido<\/h3>\n<p>Es decir, la aplicaci\u00f3n funciona as\u00ed:<\/p>\n<ol>\n<li>ponerse en contacto con una API de terceros,<\/li>\n<li>importar datos de la llamada y analizarlos seg\u00fan sea necesario,<\/li>\n<li>escribirlo en la base de datos,<\/li>\n<li>presentar la informaci\u00f3n en el front-end cuando se le solicite.<\/li>\n<\/ol>\n<p>Hay muchas cosas que pueden pasar entre cada uno de los pasos anteriores, pero lo principal que quiero compartir en esta publicaci\u00f3n es una forma efectiva de truncar texto f\u00e1cilmente usando PHP para renderizar en el front-end.<\/p>\n<p>Esto es \u00fatil para proporcionar teasers, enlaces a sitios de terceros y m\u00e1s, todo sin necesidad de escribir o editar contenido manualmente.<\/p>\n<p>Para dar un caso de uso de muestra para la funci\u00f3n que voy a compartir, es \u00fatil tener algunos requisitos. Son arbitrarios para esta publicaci\u00f3n, pero la implementaci\u00f3n debe ser lo suficientemente concreta como para que pueda incluirla en la publicaci\u00f3n sin ning\u00fan problema.<\/p>\n<p>Asumamos:<\/p>\n<ul>\n<li>estamos extrayendo texto de una API de terceros,<\/li>\n<li>los datos se almacenan en alg\u00fan lugar dentro de la base de datos,<\/li>\n<li>los datos son texto sin formato (sin marcado ni ning\u00fan otro tipo de entidades basadas en web en la estructura),<\/li>\n<li>necesitamos una funci\u00f3n que acepte el texto y una longitud para truncar el texto.<\/li>\n<\/ul>\n<p>Dados esos requisitos, podemos configurar una funci\u00f3n 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.<\/p>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/97c336e3e7246c9d5f6d46684ff1e6e9#file-00-truncate-text-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Aqu\u00ed est\u00e1 el c\u00f3digo:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Truncates the specified text to the specified length to the last whole word and\n * adds ellipses to the end of the truncated string.\n * \n * @param string $text The text to truncate.\n * @param int $length The maximum allowed length of the text.\n * @return string The text if it's less than the length of the specified length or the text truncated to the specified length.\n *\/\npublic function truncate($text, $length)\n{\n    if ($length &gt;= strlen($text)) {\n      return $text;\n    }\n\n  return preg_replace(\n        \"\/^(.{1,$length})(s.*|$)\/s\",\n        '1...',\n        $text\n    );\n}<\/code><\/pre>\n<p>Las implementaciones para esto en el contexto de WordPress podr\u00edan provenir de la lectura de datos almacenados en tablas personalizadas, en los metadatos de la publicaci\u00f3n, en la tabla de publicaci\u00f3n o, b\u00e1sicamente, en cualquier lugar donde se almacene texto sin procesar y desee representarlo en el front-end. .<\/p>\n<p>Si hay otro contenido en el texto como HTML u otras entidades, es posible que sea necesario hacer concesiones. Si est\u00e1 en WordPress, hay filtros y otras formas de manejar esos datos antes de truncar el texto, pero eso va m\u00e1s all\u00e1 del punto de truncar f\u00e1cilmente el texto en PHP, \u00bfverdad?<\/p>\n<p>Entonces, al menos, use esto \u00fanicamente para texto y, como m\u00e1ximo, tenga en cuenta otros tipos de contenido en el texto antes de pasarlo a <a href=\"https:\/\/php.net\/manual\/en\/function.preg-replace.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">preg_replace<\/a> y deber\u00eda estar listo para comenzar.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lo principal que quiero compartir en esta publicaci\u00f3n es una forma efectiva de truncar texto f\u00e1cilmente usando PHP para renderizar en el front-end.<\/p>\n","protected":false},"author":1,"featured_media":236152,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,800],"tags":[1172],"class_list":["post-230754","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230754","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=230754"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230754\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/236152"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230754"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230754"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230754"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}