Noen ganger bygger vi “Nyhetsaggregator”-temaer, der et innlegg ikke har sitt eget innhold, men bare lenker til en ekstern artikkel. Eller vi vil at det første bildet i innholdet automatisk skal bli “Fremhevet bilde” hvis redaktøren glemmer å sette det.
I begge tilfeller må vi “skanne” innleggsinnholdet (the_content) og trekke ut den første <a>- eller <img>-taggen fra det.
Metode: Domdocument-klassen
Mange utviklere bruker regulære uttrykk (Regex) til dette, men parsing av HTML med Regex er dårlig praksis. Det er bedre å bruke PHPs innebygde DOMDocument-klasse.
Her er en ferdig funksjon du kan lime inn i functions.php:
function get_first_link_url( $content ) {
// Hvis innholdet er tomt, returner false
if ( empty( $content ) ) return false;
$doc = new DOMDocument();
// Undertrykk HTML5-feil (DOMDocument er gammel og klager noen ganger på <section> osv.)
libxml_use_internal_errors(true);
// Last HTML (med UTF-8-hack)
$doc->loadHTML( mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8') );
$links = $doc->getElementsByTagName('a');
if ( $links->length > 0 ) {
// Returner href til den første lenken
return $links->item(0)->getAttribute('href');
}
return false;
}
Bruk i løkken
$link = get_first_link_url( get_the_content() );
if ( $link ) {
echo '<a href="' . esc_url($link) . '" class="read-more-external">Les original</a>';
}
Denne løsningen er solid, sikker og håndterer feil i HTML-strukturen bedre enn noen Regex.


