{"id":231133,"date":"2022-12-13T14:53:00","date_gmt":"2022-12-13T11:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231133"},"modified":"2022-12-13T14:57:30","modified_gmt":"2022-12-13T11:57:30","slug":"como-truncar-facilmente-texto-em-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/como-truncar-facilmente-texto-em-php\/","title":{"rendered":"Como truncar facilmente texto em PHP"},"content":{"rendered":"\n<p>Se voc\u00ea trata o WordPress exclusivamente como um aplicativo de blog ou, mesmo em um sentido mais liberal, um sistema de gerenciamento de conte\u00fado, provavelmente est\u00e1 acostumado a usar o editor ou o campo de trecho para escrever um teaser e introduzir um link Leia mais<strong>.<\/strong><\/p>\n<h3>WordPress para aplicativos da Web (novamente)<\/h3>\n<p>Para aqueles que l\u00eaem este site h\u00e1 algum tempo, estou especificamente interessado em usar o WordPress como base para o desenvolvimento de aplicativos da web (veja tamb\u00e9m <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> e <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/uma-maneira-orientada-a-objetos-de-trabalhar-com-modelos-e-aplicativos-da-web\/\" title=\"this\">this<\/a><\/strong> ).<\/p>\n<p>No momento deste post, este \u00e9 um artigo que tem cerca de seis anos.<\/p>\n<p>Portanto, h\u00e1 momentos em que o conte\u00fado que voc\u00ea renderizar\u00e1 no front-end pode vir de uma fonte de terceiros.<\/p>\n<h3>Voltar para o conte\u00fado<\/h3>\n<p>Ou seja, o aplicativo funciona assim:<\/p>\n<ol>\n<li>entre em contato com uma API de terceiros,<\/li>\n<li>importar dados da chamada e analis\u00e1-los conforme necess\u00e1rio,<\/li>\n<li>grav\u00e1-lo no banco de dados,<\/li>\n<li>renderizar as informa\u00e7\u00f5es no front-end quando solicitado.<\/li>\n<\/ol>\n<p>H\u00e1 muito que pode acontecer entre cada uma das etapas acima, mas a principal coisa que quero compartilhar neste post \u00e9 uma maneira eficaz de truncar texto facilmente usando PHP para renderizar no front-end.<\/p>\n<p>Isso \u00e9 \u00fatil para fornecer teasers, links para sites de terceiros e muito mais, sem a necessidade de escrever ou editar conte\u00fado manualmente.<\/p>\n<p>Para dar um exemplo de caso de uso para a fun\u00e7\u00e3o que vou compartilhar, \u00e9 \u00fatil ter alguns requisitos. Eles s\u00e3o arbitr\u00e1rios para este post, mas a implementa\u00e7\u00e3o deve ser concreta o suficiente para que voc\u00ea possa colocar isso no post sem problemas.<\/p>\n<p>Vamos assumir:<\/p>\n<ul>\n<li>estamos extraindo texto de uma API de terceiros,<\/li>\n<li>os dados s\u00e3o armazenados em algum lugar dentro do banco de dados,<\/li>\n<li>os dados s\u00e3o texto simples (sem marca\u00e7\u00e3o ou qualquer outro tipo de entidade baseada na web na estrutura),<\/li>\n<li>precisamos de uma fun\u00e7\u00e3o que aceite o texto e um comprimento para truncar o texto.<\/li>\n<\/ul>\n<p>Dados esses requisitos, podemos configurar uma fun\u00e7\u00e3o para aceitar texto e um comprimento de argumentos. Se o texto for menor ou igual ao comprimento especificado, n\u00e3o h\u00e1 nada a fazer; caso contr\u00e1rio, podemos truncar o texto para o comprimento especificado e adicionar elipses \u00e0 direita.<\/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\">Aqui est\u00e1 o 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>Implementa\u00e7\u00f5es para isso no contexto do WordPress podem vir da leitura de dados armazenados em tabelas personalizadas, nos metadados do post, na tabela do post ou basicamente em qualquer lugar em que o texto bruto seja armazenado e voc\u00ea queira renderiz\u00e1-lo no front-end .<\/p>\n<p>Caso haja outro conte\u00fado no texto, como HTML ou outras entidades, pode ser necess\u00e1rio fazer concess\u00f5es. Se for no WordPress, existem filtros e outras formas de manipular esses dados antes de truncar o texto, mas isso est\u00e1 al\u00e9m do ponto de truncar facilmente o texto em PHP, certo?<\/p>\n<p>Ent\u00e3o, pelo menos, use isso puramente para texto e, no m\u00e1ximo, fa\u00e7a concess\u00f5es para outros tipos de conte\u00fado no texto antes de pass\u00e1-lo para <a href=\"https:\/\/php.net\/manual\/en\/function.preg-replace.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">preg_replace<\/a> e voc\u00ea deve estar pronto para ir.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A principal coisa que quero compartilhar neste post \u00e9 uma maneira eficaz de truncar facilmente o texto usando PHP para renderizar no 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":[898,722,806],"tags":[1170],"class_list":["post-231133","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-php-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231133"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231133\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236152"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}