Miniatura wpisu w kanale RSS

Na jednej ze stron zechciałem wyświetlać ostatnie wpisy z bloga. Jako najprostszy sposób pobierania danych wybrałem oczywiście kanał RSS, który WordPress ma w standardzie. W standardzie nie posiada jednak miniatur wpisów, które w moim przypadku były niezbędne. Jak rozwiązać ten problem?

Przeszukując bazę pluginów do WordPressa znalazłem wiele gotowych rozwiązań, które rozbudowują treść i strukturę kanału RSS. Pozwalają także dodawać miniatury, jednak nie w takiej formie, w jakiej bym chciał. Najczęściej są to rozwiązania przyklejające obrazek jako znacznik <img> do treści posta lub też dodające gotowe tagi xml, np:

 

<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://adresbloga.pl/wp-content/uploads/2015/01/adresminiatury.jpg" width="150" height="150"/>

Ja tymczasem potrzebowałem czystego adresu URL obrazka, zamkniętego np. w znaczniku <image></image>. W tym celu napisałem prostą funkcję:

function rss_get_image(){
  global $post; 
  if (function_exists ('has_post_thumbnail') && has_post_thumbnail($post->ID)) {
    $image_id = get_post_thumbnail_id( $post->ID );
    $image_url = wp_get_attachment_url($image_id);
  }
  return ($image_url);
}

Niestety sama funkcja nie wystarczy, bo trzeba ją jeszcze wprowadzić do kanału RSS. Choć staram się nigdy nie edytować plików WordPressa, to w tym przypadku uznałem, że nie mam wyjścia. Musiałem umieścić funkcję w pliku /wp-includes/feed-rss2.php. Wewnątrz znacznika <item></item> umieściłem swój upragniony obrazek:

<image><?php echo rss_get_image(); ?></image>

W ten sposób mamy sam URL obrazka w jednym tagu .

3 komentarze

  1. Dzięki. Wiedziałem, że nie pierwszy mam taką potrzebę i dziwiłem się, że nie mogę znaleźć gotowego rozwiązania 🙂

    Reply
    • W koncu po latach wordpress 4.2 doczeka się domyślnie aktywnych przyjaznych linków… to może w niedalekiej przyszłości i o ikonę wpisu w rss się wzbogaci 🙂

      Reply

Submit a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *