Nehmen wir an, Sie planen, mit dem Podcasting zu beginnen. Sie haben die Aufnahmeausrüstung, ein interessantes Thema und eine gute Stimme, die andere Leute hören wollen. Sie scheinen auf dem besten Weg zu sein, überall Ohren zu füllen.
Dann stellt sich die Frage nach dem Hosting Ihres Podcasts. iTunes benötigt einen RSS-Feed, damit es Ihre Episoden an Abonnenten verteilen kann, sobald sie verfügbar sind. Aber wie macht man das? Die gute Nachricht ist, dass es viele Möglichkeiten gibt, einen Podcast zu hosten. Sie könnten zum Beispiel einen Hosting-Service nutzen, der Ihnen Speicherplatz und Distribution an einem Ort bietet, in der Regel gegen eine Gebühr. Wenn Sie WordPress verwenden und sich mit Podcasting beschäftigt haben, sind Ihnen vielleicht auch die vielen leistungsstarken Podcasting-Plugins aufgefallen, die es gibt.
Diese Optionen werden wir in diesem Beitrag überspringen und sehen, wie wir unseren eigenen Podcast mit nichts weiter als einer WordPress-Website und zwei zusätzlichen Dateien hosten können. Genauer gesagt werden wir
- Ein neues Plugin einrichten
- Einen benutzerdefinierten RSS-Feed registrieren
- Einen benutzerdefinierten Post-Typ für unseren Podcast erstellen
- Benutzerdefinierte Felder für unseren benutzerdefinierten Post-Typ zuweisen
- Die Vorlage für unseren RSS-Feed erstellen
Das Ziel ist, das Ganze nicht zu überdenken. Wenn Sie bereits eine WordPress-Website haben und nur einen Feed benötigen, um ihn bei iTunes einzureichen, dann ist es genau das, was wir tun werden. Legen wir los.
Einrichtung des Plugins
Das Erstellen eines Plugins ist eine gute Alternative zum Schreiben von Code in der `functions.php`-Datei Ihres Themes. Neben der sauberen und übersichtlichen Verwaltung der Funktionen Ihres Themes bleibt die Funktionalität des Podcast-Feeds in Ihrem `/wp-content/plugins/`-Verzeichnis, das Ihnen auch beim Wechsel des Themes erhalten bleibt.
Erstellen Sie das Plugin-Verzeichnis
Zuerst das Wichtigste. Erstellen wir einen neuen Ordner namens `my-awesome-podcast` in unserem `/wp-content/plugins/`-Verzeichnis.
Erstellen Sie das Plugin
Lassen Sie uns nun eine neue PHP-Datei in dem gerade erstellten Ordner anlegen und sie `my-awesome-podcast.php` nennen. Dies wird die Hauptdatei sein, die unser Plugin registriert und in der wir die Funktionalität für unseren Podcast schreiben.
Mit dieser Datei an Ort und Stelle fügen wir die folgenden Code-Kommentare hinzu, die WordPress den Namen, die Beschreibung und die Version des Plugins mitteilen. Es gibt weitere Informationen, die wir hinzufügen können, aber das reicht aus.
/**
Plugin Name: My Awesome Podcast
Description: A really simple RSS feed and custom post type for a podcast
Version: 1.0
**/
// This is where we will start writing our plugin
RSS-Feed registrieren
Als Nächstes müssen wir einen neuen RSS-Feed registrieren. Glücklicherweise bietet die WordPress API eine praktische Funktion namens add_feed(), in die wir uns einklinken können, um dies relativ einfach zu machen.
add_action('init', 'podcast_rss');
function podcast_rss(){
add_feed('my-awesome-podcast', 'my_podcast_rss');
}
Hier haben wir eine neue Funktion namens `podcast_rss()` definiert und erweitern die WordPress-Funktion `add_feed()`, um einen neuen RSS-Feed namens "my_podcast_rss" zu erstellen, der unter `/feed/my-awesome-podcast` auf unserer Website erreichbar sein wird.
Hinweis: Sie können "my-awesome-podcast" hier nach Belieben ändern. Dies ist die URL-Slug Ihres Feeds, daher könnte es der Titel Ihres Podcasts oder etwas anderes sein, was Sie bevorzugen.
Registrieren eines benutzerdefinierten Post-Typs für Podcasts
Sobald wir unseren Feed eingerichtet haben, müssen wir einen neuen Post-Typ einrichten, den wir zum Veröffentlichen der Beiträge für unsere Episoden verwenden können. Anstelle eines "Posts" oder "Seite", die standardmäßig in WordPress vorhanden sind, erstellen wir einen brandneuen namens "Podcast". Das WordPress-Handbuch erklärt sehr gut, wie man benutzerdefinierte Post-Typen erstellt, daher ist es nicht nötig, dies hier erneut zu behandeln. Es gibt sogar eine Handvoll Plugins, die dies tun, wenn Sie das bevorzugen. In jedem Fall gehen wir davon aus, dass wir es ohne Hilfe eines Plugins tun und erstellen den benutzerdefinierten Post-Typ "Podcast" hier in unserer Datei.
function custom_post_type() {
$labels = array(
'name' => _x( 'Podcasts', 'Podcast General Name', 'text_domain' ),
'singular_name' => _x( 'Podcast', 'Course Singular Name', 'text_domain' ),
'menu_name' => __( 'Podcasts', 'text_domain' ),
'parent_item_colon' => __( 'Parent Podcast:', 'text_domain' ),
'all_items' => __( 'All Podcasts', 'text_domain' ),
'view_item' => __( 'View Podcast', 'text_domain' ),
'add_new_item' => __( 'Add New Podcast', 'text_domain' ),
'add_new' => __( 'Add New', 'text_domain' ),
'edit_item' => __( 'Edit Podcast', 'text_domain' ),
'update_item' => __( 'Update Podcast', 'text_domain' ),
'search_items' => __( 'Search Podcasts', 'text_domain' ),
'not_found' => __( 'Not found', 'text_domain' ),
'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ),
);
$args = array(
'label' => __( 'podcasts', 'text_domain' ),
'description' => __( 'Podcast Description', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-format-audio',
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page'
);
register_post_type( 'podcasts', $args );
}
add_action( 'init', 'custom_post_type', 0 );
Das ist viel Code, aber es ist nur Konfiguration, um einen neuen Post-Typ namens Podcasts zu registrieren. Er definiert die verschiedenen Beschriftungen für das WordPress-Dashboard und teilt WordPress mit, wie damit umzugehen ist. Auch hier erklärt das WordPress-Handbuch diese Dinge ausführlicher, wenn Sie interessiert sind.
Zu diesem Zeitpunkt können wir in den Plugin-Bereich unseres WordPress-Admins gehen und **My Awesome Podcast** als verfügbares Plugin sehen. Aktivieren Sie es.

Benutzerdefinierte Felder für Podcast-Posts erstellen
WordPress-Posts bieten uns von Haus aus viel Funktionalität, aber manchmal benötigen wir zusätzliche Felder, die es uns ermöglichen, spezifische Inhalte zu veröffentlichen. In diesem Fall hat iTunes ein sehr spezifisches Format dafür, welche Art von Informationen in unserem RSS-Feed verfügbar sein muss.
Es gibt eine Möglichkeit, benutzerdefinierte Felder zu unserem benutzerdefinierten Post-Typ mit zusätzlicher Entwicklung hinzuzufügen, aber ich bevorzuge eigentlich die Verwendung des Advanced Custom Fields Plugin für diese Art von Dingen. Es ermöglicht uns eine saubere, benutzerdefinierte Benutzeroberfläche für jedes Feld, das wir hinzufügen, anstatt der generischen Schlüssel/Wert-UI, die Sie mit standardmäßigen benutzerdefinierten Feldern erhalten.
Mit Advanced Custom Fields erstellen wir eine neue Feldgruppe namens Podcasts, weisen sie dem Post-Typ Podcast zu und erstellen die folgenden Felder

- podcast_file: Verwenden Sie den Feldtyp "Datei", damit wir unsere Podcast-Datei direkt zum Beitrag hochladen können. Stellen Sie den Rückgabewert des Feldes auf "Datei-ID" ein, da dies uns später hilft, die Dateigröße automatisch zu erkennen.
- podcast_duration: Dies ist ein einfaches Textfeld, das wir verwenden, um die Länge unserer Episode im Format HH:MM:SS zu veröffentlichen.
Hinweis: Obwohl ich in diesem Beispiel den Feldtyp "Datei" verwendet habe, könnten Sie theoretisch auch ein Textfeld verwenden, wenn Sie Ihre Podcast-Dateien woanders als auf Ihrem Server hosten möchten (z. B. Amazon S3 oder Ähnliches) und die URL direkt dort einfügen. Allerdings können wir die Dateigröße auf diese Weise nicht automatisch erkennen, obwohl wir ein weiteres Textfeld für diesen Zweck verwenden könnten.
RSS-Vorlage erstellen
Wir haben bisher viel getan. Das Letzte, was zu tun ist, ist die Erstellung der Vorlage, die zur Anzeige der Daten für unsere Podcast-Beiträge verwendet wird.
Apple hat die Spezifikationen für einen akzeptablen Podcast-RSS-Feed dargelegt, und er ist sehr spezifisch. Anhand dieser Vorgaben erstellen wir eine weitere Datei in unserem Plugin-Ordner und nennen sie `podcast-rss-template.php`. Der Name sagt alles, oder?
Das Schöne ist, dass unsere RSS-Vorlage technisch gesehen nicht anders ist als jede andere WordPress-Vorlage. Wir werden unsere Beiträge abfragen, eine Schleife erstellen und unsere Daten dort einfügen, wo sie hingehören.
/**
Template Name: Podcast RSS
**/
// Query the Podcast Custom Post Type and fetch the latest 100 posts
$args = array( 'post_type' => 'podcasts', 'posts_per_page' => 100 );
$loop = new WP_Query( $args );
/**
* Get the current URL taking into account HTTPS and Port
* @link https://css-tricks.de/snippets/php/get-current-page-url/
* @version Refactored by @AlexParraSilva
*/
function getCurrentUrl() {
$url = isset( $_SERVER['HTTPS'] ) && 'on' === $_SERVER['HTTPS'] ? 'https' : 'http';
$url .= '://' . $_SERVER['SERVER_NAME'];
$url .= in_array( $_SERVER['SERVER_PORT'], array('80', '443') ) ? '' : ':' . $_SERVER['SERVER_PORT'];
$url .= $_SERVER['REQUEST_URI'];
return $url;
}
// Output the XML header
header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
?>
<?php // Start the iTunes RSS Feed: https://www.apple.com/itunes/podcasts/specs.html ?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
<?php
// The information for the podcast channel
// Mostly using get_bloginfo() here, but these can be custom tailored, as needed
?>
<channel>
<title><?php echo get_bloginfo('name'); ?></title>
<link><?php echo get_bloginfo('url'); ?></link>
<language><?php echo get_bloginfo ( 'language' ); ?></language>
<copyright><?php echo date('Y'); ?> <?php echo get_bloginfo('name'); ?></copyright>
<itunes:author><?php echo get_bloginfo('name'); ?></itunes:author>
<itunes:summary><?php echo get_bloginfo('description'); ?></itunes:summary>
<description><?php echo get_bloginfo('url'); ?></description>
<itunes:owner>
<itunes:name><?php echo get_bloginfo('name'); ?></itunes:name>
<itunes:email><?php echo get_bloginfo('admin_email'); ?></itunes:email>
</itunes:owner>
<?php // Change to your own image. Must be at least 1400 x 1400: https://www.apple.com/itunes/podcasts/creatorfaq.html
<itunes:image href="http://your-site.com/path/to/podcast/image.png" />
<itunes:category text="Technology">
<itunes:category text="Tech News"/>
</itunes:category>
<itunes:explicit>yes</itunes:explicit>
<?php // Start the loop for Podcast posts
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<item>
<title><?php the_title_rss(); ?></title>
<itunes:author><?php echo get_bloginfo('name'); ?></itunes:author>
<itunes:summary><?php echo get_the_excerpt(); ?></itunes:summary>
<?php // Retrieve just the URL of the Featured Image: http://codex.wordpress.org/Function_Reference/wp_get_attachment_image_src
if (has_post_thumbnail( $post->ID ) ): ?>
<?php $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' ); ?>
<itunes:image href="<?php echo $image[0]; ?>" />
<?php endif; ?>
<?php // Get the file field URL, filesize and date format
$attachment_id = get_field('podcast_file');
$fileurl = wp_get_attachment_url( $attachment_id );
$filesize = filesize( get_attached_file( $attachment_id ) );
$dateformatstring = _x( 'D, d M Y H:i:s O', 'Date formating for iTunes feed.' );
?>
<enclosure url="<?php echo $fileurl; ?>" length="<?php echo $filesize; ?>" type="audio/mpeg" />
<guid><?php echo $fileurl; ?></guid>
<guid><?php the_field('podcast_file'); ?></guid>
<pubDate><?php echo date($dateformatstring, $show_date); ?></pubDate>
<itunes:duration><?php the_field('podcast_duration'); ?></itunes:duration>
</item>
<?php endwhile; ?>
</channel>
</rss>
Hinweis: Der obige Code geht davon aus, dass Sie die MP3-Datei auf Ihre eigene Website/Server hochladen. In diesem Fall kann die Dateigröße in Bytes ermittelt werden, was iTunes als Teil des RSS-Feeds benötigt, was sehr praktisch ist. Wenn Sie die MP3-Datei jedoch woanders hosten (was sinnvoll sein kann, da die meisten Web-Hosts nicht für die Bereitstellung großer Assets ausgelegt sind), funktioniert dies nicht. Fügen Sie stattdessen ein zusätzliches Feld mit ACF für die Byte-Größe hinzu und geben Sie es dort aus, wo wir `$filesize` oben ausgeben.
Lassen Sie uns nun diese RSS-Vorlage in unserer Datei `my-awesome.podcast.php` aufrufen, indem wir Folgendes hinzufügen
function my_podcast_rss(){
require_once( dirname( __FILE__ ) . '/podcast-rss-template.php' );
}
Alles zusammenfügen
Fassen wir zusammen, wie alles zusammenpasst.
Die Dateien
Kurz gesagt, wir haben jetzt einen neuen Ordner in unserem Plugin-Verzeichnis namens `my-awesome-podcast`.
WordPress Root Directory
└── wp-content
└── plugins
└── my-awesome-podcast
├── my-awesome-podcast.php
└── podcast-rss-template.php
- my-awesome.podcast.php: Dies registriert unser Plugin, erstellt einen benutzerdefinierten RSS-Feed, definiert einen neuen benutzerdefinierten Post-Typ und ruft unsere RSS-Vorlage auf.
- podcast-rss-template.php: Dies enthält die Vorlage für unseren RSS-Feed und liefert die Informationen aus unseren Podcast-Beiträgen in einem Format, das iTunes lesen und zur Bereitstellung unserer Inhalte an Abonnenten verwenden kann.
Podcast veröffentlichen
Veröffentlichen Sie einen neuen Podcast-Beitrag. Die Option finden Sie im WordPress-Menü unter Podcasts.

- Geben Sie dem Podcast einen Titel
- Laden Sie die Podcast-Episoden-Datei hoch
- Geben Sie die Episodenlänge an (im Format HH:MM:SS)
- (Wenn nicht lokal gehostet) Geben Sie die Dateigröße der Episode an (in Bytes)
- Geben Sie eine Zusammenfassung der Episode im Inhaltsbereich an
Super, Sie haben gerade Ihre erste Podcast-Episode veröffentlicht!
Podcast bei iTunes einreichen
Besuchen Sie abschließend die URL des Feeds unter: `[ihre-seite]/feed/[slug]`, wobei `[slug]` das ist, was wir im zweiten Schritt in der `add_feed()`-Funktion definiert haben. Es schadet nicht, den Feed zu validieren, um sicherzustellen, dass er in Ordnung ist. Dies ist die URL, die Sie bei iTunes einreichen werden, was Sie über die iTunes-App unter iTunes Store > Podcasts > Schnellauswahl > Podcast einreichen tun können.
Wenn Sie eine Seite nicht gefunden (404) erhalten, versuchen Sie, Ihre Permalinks zu leeren. Dies kann geschehen, indem Sie in Ihrem WordPress-Dashboard zu Einstellungen > Permalinks gehen und nichts weiter tun, als auf die Schaltfläche Einstellungen speichern zu klicken. Seltsam, aber wahr.
Gehen Sie hinaus und podcasten Sie
Da haben Sie es! Eine einfache, aber effektive Möglichkeit, Ihren Podcast mit Ressourcen zu hosten, die Sie wahrscheinlich schon zur Hand haben. Sicher, es mag leistungsfähigere oder sogar elegantente Lösungen geben, aber diese gibt uns genau das, was wir brauchen, nicht mehr und nicht weniger.
Update: Ein riesiges Dankeschön an David Scanu. Er hat sich mit einigen Updates gemeldet, um ein paar RSS-Validierungsprobleme zu beheben, die nun im Artikel berücksichtigt sind. Vielen Dank!
Ein kurzer Gedanke, den ich hatte, um die Erfahrung etwas einfacher zu gestalten: lassen Sie die Software die Zeit des Podcasts ermitteln. Es gibt ein paar Möglichkeiten, dies zu tun, aber diese einfache Klasse scheint den Trick zu machen, ohne sich auf eine riesige Codebasis zu verlassen (wie die massive getId3()-Bibliothek). Wenn Sie Podcasts in einem AAC (MP4) oder einem anderen Format verwenden, scheint getId3 eine der besten Optionen zu sein. (Wenn Sie die Dateien korrekt taggen, könnten Sie sogar noch mehr daraus extrahieren, aber das geht über den Rahmen dieses Artikels hinaus.)
Schön! Diese Klasse kannte ich vorher nicht – sie könnte definitiv nützlich sein, besonders wenn ACF für manche Leute keine Option ist.
Vielen Dank für einen großartigen Artikel, Geoff! Für mich kommt das *perfekt* rechtzeitig, da ich gerade dabei bin, Podcast-Funktionalität in ein aktuelles Projekt zu integrieren, und die vorhandenen Podcast-Plugins meinen Bedürfnissen nicht ganz entsprachen.
Ich werde auch eine einzige Post-Vorlage erstellen, damit Leute die Website besuchen und im Browser zuhören können. Wie würden Sie den integrierten WP-Audio-Player mit `<?php the_field('podcast_file'); ?>` zum Laufen bringen?
Gute Frage! Ich stelle mir vor, Sie könnten die Funktion `do_shortcode()` verwenden, um den Audio-Player in die Vorlage einzufügen, und dann die Variable `$fileurl`, die wir in der RSS-Vorlage definiert haben, als Quelldatei für den Audio-Player auszugeben.
Danke, Geoff. Ich habe an `do_shortcode()` gedacht, war mir aber nicht sicher, ob es einen besseren Weg gibt.
Es ist seltsam, dass es keine einfache Möglichkeit gibt, die Dauer automatisch abzurufen, da der integrierte Audio-Player das kann. Ich habe mir `wp_read_audio_metadata` angesehen, sehe aber nichts über die Dauer. Ich möchte nicht, dass mehrere Mitwirkende die Dauer jedes Mal eingeben müssen, sowohl aus Bequemlichkeit als auch zur Fehlervermeidung.
Toller Artikel! Dies ist einer der besten Beiträge, die ich zum Thema Erstellung eines einfachen Plugins gelesen habe. Er ist funktional, reichhaltig und löst ein Problem, das viele Benutzer haben.
Nur eine Anmerkung: Unter dem Abschnitt "Benutzerdefinierte Felder für Podcast-Posts erstellen" scheint der Link zum Advanced Custom Fields Plugin nicht zu funktionieren.
Danke, Mann! Ich freue mich, dass Sie das nützlich finden. :)
Gute Bemerkung zur URL. Fürs Protokoll, das ist der richtige Link: http://www.advancedcustomfields.com/
Schöner Artikel, aber für die Veröffentlichung von Podcasts mit WordPress empfehle ich den Podlove Publisher
http://podlove.org/podlove-podcast-publisher/
Das ist ziemlich genial. Wir verwenden eine sehr ähnliche benutzerdefinierte Lösung für ein Podcast-Plugin auf http://realwpsite.com
Vielen Dank für diesen großartigen und nützlichen Artikel, Geoff! Ich habe vor, meinen eigenen Podcast auf meiner persönlichen WordPress-Website zu starten, und gerade als ich diesen großartigen Artikel sah, werde ich mein Bestes tun, ihn so schnell wie möglich zu starten.
Jeff