WordPressin feed-generaattori on yksi järjestelmän vanhimmista ja vähiten puhutuista osista. Se on perintö ajalta, jolloin RSS-lukijat, blogilistat ja syndikointi olivat keskeinen osa verkon ekosysteemiä. Vaikka sosiaalinen media on vienyt suuren osan tästä roolista, WordPressin feed-mekanismi on edelleen syvällä ytimessä ja käytössä monissa integraatioissa.
Teknisesti feed ei ole erillinen järjestelmä. Se on vain yksi WordPressin request lifecycle -poluista, joka päättyy XML-vastaukseen HTML:n sijaan.
Miten feed-pyyntö tunnistetaan
Feed voidaan pyytää usealla tavalla:
– /?feed=rss2
– /feed/
– /category/uutiset/feed/
– /tag/tekniikka/feed/
Kun pyyntö saapuu, WordPressin rewrite-järjestelmä:
– tulkitsee URL:n
– tunnistaa feed-parametrin
– asettaa sisäiset query-varit
Tämän jälkeen WordPress siirtyy normaaliin query-prosessiin.
WP_Query feed-tilassa
Kun feed on tunnistettu:
– WordPress rakentaa WP_Query-olion
– hakee postaukset normaalisti tietokannasta
– huomioi kategoriat, tagit ja muut suodattimet
Tässä vaiheessa ei ole vielä XML:ää. Data on samaa, jota käytetään tavallisessa sivunäkymässä.
Tämä on tärkeä havainto: feed käyttää samaa query-arkkitehtuuria kuin frontend. Kaikki suorituskykyongelmat siirtyvät myös feediin.
Feed-templaten valinta
Kun query on valmis, WordPress:
– tarkistaa, että kyseessä on feed
– valitsee sopivan feed-templaten
Tyypillisiä feed-tyyppejä:
– RSS 2.0
– Atom
– RDF
Template valitaan hookien ja feed-tyypin perusteella. Oletuksena käytetään WordPressin core-templaattia, joka löytyy wp-includes/feed-*.php-tiedostoista.
XML:n generointi
Feed-template:
– käy läpi postaukset loopissa
– tulostaa XML-elementit
– käyttää core-funktioita kuten the_title_rss() ja the_content_feed()
Tässä vaiheessa WordPress:
– ei renderöi teemaa
– ei käytä tavallista HTML-templaattia
– tulostaa suoraan XML:ää
XML muodostuu käytännössä PHP-skriptin echo-kutsuista.
the_content ja feed
Yksi yllättävä yksityiskohta: feed käyttää usein the_content-filtteriä. Tämä tarkoittaa, että:
– kaikki content-filtterit ajetaan
– shortcode-logiikka aktivoituu
– lisäosien muokkaukset vaikuttavat feediin
Jos the_content-filtteri on raskas, myös feed-pyyntö hidastuu.
Headerit ja output
Ennen XML:n tulostusta WordPress:
– asettaa Content-Type-headerin
– määrittää charsetin
– varmistaa oikean feed-tyypin
Esimerkiksi:
Jos jokin lisäosa tulostaa ylimääräistä dataa ennen feediä, XML rikkoutuu helposti.
Feedin hookit ja laajennettavuus
WordPress tarjoaa useita hookeja feedin muokkaamiseen:
– do_feed_rss2
– rss2_item
– atom_entry
– the_excerpt_rss
– the_content_feed
Näillä voidaan:
– lisätä elementtejä feediin
– muuttaa sisältöä
– lisätä custom-dataa
Monet lisäosat, kuten podcast- ja uutispluginet, käyttävät näitä hookeja.
Suorituskykyvaikutukset
Koska feed käyttää normaalia WordPress-queryä:
– tietokantakyselyt ovat samat kuin frontendissä
– meta-queryt vaikuttavat suoraan feediin
– object cache auttaa samalla tavalla
Mutta feedillä on yksi erityispiirre:
– se palauttaa usein useita postauksia kerralla
– joskus kymmeniä tai satoja
Tämä voi johtaa:
– suuriin tietokantakyselyihin
– korkeaan muistinkulutukseen
– hitaisiin vasteaikoihin
Välimuisti ja feedit
Feedit ovat ihanteellisia välimuistille, koska:
– ne ovat usein julkisia
– ne muuttuvat harvoin
– sama URL palvelee kaikkia käyttäjiä
Siksi:
– page cache toimii hyvin
– CDN voi cachettaa feedin
– origin-palvelimen kuorma pienenee
Ilman cachea suosittu feed voi aiheuttaa merkittävän kuorman.
Yleiset sudenkuopat
Rikkoutunut XML
Jos:
– lisäosa tulostaa whitespacea
– output buffering toimii väärin
– PHP-varoitus tulostuu feediin
XML muuttuu invalidiksi ja lukijat hylkäävät sen.
Raskaat content-filtterit
Koska the_content ajetaan:
– monimutkaiset shortcode-ketjut
– ulkoiset API-kutsut
– raskaat regex-operaatiot
hidastavat feediä merkittävästi.
Liian suuri postimäärä
Jos feed palauttaa:
– kymmeniä tai satoja postauksia
– täydet sisällöt
muistinkulutus kasvaa nopeasti.
Yhteenveto
WordPressin feed-generaattori ei ole erillinen järjestelmä, vaan osa normaalia request lifecyclea. Se:
– tunnistetaan rewrite-säännöillä
– käyttää WP_Queryä
– renderöi XML:n feed-templatella
– ajaa samat filtterit kuin frontend
Tämä tekee siitä:
– joustavan
– laajennettavan
– mutta alttiin samoille suorituskyky- ja yhteensopivuusongelmille kuin muu WordPress
Feed on teknisesti vain yksi näkymä samaan dataan. Se ei ole erityinen tai kevyt reitti, vaan sama kone eri ulostulolla. Ja kuten kaikissa koneissa, pienet arkkitehtuuripäätökset voivat muuttua suuriksi seurauksiksi, kun data ja liikenne kasvavat.
