Получение всех записей через RSS
Я хочу узнать, как/возможно ли получить доступ к большему количеству записей, чем определено в настройках WordPress. Я видел плагины, которые мигрируют весь контент блога через RSS, но пока не разбирался с их методами.
По сути, я управляю несколькими сотнями WordPress блогов и разрабатываю генератор рассылок для моих клиентов. Они хотят иметь возможность выбирать несколько записей, чтобы их отрывки появлялись в теле рассылки. Сайты распределены по нескольким серверам, а генератор рассылки создается поверх нашей CRM, поэтому прямые запросы к базе данных были бы затруднительны. RSS был бы самым чистым решением, но я не могу понять, как получить доступ более чем к 10 записям одновременно (когда в админке установлено значение 10).
Есть какие-нибудь идеи?
Один из способов получить ваши записи — это обращаться к различным страницам RSS-ленты в генераторе рассылки. Это безопасный подход, который не требует обновления различных установок WordPress:
yourwebsite.com/feed -> получить последние 10 записей
yourwebsite.com/feed/?paged=2 -> получить следующие 10 записей
И так далее.

В 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

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

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

К сожалению, то, что вы пытаетесь сделать, обычно не одобряется в большинстве сообществ. Если я правильно понял, вы просите:
- Способ удалённо получить больше, чем стандартное количество (последних записей)
- Возможно, получить все опубликованные записи сайта
- Без какого-либо прямого взаимодействия с самим сайтом (используя RSS)
Это практика, обычно используемая для скрапинга контента с блогов и его повторной публикации без разрешения автора. Вот почему я говорю, что это обычно не одобряется. Большинство авторов блогов тратят много времени и сил на создание отличного контента, поэтому упрощение для третьих лиц использования их тяжёлого труда для добавления SEO-веса на свои сайты... скажем так... неэтично.
Тем не менее, я предположу на момент, что у вас есть законные причины для скрапинга контента с более чем 700 сайтов. В таком случае я бы рекомендовал отдельный программный метод, а не RSS. Если у вас есть законные данные для входа на все эти сайты (то есть это ваши сайты, а не чужие), вы можете использовать встроенные функции WordPress XML-RPC для получения контента.
Используйте встроенную библиотеку XML-RPC для отправки запроса к metaWeblog.getRecentPosts
, указав ID блога (обычно 0 для одиночных сайтов, но может отличаться в мультисайтах), ваше имя пользователя WordPress, ваш пароль WordPress и количество записей для получения (установите -1, чтобы получить их все).
Другой сайт ответит (довольно большим) XML-файлом, содержащим контент, с которым вы можете делать что угодно. Всё это может происходить в фоновом режиме, и запрос metaWeblog.getRecentPosts
даст вам гораздо больше информации, чем RSS-лента (включая пользовательские поля, которые могут быть для вас важны).

Хотя это и не "все записи", я бы сказал, что параметр 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

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