Hur man skapar en RSS-syndikatwebbplats med WordPress

I denna handledning delar jag om hur man skapar en syndikator eller ping-plats, med hjälp av WordPress-funktionalitet. Den här funktionen kan vara användbar för ägare som vill skapa en artikelkatalog som gör att deras användare kan skicka in artiklar till deras hemsida med hjälp av RSS. För att ge en översikt över hur en sådan webbplats kan se, har jag satt upp en Demo RSS-webbplats för denna handledning. Låt oss börja.


Steg 1 Ställa in en matningsplatshållare

Först måste vi installera en plats där användarna kan lägga till sina RSS-flöden. Först trodde jag att använda den befintliga WordPress-användarprofildelen skulle vara tillräcklig, men om vi vill tillåta flera webbmeddelanden kan det vara besvärligt. Vi kommer att konfigurera en ny anpassad posttyp för att hantera webbadressen för användarens RSS-flöde. Du kan lära dig mer om anpassade posttyper genom att läsa artikeln Anpassad posttyphjälpklass.

Vi behöver bara 2 fält för den anpassade posttypen, en titel och ett ställe för att lägga till webbadressen (jag använder kolumnen utdrag för att hålla allt enkelt)

 / * Ny anpassad posttyp för ny RSS-hantering. * / add_action ('init', 'create_rss_feed_uri'); funktionen create_rss_feed_uri () $ labels = array ('name' => _x ('RSS', 'All RSS'), 'singular_name' => _x ('RSS', 'singelobjekt för rss'), 'add_new' => _x ('Lägg till ny RSS', 'rss'), 'add_new_item' => __ ('Lägg till ny RSS'), 'edit_item' => __ ('Redigera RSS'), 'new_item' => __ New RSS '),' view_item '=> __ (' Visa RSS '),' search_items '=> __ (' Sök RSS '),' not_found '=> __ (' Inget hittat '),' not_found_in_trash '=> __ $ 'Labels' => $ etiketter, 'label' => __ ('RSS'), 'singular_label' => __ ('Ingenting hittat i papperskorgen'), 'parent_item_colon' => "); $ menu_args = array RSS '),' public '=> true,' show_ui '=> true,' capability_type '=>' post ',' hierarkisk '=> false,' revisions '=> true,' rewrite '=> true' '=> array (' title ',' excerpt ')); register_post_type (' rss ', $ menu_args);

Spara följande kod i ny fil (rss_feed_functions.php) och ladda upp den i följande mapp / wp-content / mu-plugins /. Funktionen laddas utan att behöva aktivera det som ett normalt plugin.


Steg 2 Anpassad sida RSS Feed Inlämning

När vi har inställt vår anpassade posttyp för att hålla RSS-URL-adressen måste vi konfigurera en sida där en användare kan skicka in deras webbadress. Följande funktion skapar en blankett och du kan inkludera den i vilken sida som helst med hjälp av den kortnummer vi definierar i koden.

Vi behöver ett inmatningsfält för att tillåta en användare att lägga till en titel och URL för RSS.

 

Nästa sak måste vi hantera formuläret när det är publicerat. Följande kod tillåter oss att förbereda frågan för att infoga data på vår hemsida.

 / * Förbered och bearbeta rss-data * / $ newrss_post = array ('post_title' => $ _POST ["rss_title"], "post_excerpt" => $ _POST ["rss_uri"], "post_author" => $ current_user-> ID, 'post_status' => 'publicera', 'post_type' => "rss"); $ post_id = wp_insert_post ($ newrss_post);

Men innan vi sätter in alla data vi fått från formuläret, vill vi validera foderadressen och titeln först. För att enkelt validera foderadressen använder vi följande WordPress-funktion för att kontrollera om foderadressen returnerar ett giltigt innehåll.

 include_once (ABSPATH. WPINC. '/feed.php'); / * bekräfta flödesadressen * / $ rss = fetch_feed (esc_url ($ _ POST ["rss_uri"])); om ! is_wp_error ($ rss)): / * Förbered rss-innehåll * / $ newrss_post = array ('post_title' => esc_html ($ _ POST ["rss_title"]), "post_excerpt" => esc_url ($ _ POST ["rss_uri "])," post_author "=> $ current_user-> ID, 'post_status' => 'publicera', 'post_type' =>" rss "); / * infoga rss-detaljer i databasen * / $ post_id = wp_insert_post ($ newrss_post); annars: echo "Det var fel att validera ditt RSS-flöde, försök igen"; endif;

Om allt fungerar bra, lägger vi in ​​matningsdata i databasen. Den fullständiga funktionen med kortkodsfunktion kommer att se ut som koden som visas nedan, vi kan lägga till den fullständiga funktionen i vår rss_feed_functions.php fil.

 add_shortcode ('rss_form_submit', 'create_rss_feed_form'); / * Formulär för att skicka in ny RSS URL * / funktion create_rss_feed_form () echo '
'; om (isset ($ _ POST ["rss_title"]): / * Valideringsadress * / $ rss = fetch_feed (esc_url ($ _ POST ["rss_uri"])); om ! is_wp_error ($ rss)): / * Förbered rss-innehåll * / $ newrss_post = array ('post_title' => esc_html ($ _ POST ["rss_title"]), "post_excerpt" => esc_url ($ _ POST ["rss_uri "])," post_author "=> $ current_user-> ID, 'post_status' => 'publicera', 'post_type' =>" rss "); / * infoga rss-detaljer i databasen * / $ post_id = wp_insert_post ($ newrss_post); echo "RSS framgångsrikt skickat"; annars: echo "Det var fel att validera ditt RSS-flöde, försök igen"; endif; endif;

Nu kan vi använda kortnumret [Rss_form_submit] på någon av våra sidor och du kan ställa in formuläret för att passa din webbdesign. Du kanske vill tillåta enbart registrerad användare att kunna se och använda den sidan.


Steg 3 Artikel Inlämning via Feed URL

Eftersom vi redan har matningsadressen i vår databas, vill vi sedan behandla den artikel som användare vill skicka till vår ping-plats. Vi behöver en ny sida för detta och för att säkerställa att funktionen kan användas på alla teman använder vi samma tillvägagångssätt som inmatningsadressen för inmatning av artikeln, med hjälp av en funktion med kortnummer.

Först av allt måste vi läsa flödet från den nuvarande användaren.

 global $ current_user, $ wpdb; get_currentuserinfo (); / * anpassad fråga för att hämta anpassad posttyp utan att göra det * / $ rssfeed = $ wpdb-> get_results ("VÄLJ * FRÅN $ wpdb-> inlägg WHERE post_type = 'rss' och post_status = 'publicera' och post_author =". $ current_user-> ID "");

Om det finns RSS-flöde, kan vi börja slinga matningsadressen och hämta den senaste artikeln från flödet.

 foreach ($ rssfeed as $ post): setup_postdata ($ post); eko "

"$ Post-> POST_TITLE."

"$ rss = fetch_feed (esc_url ($ post-> post_excerpt)), om (! is_wp_error ($ rss)): $ item = $ rss-> get_item (0); echo esc_html ($ item-> get_title ()) ; endif; endforeach;

Nu har vi redan den första artikeln som ska införas i vår hemsida. Innan vi fortsätter med att lägga till den i databasen är det bäst att först kontrollera om artikeln redan finns på vår hemsida. Vi kontrollerar titeln på matningsobjektet om det redan existerar, det här är bara en grundläggande metod, du kan kolla fler attribut för att säkerställa att det inte finns någon duplicerad artikel i databasen.

 om ($ wpdb-> get_row ("VÄLJ post_title FROM $ wpdb-> inlägg WHERE post_title = '". $ item -> get_title (). "' OCH post_status = 'publicera'", 'ARRAY_A')): echo "Nej ny artikel hittades "; annars: echo esc_html ($ item-> get_title ()); endif;

Vi kan nu bearbeta de data vi hämtar från flödet till vår databas. För att göra det enkelt för vår användare, kommer vi att inkludera inlämningsformuläret direkt efter att vi hämtat och kollade webbadressen.

 eko "
'.Esc_html ($ Item-> get_title ()).'
';

I exemplet behandlar vi titeln, innehållet, permalinken och datumet som ska infogas i vår databas. Användarna kommer att se titeln och knappen Skicka som skärmdumpen nedan.

Det sista steget vi behöver göra är att infoga data i databasen. Vi förbereder uttalandet innan vi kör sökningen.

 $ prepare_content = array ('post_date' => $ _POST ["date"], "post_title" => esc_html ($ _ POST ["post_title"]) "post_content" => $ _POST ["innehåll"], "post_author" => $ current_user-> ID, 'post_status' => 'publicera', 'post_type' => 'rss');

Vi ska behandla dessa detaljer först innan vi lägger in extra data i vår anpassade meta box.

 $ post_id = wp_insert_post ($ prepare_content); add_post_meta ($ post_id, 'feed_item_permalink', esc_url ($ _ POST ["permalink"]));

Nu är alla artikeldata framgångsrikt införda i databasen. Vi har nu en syndikator eller ping-plats redo att användas. Det finns fler möjligheter du kan lägga till för att förbättra kvaliteten på din ping site, men det var en enkel introduktion.


Slutsats

Jag har inkluderat den fullständiga källkoden (länken längst upp i denna artikel) som jag använder på Demo RSS-webbplatsen. Om du har några förslag eller förbättringar för denna handledning ser jag fram emot att läsa de idéer och förslag i kommentarerna nedan.