Chronologické zoradenie WordPress článkov s položkami z RSS zdroja

Nedávno som sa posťažoval, že neviem nájsť riešenie pre chronologicky zoradený výpis článkov z WordPressu spolu s položkami nejakého iného zoznamu, v mojom prípade RSS zdroja. Predstavoval som si to primitívne: počas vypisovania článkov z WordPressu na úvodnej stránke webu budem “na striedačku” vkladať položky z poľa (v ktorom sú položky načítane z RSS) tak, aby boli zoradené od najnovšieho po najstarší.


facebook-logo

Chcel som, aby to vyzeralo tak trochu ako môj profil vo Facebooku, kde je jedna línia príspevkov rôzneho typu pod sebou: statusy, odkazy na videa, články, poznámky, notifikácie o tom, čo sa mi páčilo. Idea sa mi páči, miesto umiestnenia odkazov z nejakého RSS zdroja v postrannom stĺpci webu.

Vysvetľovanie mám za sebou. Ako som už napísal predtým, musel som v index.php (admin WP, editor tém, aktuálna šablóna) nahradiť volanie funkcie vypisujúcej príspevky nejakou svojou slučkou. Tú sa mi podarilo nájsť a publikoval som ju. Práve do nej som doprogramoval načítanie RSS a rozhodovací algoritmus, ktorý urobí to, čo chcem.

Takže do svojho index.php vložím najskôr načítanie RSS zdroja pomocou simplepie:
<?php<br/>include('/cesta-ku-nainstalovanemu-simplepie/simplepie.inc');
<br/>$feed1 = new SimplePie(); $feed1->feed_url('http://adresa-ku-rss-zdroju'); $feed1->init(); $feed1->handle_content_type();<br/><br/>$items1 = $feed1->get_items();<br/>$count = count($items1);<br/>$item = array_shift($items1); $datum1 = $item->get_date('y-m-j-H-i');<br/><br/>?>

Musíte vedieť používať simplepie, musíte vidieť, že v kóde treba zmeniť absolútnu cestu ku tejto knižnici a vidíte, že aj URL daného RSS zdroja. Preverte si, že simplepie tomu zdroju “rozumie”.
Nasleduje spracovanie článkov z databázy WordPressu.
<?php<br/>$args = array( 'numberposts' => 10, 'order'=> 'DESC', 'orderby' => 'date' );<br/>$postslist = get_posts( $args );<br/>foreach ($postslist as $post) : setup_postdata($post); ?> <br/><div><br/><?php $datump = get_the_date('y-m-j') . '-' . get_the_time('H-i'); ?>
Teraz to príde. Vypitval som svoju starú slučku vypisujúcu v postrannom stĺpci odkazy z Delicious.com a integroval do slučky s článkami z WordPressu.
<?php while ($datum1 > $datump) { ?><br/><div class="delicious"><br/><div style="display:none"><strong>D: <?php echo $item->get_date('y-m-j-H-i'); ?></strong></div><br/><div class="dated"><abbr title="<?php echo $item->get_date('j. M'); ?>"><?php echo $item->get_date('H.i'); ?></abbr></div><br/><div class="postd"><a class="previewlink" href="<?php echo $item->get_permalink(); ?>"><?php echo $item->get_title(); ?></a><br/><?php echo $item->get_description(); ?></div><br/></div><br/><?php $item = array_shift($items1); $datum1 = 0; if ($item) { $datum1 = $item->get_date('y-m-j-H-i'); } } ?>
V tejto peknej vnorenej slučke porovnávam dátumy. Tie som si vopred pripravil, aby boli podobne formátované a dali sa rýchlo porovnať.
Pokiaľ teda dátum z RSS zdroja je väčší ako dátum práve “prichádzajúceho” článku z WP, tak zobrazím položku z RSS zdroja. A to všetko robí vyššie uvedený kus kódu o “while” slučke.
Nakoniec to dokončím vypísaním článku a uzavretím wordpress slučky. Tento kód nezobrazujem v článku ale môžete si ho prezrieť.
Táto časť je dosť “ukecaná”, v skutočnosti by stačili aj tri riadky: funkcia na dátum, nadpis, perex.
Možnosti na rozširovanie, na ktoré mi môže prispieť aj komunita WordPressu:

  • integrácia viac ako jedného RSS zdroja; ako na to sakra?
  • vkladanie aj niečoho iného ako RSS, trebárs vypisovanie komentárov ku článkom “ala” facebook,
  • ako “zlúčiť” dva RSS zdroje a potom ich zoradiť chronologicky?
    Prosím Vás trochu sa spamätajte a pokiaľ možno: ukážkové kódy a pokiaľ možno funkčné.

Written by rony