How we’re self-hosting the WP Product Talk Podcast

Self-hosting a podcast can be technically challenging. Lukcily WordPress makes it far easier and more powerful. Here’s a summary of what we did to self-host the WP Product Talk show, with tips, costs, and more.

How we're self-hosting the WP Product Talk podcast

The question of where to host your podcast is always a hot topic with a lot of options. But, like most things, 90% or more of the options people tend to flock to are all hosted SaaS solutions. This is an old traditional question for anyone who’s used WordPress before. Why use a hosted solution when you can self-host?

Most people choose hosted solutions for the convenience and ease of use. Some platforms add monetization options or cross-podcast collaboration potential to incentivize more podcasters.

The risks of hosted platforms though are:

  • Will they insert their own ads into your podcast that you can’t control and don’t get any revenue from?
  • What happens to your listeners when that platform has downtime?
  • Do their terms of service allow them to make derivative works from your content without your explicit consent?
  • Does hosting on one platform prevent you from distributing on others?

WordPress users know that hosting your own content gives you the most flexibility and power over how your content is produced, distributed, copyrightten and more.

In contrast, the benefits of hosting your own podcast on WordPress are:

  • All the customization and flexibility of the look and feel and branding and pages and posts and features that you can imagine.
  • You control the source, if you remove an episode or change it or edit it, it’s deleted or edited everywhere
  • All distribution channels get updated from one place – your website.
  • Adding new, future distribution options is easy
  • Ending support for retiring platforms (ahem…Google Podcasts) doesn’t put any content at risk.
  • If your podcast gains a strong community, you can add a lot of value to them on your website outside of the podcast, like swag (WooCommerce), email content (Mailerglue), an events calendar (The Events Calendar), a tip jar (GiveWP), and so much more.

Overall, the benefit of hosting your own podcast on a WordPress website is that they sky is the limit. If you want to create a solid foundation for your podcast to grow and mature into something powerful and wide-reaching, then starting from day one on WordPress is my recommendation.

With that all in mind, I wanted to go into some things we did at WP Product Talk to make this happen here. Hopefully these tips and insights will make it even easier for you to get started hosting your own podcast soon.

KadenceWP + Seriously Simple Podcasting Plugin for the win!

The majority of what you see and experience on this website is powered by two key products:

You can get up and running very quickly just by working only with those two tools.

Kadence Starter Templates

KadenceWP has really powerful starter templates. And in this case their “Podcast” starter template is perfectly named and designed for this purpose. If you need any help with Kadence Starter templates, watch this great walkthrough from the Kadence team.

To really benefit from Kadence Starter templates, Elements, and Blocks, I highly recommend getting at minimum the Kadence Essential Bundle. It’s one of the few WordPress-specific costs in this article that I would call a must-have.

Seriously Simple Podcasting

The most technically challenging aspect of self-hosting a podcast is knowing how to get your audio files in the right place, and generating an RSS feed that (1) is formatted correctly for all the podcast platforms; and (2) auto-updates when you publish a new episode. That’s where the Seriously Simple Podcasting plugin really shines.

This plugin really powers most of the functionality for self-hosting a podcast. It allows you to host multiple podcasts on the same site, with automatic RSS feed creation, custom slugs, audio player options, transcript support, and a slew of 100% free add-ons as well.

For this site I’m leveraging three of their addons:

  1. Seriously Simple Speakers
  2. Seriously Simple Stats
  3. Seriously Simple Transcripts

You Might be Done! But some Caveats

Between customizing your site with Kadence, and implementing your episodes with Seriously Simple Podcasting, you could literally be up and running quickly and just post your RSS feed to all the podcast directories you want!

Keep in mind a couple potential gotchas:

  • Upload File Size – web hosts like to limit how large your file uploads are via the WordPress Media Library. So if you have a long podcast your file size might be larger than what the Media Library will allow. This article from WP Engine explains how the WordPress file size limit and the host limit might be different and what to do about both.
  • Cache Exclusions on your RSS feed – there are so many caching options for WordPress nowaday, and sometimes they all are a bit too greedy. Once you get your site setup nicely, go ahead and get your caching configured for fast pageloads. But then make sure to circle back and ensure that your podcast RSS feed is NOT cached at all. This will prevent headaches for you with your podcast directories.
  • Podcast Covers and Featured Images aren’t the same sizes – most WordPress websites handle featured image sizes really well, and often they are best designed for the traditional 16:9 image ratio. But Podcast episode cover sizes are square, and they tend to like them LARGE; e.g. 3000x3000px. You’re going to want to create a template that can easily be converted into both sizes, and consider which size you want to display on your main podcast archive area.

Unique Needs of WP Product Talk and How We made them Happen

With the basics done, I had some aspects of the site that I felt would be really beneficial to our users.

No “Speakers”. “Guests” and “Co-hosts”

We don’t have “speakers” we have “co-hosts” and “guests” and I wanted that to be consistent in how we talk about it on the show and how it’s reflected on the website.

This would require customization to the Seriously Simple Speakers addon. Two things were required: (1) Updating the name of “Speakers” to “co-hosts”; (2) Updating the slug of “speakers” to “co-hosts”. Then doing that same thing with a newly registered taxonomy called “Guests” as well.

For the word changes, I used a basic gettext filter to lean on WordPress’ excellent support for translations. Here’s the snippet:

PHP
function yourprefix_text_switcher( $translations, $text, $domain ) {
	// changes the "Speakers" text in multiple places
	if ( $domain == 'seriously-simple-speakers' && $text == 'speaker' ) {
		$translations = __( 'co-host', 'seriously-simple-speakers' );
	}

	if ( $domain == 'seriously-simple-speakers' && $text == 'speakers' ) {
		$translations = __( 'co-hosts', 'seriously-simple-speakers' );
	}
	
	if ( $domain == 'seriously-simple-speakers' && $text == 'Speaker' ) {
		$translations = __( 'Co-host', 'seriously-simple-speakers' );
	}
	
	if ( $domain == 'seriously-simple-speakers' && $text == 'Speakers' ) {
		$translations = __( 'Co-hosts', 'seriously-simple-speakers' );
	}

	return $translations;
}
add_filter( 'gettext', 'yourprefix_text_switcher', 10, 3 );
PHP

And here’s the code for changing the “speakers” slug:

PHP
function yourprefix_change_custom_taxonomy_slug_args( $taxonomy, $object_type, $args ){
    if( 'speaker' == $taxonomy ){ // the current slug which you want to change.
        remove_action( current_action(), __FUNCTION__ );
        $args['rewrite'] = array( 'slug' => 'co-host' ); // the a new slug name.
        register_taxonomy( $taxonomy, $object_type, $args );
    }
}
add_action( 'registered_taxonomy', 'yourprefix_change_custom_taxonomy_slug_args', 10, 3 );
PHP

Speakers are more than just names

The way the Seriously Simple Speakers plugin works it is adds “speakers” as a “taxonomy” to your episodes. This has the major benefit of creating unique archive pages for every “speaker” on your site. For example, you can see all the episodes that Rich Tabor was on here. But taxonomies in WordPress are typically things like categories and tags. They’re usually just terms and a description used to group several different “posts” together.

If these taxonomies represent guests and co-hosts, then I’m going to need more than a name and description. They need a profile image, and social links at minimum.

Enter “Advanced Custom Fields“. Another powerhouse free plugin that was required for this website. All I had to do was create the additional fields and associate them with that taxonomy and 💥Here’s what that looks like:

With that in place for both by “Guests” and “Co-Hosts” taxonomies, I could then populate them individually per show. Keep in mind that taxonomies can be selected in your post in different ways – think about how you add tags versus categories. For co-hosts I have fewer of them but need to choose the same ones more often so having a quick checkbox list like categories is far more convenient than the multi-select tag option like Topics and Guests are.


WP Product Talk is both Audio and Video

We launched WP Product Talk originally only as a Twitter Space. It was so simple and easy and took our founding co-founder Kim Coleman and I very little prep to make it work. Then through Katie Keith’s influence, we migrated to Youtube. As the show picked up more and more listeners, several told us they’d really love to catch it on their favorite podcast platform.

Because of all of that, we create all our episodes as live streaming video first, then export the video for podcast purpose secondarily. So I wanted to be able to promote both options.

You’ll notice that each episode has an embedded Youtube video in the header, and the audio player in the main body content area. This is done with Kadence Elements. Elements are a wonderful way to add complex layouts to your post types. You simply create an element, like in this case the podcast episode hero, you set certain elements as dynamic based on the post content, and then designate where on the post you want that element to appear. Check out this great tutorial on how that works.

On-Page Transcripts are Better than Transcript Downloads

The Seriously Simple Transcripts plugin allows you to add a transcript file (.srt file format) to your episode, and it will be available as a download from the audio player. That’s useful, but the content of your podcast is ripe for search engines. Just embedding your transcript directly on your page alone will help the search engine gods smile down on you mightly.

The plugin also includes a “Transcript blog” which is essentially an empty accordion that you can paste your trasncript into. Not ideal when I know I’ve already got all the text in a file that I’m uploading anyway.

So I put together a shortcode to add to all my episodes that essentially checks whether there’s a transcript file or not, and if so, output the accordion with the contents of that file. Not the most elegant code-wise, but the results were just what I wanted. Here’s the code:

PHP
add_shortcode('wppt_transcript', 'wppt_shortcode_transcript');

function wppt_shortcode_transcript() {
	global $post;
	ob_start();	
	if (!empty($post->transcript_file)) { 
	$file = urlencode(file_get_contents($post->transcript_file));
	?>
		<!-- wp:create-block/castos-transcript {"hideFromFeed":true} -->
		<div class="wp-block-create-block-castos-transcript">
		  <div class="ssp-transcript"><div class="row"><div class="col"><div class="tabs"><div class="tab">
		  <input type="checkbox" id="chck1"/><label class="tab-label ssp-transcript-title" for="chck1">Transcript</label>
		  <div class="tab-content ssp-transcript-content">
			  <p><em>The following is an automated transcript generated by Youtube. It is not edited for accuracy.</em></p>
      		<?php print "<pre>" . urldecode($file) . "</pre>"; ?>
		</div></div></div></div></div></div></div>
		<!-- /wp:create-block/castos-transcript -->
		<?php 
	}
	
	$output = ob_get_contents();
	ob_end_clean();
		
	return $output;
}
PHP

Air-Date versus Publish Date

Because we stream our episodes live on Youtube, it’s important to me to get the episode out there in advance to promote it. But that means that the “publish date” of the post is before the airdate. It’s not a huge problem generally speaking, but I think showing the correct air-date is important.

This was fixed relatively easily with a new ACF field as well.

So What’s the Benefit of all these customizations?

Like I said from the beginning, you can publish and host your own podcast with just KadenceWP and the Seriously Simple Podcasting plugin. I chose to take it a bit further, for the following reasons:

  1. Every co-host and guest gets their own dedicated URL on the website that they can share with others. I think that’s a nice benefit of being a guest or co-host on the show so it was important to me.
  2. Each episode “post” is a gateway into all the ways you can enjoy our show. You can watch the video or listen to the audio, and you can easily find us on Spotify, Apple podcasts and more by clicking on the “Subscribe” button in the audio player.
  3. The on-page SEO for each individual post is excellent content that we want to be found by, and that’s in large thanks to the on-page transcript.
  4. We get to schedule the show in advance, and give our guests one page for promoting their slot both before and after.
  5. I got to start this blog just by writing a post, I didn’t have to spin up a whole new and different solution like I would have if I was on a hosted podcast platform.
  6. I got to really “glam” up the branding and the vibe throughout the whole website.

Overall, I’m really happy with our results to date, though I still have more and more ideas all the time.

What does all of this Cost?

OK so brass tacks, what are we talking about in terms of costs of running all of this? I’ll break it down for you in broad strokes:

ItemCost
Web hosting$144/year
Basic hosting that you don’t want to go too cheap on. My recommendation is don’t go anywhere south of $10/month.
Restream (Professional)$490/year
This is my biggest expense, but it’s also what makes the show work. If you’re going solo you can go on a lower tier, but because I think my co-hosts are amazing adding the “teams” feature was vital. This is also not a unique cost to self-hosting, but I want to include it as well.
Canva Pro$240/year
You might also find a much cheaper way to do this, but the templates and the teams functionality makes the show SO easy to schedule in advance no matter who’s hosting.
Plugins/Themes$337/year
This is Yoast SEO Premium, KadenceWP (which I don’t personally pay for but you should factor in the cost), and Admin Columns Pro. I’ll do another write-up about how I customize the Admin one day, but it’s a cost I’m happy to pay for the benefits.
Descript$30/month
Descript has become a vital aspect of how we publish these episodes for podcast platforms, subtitles, transcripts, show note summaries and more.
TOTAL$1571/year

That’s what I’m paying currently to run this show, and I’m happy with it for now. At some point I might ditch Canva, or find a cheaper alternative to Restream, but honestly I think that would reduce the quality of the show or cost me more time in prep or post-production.

Room for Improvement and the Future of WP Product Talk

If you made this far, please let me know, because 🫵🪨(you rock!🤘). The next things I’m working on to improve the show and/or the website are:

  • A new, more modern intro video (watch for that in 2024)
  • Some post-production help to clean up the transcripts so they are more accurate and helpful. They’re currently just a copy/paste from the auto-generated youtube transcripts.
  • Adding more “Show Notes” on episodes, basically additional thoughts or takeaways from our co-hosts and/or guests so that you get the most out of the episode exclusively on the website.
  • I’m considering blogging here more often, or doing a mailing list, so if that’s interesting to you let me know in the comments.

But so far, we’re very happy with how much you all are attending and commenting on the show and watching. It continues to be interesting and beneficial to all of us co-hosts so we’re planning to keep charging ahead as long as you do!

As always, if you have topic ideas, guest suggestions, or anything else, let us know in the comments, or hit us up on the contact form (I answer those personally as quickly as I can). Thanks all! See you on the next episode of WP Product Talk!

One Comment

  1. Hey Matt, I really, really love this post and going to have to bookmark it when I get questions about this 🙂

    Fact is, I have been hosting my podcasts on my site since around 2014, and would have never done it differently. At some point early I did opt in for Castos hosting, which made my life easier. Now I’m getting ready to do a big redesign of DTW, and some fun stuff around a series of podcast shows.

    Again, thanks for sharing how you did this!

Leave a Reply

Your email address will not be published. Required fields are marked *