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.

Written by rony