Получить все сообщения в 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.