Pegamos um trabalho aqui em que precisava gerar uma URL de feed personalizada com posts completos, e os posts que retornam nesse feed não poderiam ter estilos, títulos… no texto em si.
Como o cliente usa bastante customização no post criado no WordPress, a solução que encontramos foi fazer a limpa com preg_replace
e strip_tags
, deixando apenas textos com alguns estilos em negrito e itálico, e os links e imagens.
$content = get_the_content();
$content = strip_shortcodes($content);
// Converte entidades HTML para caracteres normais
$content = html_entity_decode($content, ENT_QUOTES | ENT_HTML5, 'UTF-8');
// Remove todas as tags de estilo inline
$content = preg_replace('/style="[^"]*"/i', '', $content);
// Substitui todos os elementos <h1> a <h6> por <b>
$content = preg_replace('#<h[1-6][^>]*>(.*?)<\/h[1-6]>#is', '<b>$1</b>', $content);
// Remove todos os elementos <ul> e <ol> e transforma seu conteúdo em <p>
$content = preg_replace('#<(ul|ol)[^>]*>(.*?)<\/\1>#is', '<p>$2</p>', $content);
// Remove todos os elementos <li> e transforma seu conteúdo em <i>
$content = preg_replace('#<li[^>]*>(.*?)<\/li>#is', '<i>$1</i>', $content);
// Remove todas as tags <span> e <em> e transforma seu conteúdo em <i>
$content = preg_replace('#<(span|em)[^>]*>(.*?)<\/\1>#is', '<i>$2</i>', $content);
// Substitui todos os elementos <strong> por <b>
$content = preg_replace('#<strong[^>]*>(.*?)<\/strong>#is', '<b>$1</b>', $content);
// Alterar múltiplos <b>
$content = preg_replace('#<b><b>(.*?)<\/b><\/b>#is', '<b>$1</b>', $content);
// Alterar múltiplos <i>
$content = preg_replace('#<i><i>(.*?)<\/i><\/i>#is', '<i>$1</i>', $content);
// Remove qualquer tag HTML extra que não seja <p>, <b>, <i>, <img> ou <a>
$content = strip_tags($content, '<p><b><i><img><a>');
// Remove tags <p> vazias
$content = preg_replace('#<p>\s*<\/p>#', '', $content);
// Ajusta o conteúdo das tags <p> para remover atributos desnecessários
$content = preg_replace('#<p[^>]*>(.*?)<\/p>#is', '<p>$1</p>', $content);
// Remove emojis e caracteres especiais
$content = preg_replace('/[^\w\s.,!?<>\-\/&()"\':;]/u', '', $content);
// Remove espaços não quebráveis
$content = str_replace(' ', ' ', $content);
// print
echo $content;