web-dev-qa-db-fra.com

fetch_feed: récupère les entrées dans l'ordre qui apparaît, pas chronologiquement

J'utilise WP function fetch_feed pour récupérer un flux et afficher ses éléments.

    <?php
    /* include the required file */     include_once(ABSPATH . WPINC . '/feed.php');
    /* specify the source feed   */     $rss = fetch_feed('FEED_URL');
    /* checks obj. is created    */     if (!is_wp_error( $rss ) ) :
    /* specify number of items   */     $maxitems = $rss->get_item_quantity(4);
    /* create an array of items  */     $rss_items = $rss->get_items(0, $maxitems);
endif;
    ?>
    <ul>
        <?php if ($maxitems == 0) echo '<li>Content not available.</li>';
    else
        // Loop through each feed item and display each item as a hyperlink.
        foreach ( $rss_items as $item ) : ?>
            <li>
                <a href="<?php echo $item->get_permalink(); ?>" title="<?php echo esc_html( $item->get_title() ); ?>" rel="external"><?php echo esc_html( $item->get_title() ); ?></a>
            </li>
            <?php endforeach; ?>
    </ul>

Si je visite le flux en question avec (par exemple) Firefox, je vois les entrées dans l'ordre d'affichage XML. fetch_feed récupère le plus récent à la place (selon leur tag "publié"). Comment puis-je m'assurer qu'il récupère les éléments en fonction de leur ordre dans le flux XML (et non chronologiquement). Peut-être est-il possible de définir l'ordre avec this ..?

EDIT: J'ai essayé d'ajouter $ feed-> enable_order_by_date (false); mais ça semble casser la fonction ..

2
MultiformeIngegno

Ok, trouvé. J'ai passé des heures à cela mais j'ai réussi à trouver la solution. La commande que je cherchais était $ rss-> enable_order_by_date (false) ;.

Donc, vous devriez définir (pour le bénéfice de la communauté):

    <?php
    /* include the required file */     include_once(ABSPATH . WPINC . '/feed.php');
    /* specify the source feed   */     $rss = fetch_feed('FEED_URL');
    /* disable order by date     */     $rss->enable_order_by_date(false);
    /* checks obj. is created    */     if (!is_wp_error( $rss ) ) :
    /* specify number of items   */     $maxitems = $rss->get_item_quantity(X);
    /* create an array of items  */     $rss_items = $rss->get_items(0, $maxitems);
endif;
    ?>
    <ul>
        <?php if ($maxitems == 0) echo '<li>Content not available.</li>';
    else
        // Loop through each feed item and display each item as a hyperlink.
        foreach ( $rss_items as $item ) : ?>
            <li>
                <a href="<?php echo $item->get_permalink(); ?>" title="<?php echo esc_html( $item->get_title() ); ?>" rel="external"><?php echo esc_html( $item->get_title() ); ?></a>
            </li>
            <?php endforeach; ?>
    </ul>

J'espère que cela t'aides! :)

6
MultiformeIngegno