damcheylhendup
  • 0
Новичок

Импорт нескольких RSS-каналов в WordPress и их сортировка по дате

  • 0

Я нашел следующий код для импорта каналов из нескольких каналов и отображения их в wordpress. Но я хочу отсортировать все объединенные фиды по дате и показать только 10. Как мне это сделать?

Спасибо

<?php
  $feed = fetch_feed(array('http://www.site1.com/feed/', 'http://www.site2.com/feed/'));
foreach($feed->get_items() as $item) {
   echo $item->get_title();
}
?>
Share
  1. Взгляните на агрегатор WP RSS.

    • 0
  2. Проверка аргументов

    Основная проблема с вашей попыткой заключается в том, что вы предполагаете, что функция принимает массив аргументов. Дело в том, что это не работает. Внутреннее устройство fetch_feed() Link to source показывает, что это просто оболочка для SimplePie класса, поэтому вам нужно вставлять один URL-адрес один за другим. Взамен вы получаете полностью испеченный SimplePie object .

    Переработанный код

    Итак, ваш код должен быть примерно таким:

    $feeds[] = fetch_feed( 'http://site-a.example.com/feed/' );
    $feeds[] = fetch_feed( 'http://site-b.example.com/feed/' );
    foreach( $feeds as $feed )
    {
        foreach ( $feed->get_items() as $item )
        {
            echo $item->get_title();
        }
    }
    

    Решение

    Самое интересное в этом то, что вы можете (как уже показывает ваш код) затем использовать методы классов. Я не эксперт SimplePie (и я даже не использовал этот класс), но, глядя на источник, кажется, что есть merge_items() метод. Может быть, вы можете использовать этот:

    $simple_pie = new SimplePie;
    $feeds[] = fetch_feed( 'http://site-a.example.com/feed/' );
    $feeds[] = fetch_feed( 'http://site-b.example.com/feed/' );
    $feed_posts = $simple_pie->merge_items( $feeds, 0, 10, 10 );
    

    Теперь merge_items() принимает четыре аргумента.

    • $urls — массив SimplePie объектов (поэтому мы и получили ленту в первую очередь)
    • $start
    • $end
    • $limit

    Внутри метод вызывает get_items() — то же самое, что и вы. И оба метода вызывают метод обратного вызова sort, который сортирует по дате.

    Задача выполнена.

    • 0

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

You must login to add an answer.