Obține toate postările în RSS
Mă întreb cum/dacă pot accesa mai multe posturi decât cele mai recente X posturi definite în setările WordPress. Am văzut plugin-uri care migrează tot conținutul blogului prin RSS, dar nu am investigat metodele lor.
Practic, administrez câteva sute de bloguri WordPress și construiesc un generator de newsletter pentru clienții mei. Ei doresc să poată selecta câteva posturi și să aibă extrasele afișate în corpul newsletter-ului. Site-urile sunt răspândite pe mai multe servere, iar generatorul de newsletter este construit peste CRM-ul nostru, astfel încât interogările directe în baza de date ar fi dificile. RSS ar fi cea mai curată soluție, dar nu pot să-mi dau seama cum să accesez mai mult de 10 posturi odată (când 10 este setat în panoul de administrare).
Aveți idei?
O modalitate de a obține articolele tale este să apelezi diferitele pagini ale fluxului RSS în generatorul de buletine informative. Este o abordare sigură care nu necesită actualizarea diverselor instalări WordPress:
siteultau.com/feed -> obții ultimele 10 articole
siteultau.com/feed/?paged=2 -> obții următoarele 10 articole
Și așa mai departe.

Codex oferă un fragment de cod exemplu despre cum să utilizezi filtrul post_limits
pentru a suprascrie cantitatea setată în administrare pentru flux.
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

Aceasta poate fi o opțiune, dar speram să evit necesitatea de a modifica codul temei pe peste 700 de site-uri.

Deci, asta am făcut în final. Site-urile mele sunt distribuite pe câteva instalări WordPress-Mu, deci nu sunt literalmente sute de instanțe diferite de WordPress pe sute de servere. Problema era că aveam nevoie de această funcționalitate doar pe unele dintre site-urile din fiecare instalare Mu. Așa că am scris un plugin care face asta, am scris un script care a actualizat baza de date pentru a activa acel plugin pe site-urile de care aveam nevoie. Gata. Mulțumesc pentru ajutor.

Din păcate, ceea ce încerci să faci este, în general, dezaprobat în majoritatea comunităților. Ceea ce aud că ceri este:
- O modalitate de a prelua de la distanță mai multe postări decât numărul implicit (postări recente)
- Posibil să preiei toate postările publicate pentru un site
- Fără a avea nicio interacțiune directă cu site-ul în sine (folosind RSS)
Aceasta este o practică folosită în mod obișnuit pentru a extrage conținut de pe bloguri și a-l republica fără permisiunea autorului original. De aceea spun că este, în general, dezaprobată. Majoritatea autorilor de bloguri investesc mult timp și energie în dezvoltarea de conținut de calitate, așa că a face ușor pentru o terță parte să profite de munca lor pentru a adăuga credit SEO propriului site este... ei bine... lipsit de scrupule.
Cu toate acestea, voi presupune pentru moment că ai motive legitime pentru a extrage conținut de la peste 700 de site-uri. În acest caz, aș recomanda o metodă programatică separată - nu RSS. Dacă ai date de autentificare legitime pentru toate aceste site-uri (adică sunt site-urile tale și nu ale altcuiva), poți folosi caracteristicile încorporate ale WordPress XML-RPC pentru a prelua conținutul.
Folosește biblioteca încorporată XML-RPC pentru a trimite o cerere către metaWeblog.getRecentPosts
specificând ID-ul blogului (de obicei 0 pentru site-uri simple, dar poate fi diferit în cazul multi-site), numele tău de utilizator WordPress, parola ta WordPress și numărul de postări de preluat (setează această valoare la -1 pentru a le primi pe toate).
Celălalt site va răspunde cu un fișier XML (destul de mare) care conține conținutul pe care îl poți folosi după cum dorești. Toate acestea se pot întâmpla în fundal, iar cererea metaWeblog.getRecentPosts
îți va oferi mult mai multe informații decât un flux RSS (inclusiv câmpuri personalizate, care ar putea fi importante pentru tine).

Deși nu sunt "toate articolele", aș argumenta că un parametru limit
este mult mai util.
Aș recomanda filtrarea directă a opțiunii "posts_per_rss" astfel:
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;
}
Feed-ul ar putea fi accesat apoi astfel: http://example.org/category/acme/feed/?limit=999

Dacă îmi amintesc corect, trecerea valorii -1 ca număr de postări are același efect. Nu sunt complet sigur cum este inclusă în URL, totuși.
Ca o observație laterală, dacă chiar dorești să ai peste 700 de site-uri, ia în considerare să configurezi un cron care să facă update prin svn sau să facă pull prin git dintr-o ramură stabilă, dintr-un repository privat zilnic... Combinat cu un apel HTTP zilnic către wp-admin/upgrade.php. Acest lucru te va scuti de multe probleme la actualizarea sau ajustarea site-urilor tale - deoarece totul se va face automat.
