Получение всех записей через RSS

1 дек. 2010 г., 18:57:36
Просмотры: 35.6K
Голосов: 12

Я хочу узнать, как/возможно ли получить доступ к большему количеству записей, чем определено в настройках WordPress. Я видел плагины, которые мигрируют весь контент блога через RSS, но пока не разбирался с их методами.

По сути, я управляю несколькими сотнями WordPress блогов и разрабатываю генератор рассылок для моих клиентов. Они хотят иметь возможность выбирать несколько записей, чтобы их отрывки появлялись в теле рассылки. Сайты распределены по нескольким серверам, а генератор рассылки создается поверх нашей CRM, поэтому прямые запросы к базе данных были бы затруднительны. RSS был бы самым чистым решением, но я не могу понять, как получить доступ более чем к 10 записям одновременно (когда в админке установлено значение 10).

Есть какие-нибудь идеи?

1
Комментарии

что вы имеете в виду под "10 установлено в админке"?

gcb gcb
21 апр. 2011 г. 00:37:58
Все ответы на вопрос 7
1
27

Один из способов получить ваши записи — это обращаться к различным страницам RSS-ленты в генераторе рассылки. Это безопасный подход, который не требует обновления различных установок WordPress:

yourwebsite.com/feed -> получить последние 10 записей

yourwebsite.com/feed/?paged=2 -> получить следующие 10 записей

И так далее.

20 янв. 2011 г. 11:52:53
Комментарии

Это! Действительно полезно для множества случаев использования.

Alim Özdemir Alim Özdemir
9 сент. 2022 г. 14:03:16
2

В Codex есть пример сниппета, как использовать фильтр post_limits для переопределения количества записей, установленного в админке для ленты.

if (isset ($query->query_vars['feed']) and ($query->query_vars['feed'] == 'ics')) 
    add_filter('post_limits','__return_empty_string'); 

http://codex.wordpress.org/Function_Reference/query_posts#Usage_Tips

1 дек. 2010 г. 20:37:05
Комментарии

Это может быть вариантом, но я надеялся избежать необходимости изменять код темы на 700+ сайтах.

bhamrick bhamrick
1 дек. 2010 г. 21:35:43

Вот что я в итоге сделал. Мои сайты разбросаны по нескольким установкам WordPress-Mu, так что это не буквально сотни разных экземпляров WordPress на сотнях серверов. Проблема была в том, что мне нужна была эта функциональность только на НЕКОТОРЫХ сайтах в каждой Mu-установке. Поэтому я написал плагин, который это делает, написал скрипт, который обновил базу данных для активации этого плагина на нужных мне сайтах. Готово. Спасибо за помощь.

bhamrick bhamrick
3 дек. 2010 г. 02:46:29
0

К сожалению, то, что вы пытаетесь сделать, обычно не одобряется в большинстве сообществ. Если я правильно понял, вы просите:

  • Способ удалённо получить больше, чем стандартное количество (последних записей)
  • Возможно, получить все опубликованные записи сайта
  • Без какого-либо прямого взаимодействия с самим сайтом (используя RSS)

Это практика, обычно используемая для скрапинга контента с блогов и его повторной публикации без разрешения автора. Вот почему я говорю, что это обычно не одобряется. Большинство авторов блогов тратят много времени и сил на создание отличного контента, поэтому упрощение для третьих лиц использования их тяжёлого труда для добавления SEO-веса на свои сайты... скажем так... неэтично.

Тем не менее, я предположу на момент, что у вас есть законные причины для скрапинга контента с более чем 700 сайтов. В таком случае я бы рекомендовал отдельный программный метод, а не RSS. Если у вас есть законные данные для входа на все эти сайты (то есть это ваши сайты, а не чужие), вы можете использовать встроенные функции WordPress XML-RPC для получения контента.

Используйте встроенную библиотеку XML-RPC для отправки запроса к metaWeblog.getRecentPosts, указав ID блога (обычно 0 для одиночных сайтов, но может отличаться в мультисайтах), ваше имя пользователя WordPress, ваш пароль WordPress и количество записей для получения (установите -1, чтобы получить их все).

Другой сайт ответит (довольно большим) XML-файлом, содержащим контент, с которым вы можете делать что угодно. Всё это может происходить в фоновом режиме, и запрос metaWeblog.getRecentPosts даст вам гораздо больше информации, чем RSS-лента (включая пользовательские поля, которые могут быть для вас важны).

3 дек. 2010 г. 00:25:12
0

Хотя это и не "все записи", я бы сказал, что параметр limit гораздо полезнее.

Я рекомендую напрямую фильтровать опцию "posts_per_rss" следующим образом:

add_filter( 'option_posts_per_rss', 'my_posts_per_rss' );
function my_posts_per_rss( $option ) {
    if( isset( $_GET['limit'] ) ) {
        return (int) $_GET['limit'] ?: $option;
    }
    return $option;
}

Тогда фид можно будет получить так: http://example.org/category/acme/feed/?limit=999

13 мар. 2019 г. 19:28:11
0

Если мне не изменяет память, передача -1 в качестве количества постов даёт тот же эффект. Не совсем уверен, как это обрабатывается в URL.

Кстати, если у вас действительно более 700 сайтов, подумайте о настройке cron-задачи для автоматического обновления через svn или git pull из стабильной ветки приватного репозитория на ежедневной основе... В сочетании с ежедневным HTTP-запросом к wp-admin/upgrade.php. Это избавит вас от множества проблем при обновлении или настройке сайтов — всё будет происходить автоматически.

1 дек. 2010 г. 22:49:47
0

вы можете использовать RSS-агрегатор, например FeedWordpress

2 дек. 2010 г. 21:21:17
0

Если перейти в Настройки > Чтение > и изменить значение в поле "Ленты синдикации показывают последние" на подходящее вам число, система будет отображать до указанного количества записей в ленте.

16 февр. 2012 г. 00:30:40