Så skapar du din egen plugin för att automatiskt hämta Acast podcast-avsnitt till din hemsida

Illustration of a custom WordPress-plugin fetching new podcast episodes from an Acast RSS-feed.

Har du någonsin önskat att du kunde automatisera hämtningen av dina Acast podcast-avsnitt direkt till din WordPress-sida? I den här guiden kommer vi att visa hur du bygger din egen plugin som hämtar podcast-avsnitt från ett Acast RSS-flöde och omvandlar dem till WordPress-inlägg – snabbt, enkelt och helt automatiserat.

Det finns många plugins som hämtar innehåll från olika RSS-källor. Vi har provat de flesta. Tyvärr var det inte så många av dem som fungerad för vårt ändamål, och de som gjorde det var inte optimala, även om den grundläggande funktionaliteten var där.

Så vi bestämde oss för att skapa vår egen plugin för att skräddarsy importen av nya podcast-episoder.

Denna plugin är speciellt anpassad för Acast-podcaster, men grundfunktionaliteten är där och kan tweakas lite för att funka för andra källor.

Låt oss dyka rakt in och få dina podcasts att jobba för dig.

Vad du behöver

Innan vi börjar behöver du ha lite grundläggande koll på hur man utvecklar en plugin i WordPress och förstå PHP.

Det här tillägget baseras på några Advanced Custom Fields-fält, så det är bra att använda det tillägget eller något liknande tillägg (MetaBox.io är ett fullgott alternativ) som gör det lätt att lägga till ”custom fields”.

Vi använder ACF för att lägga till två fält till vanlig inlägg, podcast_url och podcast_date.

Mata in feeden i W3.orgs validator. Där kan du se alla olika fält som är inkluderat i varje avsnitt.

w3 validator

Har du dessa verktyg i verktygslådan? Bra!

Då är du redo.

Steg 1: Bygg strukturen för din plugin

För att komma igång med din plugin, skapa en mapp i WordPress-katalogen /wp-content/plugins/ och ge den ett passande namn, som podcast-fetcher. Inuti den mappen skapar du en fil som heter podcast-fetcher.php, där din plugin kommer att leva och frodas.

Lägg till detta i filen för att ge din plugin en introduktion till WordPress:

<?php
/**
 * Plugin Name: Podcast Fetcher
 * Description: Hämta podcast-avsnitt från Acasts RSS-flöde och skapa inlägg i WordPress.
 * Version: 1.0
 * Author: Göthlin Media
 */

När du har sparat filen kommer du se din plugin i WordPress-administrationen, redo att aktiveras. Det är dags att låta magin börja.

Steg 2: Hämta Acast-avsnitt med din plugin

Nu börjar det roliga. Din plugin ska kunna hämta podcast-avsnitt från Acast och skapa inlägg automatiskt. För att göra detta använder vi WordPress inbyggda funktion fetch_feed() för att hämta RSS-flödet från Acast och bearbeta varje avsnitt.

Här är koden som gör detta:

function podcast_fetcher_fetch_episodes() {
    $feed_url = 'https://feeds.acast.com/public/shows/din-shows-slug-här';

    // Hämta flödet
    $feed = fetch_feed($feed_url);

    if (!is_wp_error($feed)) {
        // Hämta objekten från flödet
        $items = $feed->get_items();

        // Sortera objekten efter publiceringsdatum
        usort($items, function($a, $b) {
            return strtotime($b->get_date('Y-m-d H:i:s')) - strtotime($a->get_date('Y-m-d H:i:s'));
        });

        foreach ($items as $item) {
            $title = $item->get_title();
            $description = $item->get_description();
            $pubDate = $item->get_date('Y-m-d H:i:s');
            $guid = $item->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid');
            $episodeId = $guid[0]['data'];

            // Bygg podcastens inbäddnings-URL
            $podcast_url = "https://embed.acast.com/$/din-shows-id/" . $episodeId;

            // Kontrollera om avsnittet redan finns
            if (!podcast_fetcher_episode_exists($title)) {
                // Skapa ett nytt WordPress-inlägg
                podcast_fetcher_create_post($title, $description, $pubDate, $podcast_url);
            }
        }
    }
}

Steg 3: Gör din plugin smart – inga dubbletter

En plugin som importerar samma avsnitt om och om igen? Nej tack!

Din plugin kommer att vara smart nog att veta när den redan har hämtat ett avsnitt. För att undvika dubbletter kollar vi om ett inlägg med samma titel redan finns i WordPress.

Här är funktionen som gör detta:

function podcast_fetcher_episode_exists($title) {
    $args = array(
        'post_type' => 'post',
        'title'     => $title,
        'post_status' => array('publish', 'draft'), // Kontrollera både publicerade och utkast
    );
    $query = new WP_Query($args);

    return $query->have_posts();
}

Steg 4: Skapa WordPress-inlägg från podcast-avsnitt

När din plugin hittar ett nytt avsnitt är det dags att skapa ett nytt WordPress-inlägg för det. Din plugin fyller automatiskt in titel, beskrivning, publiceringsdatum och länken till podcasten i inlägget.

Så här går det till:

function podcast_fetcher_create_post($title, $description, $pubDate, $podcast_url) {
    $post_data = array(
        'post_title'   => wp_strip_all_tags($title),
        'post_content' => $description,
        'post_excerpt' => wp_trim_words($description, 55, '...'),
        'post_status'  => 'publish', // Du kan ändra till 'draft' om du vill förhandsgranska först
        'post_type'    => 'post'
    );

    // Infoga inlägget i databasen
    $post_id = wp_insert_post($post_data);

    if ($post_id) {
        // Lagra podcastens detaljer i ACF-fält (detta är specifikt för vår sajts fält, välj rätt fält baserat på dina unika fält-IDn)
        update_field('podcast_date', $pubDate, $post_id);
        update_field('podcast_url', $podcast_url, $post_id);
    }
}

Steg 5: Städning av beskrivningar – din plugin gör get

Du vill att dina inlägg ska se snygga och proffsiga ut, eller hur? Tyvärr kommer RSS-flöden ofta med lite ”skräp” som annonser eller disclaimer-text som vi inte vill visa upp.

I Acast-feeden kommer texten ”Hosted on Acast. See acast.com/privacy for more information.” i botten av beskrivningen. Den vill vi ha bort.

Vår plugin kan enkelt rensa bort dessa oönskade delar. Med hjälp av DOMDocument tar vi bort det vi inte vill ha i beskrivningen.

Här är koden som gör jobbet:

function podcast_fetcher_clean_description($description) {
    $doc = new DOMDocument();
    libxml_use_internal_errors(true);
    $doc->loadHTML('<?xml encoding="utf-8" ?>' . $description);
    libxml_clear_errors();

    // Ta bort oönskade element som "Hosted on Acast"
    $xpath = new DOMXPath($doc);
    $nodes = $xpath->query("//p[contains(text(), 'Hosted on Acast')]");
    foreach ($nodes as $node) {
        $node->parentNode->removeChild($node);
    }

    // Rensa även <hr> och <br> taggar
    $hr_nodes = $doc->getElementsByTagName('hr');
    while ($hr_nodes->length > 0) {
        $hr_nodes->item(0)->parentNode->removeChild($hr_nodes->item(0));
    }

    $br_nodes = $doc->getElementsByTagName('br');
    while ($br_nodes->length > 0) {
        $br_nodes->item(0)->parentNode->removeChild($br_nodes->item(0));
    }

    // Returnera den städade HTML-koden
    $body = $doc->getElementsByTagName('body')->item(0);
    return $doc->saveHTML($body);
}

Steg 6: Automatisera din plugin med cron-jobb

Din plugin kan automatiskt hämta nya avsnitt på bestämda tider utan att du behöver lyfta ett finger. Genom att använda WordPress cron-system kan du schemalägga att din plugin körs till exempel varje timme. För testning kan vi låta den köra var femte minut.

add_action('init', 'podcast_fetcher_schedule');
add_action('podcast_fetcher_cron_hook', 'podcast_fetcher_fetch_episodes');

function podcast_fetcher_schedule() {
    if (!wp_next_scheduled('podcast_fetcher_cron_hook')) {
        wp_schedule_event(time(), 'five_minutes', 'podcast_fetcher_cron_hook'); // 5 minuter för testning
    }
}

add_filter('cron_schedules', 'podcast_fetcher_custom_intervals');
function podcast_fetcher_custom_intervals($schedules) {
    $schedules['five_minutes'] = array(
        'interval' => 300, 
        'display'  => __('Var 5:e minut')
    );
    return $schedules;
}

register_deactivation_hook(__FILE__, 'podcast_fetcher_deactivate');
function podcast_fetcher_deactivate() {
    $timestamp = wp_next_scheduled('podcast_fetcher_cron_hook');
    wp_unschedule_event($timestamp, 'podcast_fetcher_cron_hook');
}

Vill du göra din plugin mer flexibel?

Vill du göra din plugin tillgänglig för fler användare? Här är några förbättringar du kan göra:

  • Fält för Acast Show URL: Istället för att hårdkoda URL:en, lägg till en inställningssida där användaren kan ange sin egen Acast-program-URL.
  • Post Status: Låt användare välja om avsnitt ska publiceras direkt eller sparas som utkast.
  • ACF-fält: Låt användare anpassa ACF-fältens ID:n för att passa deras egna behov.

Avslutning

Din plugin är nu ett kraftfullt verktyg som automatiskt hämtar, rensar och publicerar Acast-avsnitt direkt på din WordPress-sida. Genom att göra några små justeringar kan du göra din plugin ännu mer flexibel och användbar för en bredare publik.

Glöm inte att fortsätta experimentera och lägga till fler funktioner – bara fantasin sätter gränser för vad din plugin kan göra.