Às vezes construímos temas do tipo “Agregador de Notícias”, onde um post não tem o seu próprio conteúdo, mas apenas liga a um artigo externo. Ou queremos que a primeira imagem no conteúdo se torne automaticamente a “Imagem Destacada” se o editor se esquecer de a definir.
Em ambos os casos, precisamos “escanear” o conteúdo do post (the_content) e extrair a primeira tag <a> ou <img> dele.
Método: Classe domdocument
Muitos programadores usam Expressões Regulares (Regex) para isso, mas fazer parsing de HTML com Regex é má prática. É melhor usar a classe DOMDocument integrada no PHP.
Aqui está uma função pronta que pode colar em functions.php:
function get_first_link_url( $content ) {
// Se o conteúdo estiver vazio, retornar false
if ( empty( $content ) ) return false;
$doc = new DOMDocument();
// Suprimir erros HTML5 (DOMDocument é antigo e às vezes reclama de <section> etc.)
libxml_use_internal_errors(true);
// Carregar HTML (com hack UTF-8)
$doc->loadHTML( mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8') );
$links = $doc->getElementsByTagName('a');
if ( $links->length > 0 ) {
// Retornar href do primeiro link
return $links->item(0)->getAttribute('href');
}
return false;
}
Uso no loop
$link = get_first_link_url( get_the_content() );
if ( $link ) {
echo '<a href="' . esc_url($link) . '" class="read-more-external">Ler original</a>';
}
Esta solução é sólida, segura e lida com erros na estrutura HTML melhor do que qualquer Regex.


