Manchmal erstellen wir Themes vom Typ “News-Aggregator”, bei denen ein Beitrag keinen eigenen Inhalt hat, sondern nur auf einen externen Artikel verlinkt. Oder wir möchten, dass das erste Bild im Inhalt automatisch zum “Featured Image” wird, wenn der Redakteur vergisst, es zu setzen.
In beiden Fällen müssen wir den Beitragsinhalt (the_content) “scannen” und den ersten <a>- oder <img>-Tag daraus extrahieren.
Methode: DOMDocument-Klasse
Viele Entwickler verwenden dafür reguläre Ausdrücke (Regex), aber das Parsen von HTML mit Regex ist schlechte Praxis. Es ist besser, die in PHP eingebaute DOMDocument-Klasse zu verwenden.
Hier ist eine fertige Funktion, die Sie in functions.php einfügen können:
function get_first_link_url( $content ) {
// Wenn Inhalt leer ist, false zurückgeben
if ( empty( $content ) ) return false;
$doc = new DOMDocument();
// HTML5-Fehler unterdrücken (DOMDocument ist alt und beschwert sich manchmal über <section> usw.)
libxml_use_internal_errors(true);
// HTML laden (mit UTF-8-Hack)
$doc->loadHTML( mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8') );
$links = $doc->getElementsByTagName('a');
if ( $links->length > 0 ) {
// href des ersten Links zurückgeben
return $links->item(0)->getAttribute('href');
}
return false;
}
Verwendung in der Schleife
$link = get_first_link_url( get_the_content() );
if ( $link ) {
echo '<a href="' . esc_url($link) . '" class="read-more-external">Original lesen</a>';
}
Diese Lösung ist solide, sicher und behandelt Fehler in der HTML-Struktur besser als jeder Regex.


