user
  • 0
Гуру

Размещение wp_error в fetch_feed

  • 0

Это может быть очень просто, но я совершенно безнадежен, когда дело доходит до rss и WP. Где я должен поместить if ( is_wp_error( $feed ) ) { в таком коде:

<?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>

Заранее спасибо.

РЕДАКТИРОВАТЬ:

У меня есть приведенный выше код на пользовательской странице php, а не в основных файлах. Это имеет значение? Во всяком случае, мне удалось сделать это:

<?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>

Дело в том if ( !is_wp_error( $rss ) ) :, что, по крайней мере, он загружает каналы, и все вроде бы работает, но это нормально? Ошибка может появляться или не появляться время от времени, поэтому тестирование немного сложно. Но раньше, когда вылетала ошибка, лента в этот момент останавливала загрузку и не загружала другую ленту (у меня их две) после этого тоже. С кодом, который я разместил выше, он пропустит фид, получивший ошибку, и загрузит другой?

Спасибо.

РЕДАКТИРОВАТЬ:

Большое спасибо, без кода выше ошибка возникает как положено, но с ним фид просто остается пустым и загружается следующий как обычно. Ты жжешь!

Share
  1. Загрузите недопустимый URL-адрес, чтобы проверить его: fetch_feed( 'ftp://example.com');

    • 0
  2. Следуйте $rss = fetch_feed(''. $instance["feed_address"]. ''); и найдите функцию в 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;
    }
    

    Как видите, fetch_feed() может возвращать объект WP_Error. Поэтому проверьте это сразу после вызова этой функции:

    $rss = fetch_feed('' . $instance["feed_address"] . '');
    
    if ( is_wp_error( $rss ) )
    {
        // do something awesome
    }
    else
    {
        // print your feed items
        // $maxitems = …
    }
    
    • 0

Оставить ответ

You must login to add an answer.