Как вытащить медиа: миниатюру из RSS-канала с помощью SimplePie и fetch_feed()?

У меня есть две отдельные установки WordPress - я позвоню на один сайт A, а другой на сайт B. Я хочу перенести канал с сайта B на сайт A, используя fetch_feed(), Я также хочу включить уменьшенное изображение. WordPress по умолчанию не включает миниатюру в фид, поэтому я создал собственный фид, который включает следующее:

<?php if(get_the_post_thumbnail()): ?>
<media:thumbnail url="<?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'feed-thumb'); echo $image[0]; ?>" />
<media:content url="<?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'feed-thumb'); echo $image[0]; ?>" medium="image" />

Кажется, это работает, и каждый из них возвращает что-то вроде следующего:

<media:thumbnail url="http://www.site-b.com/wp-content/uploads/2013/01/thumbnail.jpg" />
<media:content url="http://www.site-b.com/wp-content/uploads/2013/01/thumbnail.jpg" medium="image" />

Теперь я возвращаюсь на сайт А и пытаюсь получить этот канал, используя fetch_feed():

<?php // Get RSS Feed(s)
                include_once(ABSPATH . WPINC . '/feed.php');

                // Get a SimplePie feed object from the specified feed source.
                $rss = fetch_feed('http://www.site-b.com/custom-feed/');
                if (!is_wp_error( $rss ) ) : // Checks that the object is created correctly 
                    // Figure out how many total items there are, but limit it to 2. 
                    $maxitems = $rss->get_item_quantity(2); 

                    // Build an array of all the items, starting with element 0 (first element).
                    $rss_items = $rss->get_items(0, $maxitems); 
                endif;

                if ($maxitems == 0) echo 'No items.';
                    else
                    // Loop through each feed item.
                    foreach ( $rss_items as $item ) : 

                            if ($enclosure = $item->get_enclosure())
                            {
                                echo '<img src="' . $enclosure->get_thumbnail() . '" class="feed-thumb" />';
                            }
                            ?>

                        <p><?php echo esc_html( $item->get_description() ); ?>
                        <a href="<?php echo esc_url( $item->get_permalink() ); ?>"
                        title="<?php echo esc_html( $item->get_title() ); ?>">Continue Reading</a></p>

                    <?php endforeach; ?>

Все работает, кроме миниатюры. Заголовок, постоянная ссылка и описание возвращаются правильно. Тем не менее, миниатюра не возвращает URL. Итак, мне осталось только:

<img src="" class="feed-thumb" />

Как я могу вернуть URL для миниатюрного изображения?

Спасибо за чтение этого далеко.

2 ответа

Решение

Ааа, после того как я выдернул свои волосы, это потому, что я забыл включить пространство имен Media RSS в свой пользовательский канал. Я просто включил это в свое открытие <rss> тег и это сработало:

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">

Есть еще один способ решить эту проблему. У меня была похожая проблема. Я понял, что не использовал media: thumbnail, а только media: content. Чтобы получить ссылку, я использовал следующий код:

echo '<img src="' . $enclosure->get_link() . '" class="feed-thumb" />';

Вместо вызова миниатюры я вызвал ссылку, и ситуация разрешилась.

Другие вопросы по тегам