Hogyan manipuláld az RSS feededet? előnézeti képe

Hogyan manipuláld az RSS feededet?

| Olvasási idő: 3 perc

Az RSS-t manapság egyre kevésbé használjuk, pedig nagyon hasznos: ha például WordPress oldalakról szeretnéd kinyerni a bejegyzéseket, akkor tökéletes megoldás lenne - egészen addig, amíg el nem kezded használni és bele nem futsz a következő problémákba:

  • szeretnél valamilyen egyedi szöveget minden bejegyzés végéhez fűzni,
  • több bejegyzésre van szükséged, mint amit a jelenlegi beállítás alapján a WordPress generál,
  • a bejegyzéshez tartozó egyedi mezőkre van szükséged.

Minden esetben szükségünk lesz egy php fájlra az mu-plugins mappában, így hozzunk létre egyet, mondjuk alter-rss-feed.php néven, és nézzük szépen sorban ezeket az eseteket!

Egyedi szöveg a bejegyzések végére

Ez viszonylag egyszerű lesz: a koncepció itt az, hogy a the_content "esemény" megtörténte esetén elkapjuk a $content változót (ami maga a tartalom), és a végéhez hozzáfűzünk valamilyen szöveget:

php
function content_add_footer($content) {
    if (is_feed()) {
        $content .= 'Ez a bejegyzés eredetileg a ___________ oldalon jelent meg.';
    }
    
    return $content;
}
add_action('the_content', 'content_add_footer');

Mentést követően ezt a szöveget minden bejegyzés szövegének végéhez automatikusan hozzáfűzi a rendszer, de csak a feedekben.

Megjelenített bejegyzések számának növelése

Az RSS feedben megjelenített bejegyzések száma a Beállítások => Olvasás menüpontban beállított értékek alapján alakul. Előfordulhat olyan eset viszont, amikor ennek a megemelése nem ajánlott alapértelmezetten (például nagyon sok bejegyzés van az oldalon, ezért az összes feliratkozott RSS olvasó rászabadítása nagyon leterhelné az oldalt), viszont bizonyos körülmények fennállása esetén azt szeretnénk, ha mégis megjelenne az összes bejegyzésünk. 

php
function unlimited_rss_posts( $option ) {
    if( is_feed() && isset( $_GET['limit'] ) && $_GET['limit'] === 'unlimited' ) {
        return (int) 999999;
    }

    return $option;
}
add_filter( 'option_posts_per_rss', 'unlimited_rss_posts' );

A fenti snippet szintén nem túl bonyolult: feed esetén ha van limit paraméter az URL-en, melynek értéke unlimited (?limit=unlimited), akkor a beállított érték helyett 999999 darab bejegyzés jelenik meg, vagyis nagy eséllyel az összes bejegyzésünk. Innentől kezdve tehát nyugodtan használhatunk egy sima RSS importálót a bejegyzések mozgatására, bármilyen tartalomkezelőt is használnánk.

Egyedi mezők hozzáadása a feedhez

A "baj" az az egyedi mezőkkel, hogy ezeket a WordPress nem csapja hozzá az RSS feedhez, így azokat csak az adatbázisból, "bonyolult" SQL utasításokkal kinyerve tudjuk exportálni - vagy nem? Nem: nézzük az alábbi kódot!

php
function link_in_feed() {
    if (is_feed()) {
        $featured_image = get_post_meta(get_the_ID(), '_yoast_wpseo_opengraph-image', true);

        if ($featured_image) {
            $image_element = '<post_image>';
            $image_element .= $featured_image;
            $image_element .= '</post_image>';

            echo $image_element;
        }
    }
}
add_action( 'rss2_item', 'link_in_feed' );

Ez nem túl szép kód (nem szeretem, ha a markup keveredik PHP-val), de hatékony kód olyan értelemben, hogy elérjük vele a célunkat. Nem tesz mást, mint lekéri a _yoast_wpseo_opengraph-image mező adott bejegyzéshez tartozó értékét, majd e köré "épít" egy tag-et, a kimenete valami ilyesmi lesz:

html
<post_image>https://www.webmenedzser.hu/images/yoast_images/trololo.png</post_image>

Ez a részlet minden bejegyzés elem "adattömbjében" megjelenik, így most már beállíthatjuk az RSS importálónkat, hogy a mezőben található URL-t használja a kép letöltéséhez/beállításához.

(Egy kis magyarázat ehhez: az oldal, ahonnan importálnom kellett volna, nem használ kiemelt képeket, csak a Yoast-ban beállítottakat. Ahhoz, hogy ezekhez az adatokhoz mégis hozzájussak, volt szükségem a fenti kódrészletre. Miután megírtam ezeket, egyszerűen csak át kellett küldenem a megrendelőmnek, egy linkkel az mu-plugins mappás bejegyzésemhez, hogy telepíteni tudja a snippeteket és folyhasson tovább a munka.)

Ez a snippet elsőre nem tűnik olyan hasznosnak, mint például az, amivel 54 eurót tudsz spórolni, de tekints erre inkább úgy, mint egy LEGO kockára: egy nagyobb egész részeként, annak összetevőjeként tud kiválóan hasznosulni.