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ší.
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
include('/cesta-ku-nainstalovanemu-simplepie/simplepie.inc');
$feed1 = new SimplePie(); $feed1->feed_url('http://adresa-ku-rss-zdroju'); $feed1->init(); $feed1->handle_content_type();
$items1 = $feed1->get_items();
$count = count($items1);
$item = array_shift($items1); $datum1 = $item->get_date('y-m-j-H-i');
?>
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
$args = array( 'numberposts' => 10, 'order'=> 'DESC', 'orderby' => 'date' );
$postslist = get_posts( $args );
foreach ($postslist as $post) : setup_postdata($post); ?>
<div>
<?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) { ?>
<div class="delicious">
<div style="display:none"><strong>D: <?php echo $item->get_date('y-m-j-H-i'); ?></strong></div>
<div class="dated"><abbr title="<?php echo $item->get_date('j. M'); ?>"><?php echo $item->get_date('H.i'); ?></abbr></div>
<div class="postd"><a class="previewlink" href="<?php echo $item->get_permalink(); ?>"><?php echo $item->get_title(); ?></a>
<?php echo $item->get_description(); ?></div>
</div>
<?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é.