web-dev-qa-db-fra.com

placement de wp_error avec fetch_feed

Cela peut sembler très simple, mais je suis plutôt désespéré en ce qui concerne rss et WP. Où devrais-je mettre la if ( is_wp_error( $feed ) ) { dans un code comme celui-ci:

<?php 
                    $rss = fetch_feed('' . $instance["feed_address"] . '');
                    $maxitems = $rss->get_item_quantity($instance["feed_count"]); 
                    $rss_items = $rss->get_items(0, $maxitems); 
                    $title = substr($item['title'],0,55)." ... ";
                ?>

                <ul>
                    <?php if ($maxitems == 0) echo ''; else foreach ( $rss_items as $item ) : ?>
                    <li>
                        <h2><a class="description" href="<?php echo $item->get_permalink(); ?>" target="_blank"><?php echo substr($item->get_title(), 0, 49) . ' ...'; ?> <span class="tip"><?php echo strip_tags(substr($item->get_description(), 0, 215)) . ' ...'; ?> <?php echo ''.$item->get_date('j F Y | g:i a'); ?></span></a></h2>
                    </li>
                    <?php endforeach; ?>
                </ul>

Merci d'avance.

MODIFIER:

J'ai le code ci-dessus dans une page php personnalisée, pas dans les fichiers core. Cela fait-il une différence? Quoi qu'il en soit, j'ai réussi à faire ceci:

<?php 
                        $rss = fetch_feed('' . $instance["feed_address"] . '');
if ( !is_wp_error( $rss ) ) :
                        $maxitems = $rss->get_item_quantity($instance["feed_count"]); 
                        $rss_items = $rss->get_items(0, $maxitems); 
                        $title = substr($item['title'],0,55)." ... ";
endif;
                    ?>

                    <ul>
                        <?php if ($maxitems == 0) echo ''; else foreach ( $rss_items as $item ) : ?>
                        <li>
                            <h2><a class="description" href="<?php echo $item->get_permalink(); ?>" title="<?php echo 'Posted '.$item->get_date('j F Y | g:i a'); ?>" target="_blank"><?php echo substr($item->get_title(), 0, 49) . ' ...'; ?> <span class="tip"><?php echo strip_tags(substr($item->get_description(), 0, 215)) . ' ...'; ?></span></a></h2>
                        </li>
                        <?php endforeach; ?>
                    </ul>

Le point étant if ( !is_wp_error( $rss ) ) :, au moins il charge les flux et tout semble fonctionner, mais est-ce que ça va? L'erreur peut ou non apparaître de temps en temps, donc les tests sont un peu difficiles. Mais avant, lorsque l'erreur se produisait, l'alimentation a arrêté le chargement à cet instant et n'a pas chargé l'autre alimentation (j'en ai deux) après cela non plus. Avec le code que j'ai posté ci-dessus, va-t-il sauter le flux qui reçoit l'erreur et charger l'autre?

Merci.

MODIFIER:

Merci beaucoup, sans le code ci-dessus, l'erreur se produit comme prévu, mais avec elle, le flux est simplement laissé vide et le suivant est chargé comme d'habitude. Tu gères!

1
user4237

Suivez $rss = fetch_feed('' . $instance["feed_address"] . ''); et recherchez la fonction dans wp-includes/feed.php:

/**
 * Build SimplePie object based on RSS or Atom feed from URL.
 *
 * @since 2.8
 *
 * @param string $url URL to retrieve feed
 * @return WP_Error|SimplePie WP_Error object on failure or SimplePie object on success
 */
function fetch_feed($url) {
    require_once (ABSPATH . WPINC . '/class-feed.php');

    $feed = new SimplePie();
    $feed->set_feed_url($url);
    $feed->set_cache_class('WP_Feed_Cache');
    $feed->set_file_class('WP_SimplePie_File');
    $feed->set_cache_duration(apply_filters('wp_feed_cache_transient_lifetime', 43200, $url));
    do_action_ref_array( 'wp_feed_options', array( &$feed, $url ) );
    $feed->init();
    $feed->handle_content_type();

    if ( $feed->error() )
        return new WP_Error('simplepie-error', $feed->error());

    return $feed;
}

Comme vous pouvez le constater, fetch_feed() peut renvoyer un objet WP_Error. Vérifiez donc juste en dessous de l'appel à cette fonction:

$rss = fetch_feed('' . $instance["feed_address"] . '');

if ( is_wp_error( $rss ) )
{
    // do something awesome
}
else
{
    // print your feed items
    // $maxitems = …
}
2
fuxia