Chronologické zoradenie WordPress článkov s položkami z RSS zdroja
[recyklát] 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();<br>$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); ?> <?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 zobrazujem v článku ale môžete si ho prezrieť.
<div class="wp"> <div style="display:none"><strong>W: <?php echo get_the_date('y-m-j'); echo '-' . get_the_time('H-i'); ?></strong></div> <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <h2 class="nadpis"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it. the_post_thumbnail(); } ?> <div class="entry-meta"> <?php mojatema_posted_on(); ?> </div><!-- .entry-meta --> <div class="entry-content"> <?php the_content( __( 'Pokračovanie', 'mojatema' ) ); ?> <?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Strán:', 'mojatema' ), 'after' => '</div>' ) ); ?> </div><!-- .entry-content --> <div class="entry-utility"> <?php if ( count( get_the_category() ) ) : ?> <span class="cat-links"> <?php printf( __( '<span class="%1$s">Posted in</span> %2$s', 'mojatema' ), 'entry-utility-prep entry-utility-prep-cat-links', get_the_category_list( ', ' ) ); ?> </span> <span class="meta-sep">|</span> <?php endif; ?> <?php $tags_list = get_the_tag_list( '', ', ' ); if ( $tags_list ): ?> <span class="tag-links"> <?php printf( __( '<span class="%1$s">Tagged</span> %2$s', 'mojatema' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list ); ?> </span> <span class="meta-sep">|</span> <?php endif; ?> <span class="comments-link"><?php comments_popup_link( __( 'Okomentovať', 'mojatema' ), __( '1 komentár', 'mojatema' ), __( '% komentárov', 'mojatema' ) ); ?></span> <?php edit_post_link( __( 'Edit', 'mojatema' ), '<span class="meta-sep">|</span> <span class="edit-link">', '</span>' ); ?> </div><!-- .entry-utility --> </div><!-- #post-## --> </div> </div> <?php endforeach; ?>
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é.
Písané v marci 2011, áno viem, že WP má integrované SimplePie.