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]<?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’);
?>[/php]

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]<?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’); ?>[/php]

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]<?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’); } }
?>[/php]

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ť.

[php]
<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; ?>
[/php]

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.

Môže sa Vám ešte páčiť...