Получить все сообщения в RSS


10

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

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

Любые идеи?


что вы подразумеваете под "10 задано в админ"?
GCB

Ответы:


5

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

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
Это может быть вариант, но я надеялся избежать необходимости изменять код темы на более чем 700 сайтах.
Бхамрик

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

21

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

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

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

И так далее.


4

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

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

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

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

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

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


2

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

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



0

Если вы перейдете в «Настройки»> «Чтение»> и измените значение в «Каналах синдикации для самых последних» на подходящее вам число, оно будет соответствовать количеству введенных вами каналов.


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.