Объединение нескольких RSS-каналов с помощью fetch feed
Я использую fetch_feed для отображения rss-канала по теме, над которой я работаю.
Я думаю, что документация подразумевает, что вы можете комбинировать несколько каналов, может ли кто-нибудь подтвердить это, в идеале, на примере.
Заранее спасибо! Джордж
1 answers
Технически вы можете передать несколько URL-адресов каналов в fetch_feed() в виде массива, и он захватит их все сразу. Но возврат - это полный беспорядок, и я лично не мог понять, как его разобрать.
Если никто другой не знает, как это сделать с помощью fetch_feed(), я могу предложить решение с использованием класса SimplePie (который fetch_feed фактически использует в любом случае). Класс SimplePie имеет несколько вспомогательных методов для анализа возвращаемых данных, и они довольно упрощают задачу.
Попробуй что-нибудь например:
// Contains the SimplePie class
require_once (ABSPATH . WPINC . '/class-feed.php');
// New class instance
$feed = new SimplePie();
// You feed URLs
$feed->set_feed_url(array('http://rss.cnn.com/rss/cnn_topstories.rss', 'http://cuteoverload.com/feed/'));
// Do it!
$feed->init();
$feed->handle_content_type();
// Loop the results
foreach($feed->get_items() as $item) {
echo $item->get_title();
echo '<hr/>';
}
Дополнительные методы SimplePie включают get_permalink() и get_description().
Единственным недостатком этого подхода является то, что SimplePie когда-либо будет выведен из WordPress в пользу другого класса, это сломается.
ОБНОВЛЕНИЕ
Как указал @Rarst в комментариях, вам не нужно напрямую обращаться к SimplePie. Вы можете использовать его методы для объекта, который возвращает функция fetch_feed(). Так что ответ намного проще, чем я думал:
$feed = fetch_feed(array('http://rss.cnn.com/rss/cnn_topstories.rss', 'http://cuteoverload.com/feed/'));
// Loop the results
foreach($feed->get_items() as $item) {
echo $item->get_title();
echo '<hr/>';
}