
PL
Jak wyciągnąć pierwszy link z treści wpisu (PHP Snippet)
5.00
/5 - (28 głosów
)
Spis treści
Czasami budujemy motyw typu “Agregator newsów”, gdzie wpis nie ma własnej treści, a jedynie linkuje do zewnętrznego artykułu. Albo chcemy, aby pierwszy obrazek w treści automatycznie stawał się “Featured Image”, jeśli redaktor zapomni go ustawić.
W obu przypadkach musimy “przeskanować” treść posta (the_content) i wyłowić z niej pierwszy tag <a> lub <img>.
Metoda: Klasa DOMDocument
Wielu programistów używa do tego Regexów (Wyrażeń Regularnych), ale parsowanie HTML-a Regexem to zła praktyka. Lepiej użyć wbudowanej w PHP klasy DOMDocument.
Oto gotowa funkcja, którą możesz wkleić do functions.php:
function get_first_link_url( $content ) {
// Jeśli treść pusta, zwróć false
if ( empty( $content ) ) return false;
$doc = new DOMDocument();
// Uciszamy błędy HTML5 (DOMDocument jest stary i czasem narzeka na <section> itp.)
libxml_use_internal_errors(true);
// Ładujemy HTML (z hackiem na UTF-8)
$doc->loadHTML( mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8') );
$links = $doc->getElementsByTagName('a');
if ( $links->length > 0 ) {
// Zwracamy href pierwszego linku
return $links->item(0)->getAttribute('href');
}
return false;
}
Użycie w pętli
$link = get_first_link_url( get_the_content() );
if ( $link ) {
echo '<a href="' . esc_url($link) . '" class="read-more-external">Czytaj oryginał</a>';
}
To rozwiązanie jest solidne, bezpieczne i radzi sobie z błędami w strukturze HTML lepiej niż jakikolwiek Regex.