Search Over 30,000 FREE Plugins from the Official WordPress Plugin Directory Repository

Podlove Podcast Publisher

The one and only next generation podcast publishing system. Seriously. It's magical and sparkles a lot.

We built the Podlove Podcast Publisher because existing solutions are stuck in the past, complex and unwieldy. The Publisher helps you save time, worry less and provides a cutting edge listening experience for your audience.

Official Site:

Video Tutorial: Getting started with Podlove Publisher

Compatible Feeds

The Publisher makes it easy to create highly expressive, efficient and super compatible podcast feeds with fine grained control over client behavior (e.g. GUID control to replace faulty episodes and for clients to reload) supporting all important meta data.

Multi-Format Publishing

The Publisher also makes multi-format publishing - embracing all modern and legacy audio and video codecs - a snap. By adopting simple file name conventions, the plugin allows the podcaster to provide individual feeds for certain use cases or audiences without adding work for the podcaster during the publishing process.

Optimized Web Player

The Publisher also comes with integrated with the Podlove Web Player plugin (which you do not need to install separately) and fully support its advanced options including multiple audio (MP4 AAC, MP3, Vorbis, Opus) and video (MP4 H.264, WebM, Theora) format support for web browsers. This Web Player is fully HTML5 compatible (but provides Flash fallback for ancient environments) and is ready for all touch based clients too.

Chapter Support

The Publisher also makes it easy to publish chapter information in the player to make access to structured episodes even easier. Full support for linking directly to any part of your podcast on the web with instant playback included.

Flexible Templates

To round it all up, a flexible template system enables you to published Podcasts in a defined fashion and change the style at any time without having to touch your individual postings later on.

And this is just the beginning. We have a rich roadmap that will bring even more interesting features: integration with helpful services, much improved timeline metadata support (show notes) and much more.

Further Reading

Development of the plugin is an open process. The current version is available on GitHub Feel free to contribute and to fix errors or send improvements via GitHub.

Requires PHP 5.4+

Author Podlove
Contributors eteubert, chemiker
Tags audio, feed, iTunes, m4a, mp3, player, podcast, podlove, publishing, radio, rss, webplayer
  1. podlove-podcasting-plugin-for-wordpress screenshot 1

    Custom episode post type separates media from your blog content.

  2. podlove-podcasting-plugin-for-wordpress screenshot 2

    Download analytics provide you with all the data you ever wanted.

  3. podlove-podcasting-plugin-for-wordpress screenshot 3

    The Publisher automatically checks the health of your media files.

  4. podlove-podcasting-plugin-for-wordpress screenshot 4

    The mighty template engine gives you full control over the episode presentation.

  5. podlove-podcasting-plugin-for-wordpress screenshot 5

    Includes the Podlove Subscribe Button, the easiest way for listeners to subscribe to your podcast.

  6. podlove-podcasting-plugin-for-wordpress screenshot 6

    Includes the Podlove Web Player. One more thing: you can manage and present all contributors easily.

  1. Download the Podlove Publisher Plugin to your desktop.
  2. If downloaded as a zip archive, extract the Plugin folder to your desktop.
  3. With your FTP program, upload the Plugin folder to the wp-content/plugins folder in your WordPress directory online.
  4. Go to Plugins screen and find the newly uploaded Plugin in the list.
  5. Click Activate Plugin to activate it.


Image cache: change URL encoding method to fix Gravatar issues.


Further image cache improvements:

  • reject URLs that are not images
  • prefix query vars to avoid naming conflicts with other plugins
  • fix resizing sometimes not calculating the correct dimensions
  • enhancement: skip http when using images shipped with the Publisher; copy images from Publisher to cache directory on filesystem instead


Fix issue with broken images introduced in 2.4.2.


Improve Image Caches

Images relevant to the Podlove Publisher are downloaded so they can be resized to desired dimensions. This makes it possible to deliver retina-images and improves the website performance because only the appropriate image size delivered.

This requires files to be downloaded. Until now, this happened in the background to avoid slow web page load times when the image is fetched. Until the cache existed, the original file URL to the unresized file was used. This worked alright, unless you were using a page cache plugin. The original file URL would be used much longer than necessary, causing big file downloads.

Now a different approach is used. Instead of the original file URL, a dynamic link is generated, looking like this one: When this link is requested, the cached and resized image is either delivered or, if it doesn't exist, generated on-the-fly. Once the cached file exists, the direct link to the cached file is delivered, just like before. The major improvement is that even if the initial URL is stuck in your page cache, the Publisher is now able to deliver a properly resized image anyway.


  • set correct feed Content-Type in HEAD requests and redirects
  • fix "Last Month" download widget in analytics


  • services: Playstation Network Account now links to
  • allow spaces in episode slugs
  • add help tab to analytics pages
  • fix Podlove Web Player 2 timecode share link
  • fix issue with image cache filenames (PR 895)
  • fix WP-Rocket incompatibility with Podigee Player
  • fix Auphonic: when neither episode image nor post thumbnail are present, fallback to podcast cover art
  • fix PHP warnings in oembed module


Background Jobs System

Crunching numbers for Analytics takes time, especially for popular podcasts with many downloads. The old system was written optimistically and "let's-hope-we-finish-before-we-run-out-of-time"-ish. That was certainly good enough for podcasts with a few hundred downloads per episode, but more likely a gamble for popular shows. To solve this issue in a scaleable way, we built what is known as "background processing" or "queues". That way we can break big tasks into small chunks and process them step by step. You don't really need to know about this, since the main effect is that calculating analytics should be a smoother experience (if you have ever had troubles in that regard) but if you are curious, have a look at the new "Tools" section, which lists running and recently finished jobs.

New Analytics Dashboard

  • "Downloads per Day" is a stacked bar chart now so you can see which episode is responsible for peaks
  • Downloads table now shows downloads in time segments starting from the moment of episode release for better comparability
  • Show total number of all downloads in Analytics Dashboard
  • New information under downloads table: age of the data and when the next refresh is due
  • MUCH better performance / page load times
  • New option to configure how many episodes per page should be shown

Podlove Web Player 2 Facelift

  • simplified, modernised look
  • responsive layout for mobile devices
  • fix: updated mediaelement library to fix volume bar display bug

Podigee Podcast Player

The Podigee Podcast Player is available as an alternative to the Podlove Web Players. It supports everything you can expect from a modern web player like chaptermarks. It is also embeddable.

New "Tools" Menu

  • A new maintenance section gathers tools like the "Repair" button in one place
  • There is a new section for analytics related maintenance
  • Import & Export is now in the "Tools" menu

Improved Logging Display

  • Logging is now in the "Support" menu
  • add filtering for different severities
  • hide "info" entries by default
  • improve readability of data sections


  • add Emoji support for episode subtitle, summary and chapter marks (requires WordPress 4.2 or newer)
  • Web Player setttings moved from Expert Settings to Podcast Settings
  • When activating the plugin, add mp3 asset and feed to help users get over the most confusing part of the setup.
  • Post thumbnails can be used as episode covers (see settings in "Episode Assets"). This is the new default.
  • add contributors shortcode to default template (Many people activated contributors and then wondered why they were not displayed in the episode. Now the shortcode is part of the default template, but only if the contributors module is active.)
  • add unmistakable warning if curl is not available and provide actionable steps for a solution
  • change feed setting "Include HTML Content" default to "on"
  • remove log entries for beginning and ending asset validations
  • move feed protection into separate module
  • move debug log from Dashboard to Support page
  • add ptm_request parameter to redirected tracking URLs which contains a uuid
  • add module
  • add option to enforce http or https in URLs inside feeds (enclosures, images) and the actual feed URLs; see Expert Settings > Website
  • improve tracking: ignore 1-byte requests
  • update user agent library (new/updated clients: Podcat, Downcast, iCatcher, BashPodder)
  • show total downloads per site in network dashboard
  • remove <itunes:keywords> from feed (it disappeared from the specification)
  • remove module: "Feed Validator"
  • update recommended image size to 3000x3000 pixel
  • add heartbeat to keep note of when tracking is active
  • shortcode_exists($shortcode_name) is now available in Twig templates
  • system report: add notice if ALTERNATE_WP_CRON is active
  • fix tracking export: keep httprange
  • fix compatibility with other plugins relying on Spyc library
  • fix {{ episode.duration.totalMilliseconds }}
  • fix image caching issue (invisible characters)
  • fix: When plugin requirements are not met, admin notices are now still shown once but the plugin is automatically deactivated after that. This avoids faulty setups.
  • fix: show podcast covers in network site switcher
  • fix: expert settings not saving on some systems


  • fix Auphonic authentication (https certificate issue)


  • fixes a bug that broke some settings pages


  • security: fix SQL injection
  • security: remove several Cross-Site Scripting vulnerabilities

All vulnerabilities require admin capabilities. That means they cannot be exploitet easily, but could be using Cross-site request forgery (CSRF).

Thanks to RIPS Technologies for reporting these issues. The issues were found using their Static Source-Code Analyzer RIPS.


  • ensure 3rd party PHP dependencies do not require PHP 5.5 or greater


  • fix: send episode cover to Auphonic if available
  • fix: improved download logic for geoip.mmdb should prevent faulty downloads
  • enhancement: error message for faulty geoip.mmdb includes instructions on how to manually fix the file
  • enhancement: automatically switch off geo tracking when no valid geo database is available
  • enhancement: clarify episode image asset options


  • fix: sort contributor names while ignoring uppercase/lowercase
  • fix: when exporting a podcast, don't call htmlspecialchars on arrays because it breaks things
  • fix: image caching issue (invisible characters)
  • fix: broken geolocation database does not prevent playing episodes
  • fix {{ episode.duration.totalMilliseconds }}
  • fix: {{ episode.duration }} returns "00:00" if no duration is set
  • fix: contributor avatar URLs with umlauts
  • enhancement: check for geolocation database validity in tracking debug section
  • enhancement: add current theme and feed URLs to system report
  • Podlove Subscribe Buttons: parameters in templates and shortcodes can override Publisher provided fields: 'title', 'subtitle', 'description', 'cover'


Design Update for Podlove Subscribe Button

  • The button now follows a flat design and has more options for customizability.
  • See for a range of possible display variants.
  • Widget module has been updates to support a color picker and settings for size, format and style. When using the "WordPress Customizer" you get a live preview of the button.
  • If you are using the Template API, have a look at the updated podcast.subscribeButton parameters.


  • fix feed issue that appeared with WordPress 4.5 (wrong content type)


  • when activating the plugin, add mp3 asset and feed to help users get over the most confusing part of the setup
  • fix tracking export: keep httprange
  • fix compatibility with other plugins relying on Spyc library
  • improve tracking: ignore 1-byte requests
  • update user agent library (new/updated clients: Podcat, Downcast, iCatcher, BashPodder)
  • remove <itunes:keywords> from feed (it disappeared from the specification)
  • update recommended image size to 3000x3000 pixel

  • fix Podlove Subscribe Button iTunes link

  • add new "getting started" video to readme


  • fix open_basedir related issues



  • fix '&' issue in some fields when exporting/importing
  • player: pass podcast language code to web player v3
  • open graph: do not include non-downloadable assets
  • open graph: use tracking URLs if available
  • template editor: add scrolling when having many templates in the list
  • auphonic: disable "Open Production" button when no production is selected
  • player: chapters visibility setting now applies to v3 beta player
  • more defensive feed gzipping for compatibility with various caching plugins
  • fix feed discovery cache (can now handle both http and https at the same time)


  • enhance error message when resolving URL fails


  • fix "add new" contributor button
  • fix migration class error
  • fix migration system report display
  • use default WordPress background color in migration wizard



  • When creating a new contributor, social and donation services are saved correctly
  • Deleting a contributor shows the correct confirmation message


  • Podlove Subscribe Button: When an iTunes id is known for a feed, the button does not just pass the feed URL to the client when iTunes or Podcasts App are chosen. It redirects the user to the iTunes directory first. Because if you don't do this, "[it] does not increase your visibility on the iTunes Store or allow you to earn commission as part of the Affiliate Program." (
  • Detect and warn if an episode slug has been used before


Update Web Player v3


Web Player (v3 Beta)

The new web player can be selected in Expert Settings > Web Player. Please try it out and send us your feedback. Thanks!

  • update player
  • add theme player options
  • fix player permalink parameter
  • fix player width on Mobile Safari


  • fix Auphonic workflow bug: when finishing a production, media files would sometimes erroneously be detected as not existing
  • detect when the configured Auphonic Preset does not exist
  • fix focus when adding new related episode rows
  • chosen search fields allow partial searches
  • enable Twig date extension to allow time_diff filter; see Date Extension Documentation


Updating all the things for your pleasure.


  • add template accessor to get WordPress post object
  • fix: template call episode.chapters returns an empty list when there are no chapters
  • fix: deleting image cache when no image cache directory exists
  • fix: cache purge also deletes timeout entries
  • fix: cache purge affects downloads table
  • fix: JavaScript event for secondary download button
  • fix: default template assignment on plugin activation
  • fix: unpublished relates episodes do not appear when using the shortcode or template accessor


  • simplify download buttons ([podlove-episode-downloads style="buttons"]) style to better adapt to themes
  • fix: missing "Show URL" download button in twentyfifteen theme
  • fix: URL structure for YouTube channels
  • fix: player visibility when JavaScript is disabled
  • fix: stop loading nonexisting player assets in WordPress admin area
  • enhanced system report: change wording for open_basedir issue to clarify that it should be fixed but a workaround exists
  • enhanced plugin loading
    • When upgrading from version 1.x to 2.x using PHP 5.3, the upgrade lead to the "White Screen of Death" because 2.x requires PHP 5.4. This case is now handled and the Publisher shows an appropriate admin notice.
    • Some shared hosters seem to have problems with the plugin update process, which leads to the Publisher missing files and breaking the site. This is now also detected and a notice appears, asking the user to manually redownload the plugin.


New Module: Seasons

Do you have seasonal content? We got you covered. The new "Seasons" module allows you to group episodes into seasons. Each season has a title and other optional metadata, like a custom image. You can access all this data using the template system.

New Template accessors:

  • episode.season returns the season for the episode
  • podcast.seasons returns a list of all seasons
  • season.episodes returns a list of all episodes in a season

New Module: Flattr

Everything Flattr related was moved into its own module. If you don't use Flattr, you can turn it off and it gets out of your way.

  • If you are using the Flattr module, we write Flattr payment information into podcast feeds. This way you don't need to rely on the official Flattr plugin to do this. You can probably deactivate it if you were using it since we provide the main functionality within the Publisher now.
  • We recently changed the default flattr parameter in shortcodes. Now there's a setting in Flattr Podcast Settings where you can define the default parameter for contributor shortcodes.

New Module: Related Episodes

You can now express that episodes are related to each other. You can list all related episodes using the new shortcode [podlove-related-episodes] or using the template accessor episode.relatedEpisodes.

Templates & Themes

If you are developing themes, you now have full access to the Publisher Template system. The API is exactly the same as in Twig, just the syntax is different. At the moment, there are 4 entry points:

  • \Podlove\get_episode()
  • \Podlove\get_podcast()
  • \Podlove\get_flattr()
  • \Podlove\get_network()

Please see the "Understanding Templates" guide for more details.


  • Use WordPress Object Cache API to cache model objects. All entities fetched by id are cached and reused within the same page call. Performance gains are most notably in complex templates, which often access the same data repeatedly.
  • Analytics: Update & improve user agent detection library so you can have more accurate analytics.
  • Canonical feed URLs. WordPress respects if you want your URLs to end with a slash or not (you do that by adding or removing the trailing slash from your WordPress permalink settings custom structure). Our feed URLs now respect this choice, too. Furthermore, we permanently redirect to the canonical URL if another one was accessed to ensure all clients access exactly the same feed URL.
  • News from are displayed in the Podlove Dashboard
  • Users with role "author" and higher now have access to the Podlove Dashboard and Analytics. They only have access to dashboard sections that make sense for authors, so they won't see logging, feed or asset validation.
  • Contributors can now be edited in Contributor Settings (instead of Episodes > Contributors)
  • Contributors Social Services: It is now possible to add a YouTube "Channel", not just user profiles
  • Contributors Social Donations: Add "" option
  • Add functionality to automatically determine the duration for episodes. This is especially useful for people who don't use Auphonic, which already determines the duration automatically.
  • We are now able to handle media files that are served without a "Content-Length" header. A specific warning is generated and the size is displayed as "unknown", but the files are treated as valid so they can be played.
  • Add support for Auphonic webhooks. This allows us to import your episode metadata once an Auphonic production is finished — even if you navigated away from the episode page.
  • Podcast cover image can now be uploaded using the WordPress media uploader.
  • Add contributor.gender template accessor
  • Rename network list "description" to "summary" for consistency. In templates list.description is now deprecated. Please use list.summary instead.
  • fix: Shortcodes in episode subtitle and summary are not interpreted any more. Both fields were always considered plain text and having shortcodes leads to various issues, especially in feeds.
  • export files are now gzipped if possible
  • fix JavaScript incompatibility related to Diaspora plugin (#771, #770, #425, thanks @noplanman!)
  • fix: failing geo-lookup does not break tracking links
  • fix: Remove WordPress favicon (since WP 4.3) from podcast feeds if a podcast image is set
  • fix: pasting into a template creates change-marker
  • fix: tracking import does not skip the last few entries


  • fix: erratically missing chapter information in RSS feeds
  • fix: "Allow to skip feed redirects" setting was sometimes ignored


  • fix: web player image fallback to podcast image when an episode image asset is defined but unused
  • fix: gzip compression: only set content type if headers have not been sent
  • fix: in networks, don't schedule template cleanups for blogs without an active Publisher


  • fix: template cache issue where duplicate purge cronjobs could flood the cron system
  • fix: image cache validation (didn't work due to missing library)


  • fix: announcement preview in modules
  • fix: asset validations are always scheduled properly
  • fix: Remove method calls that require WordPress 4.0+ (wpdb::esc_like)


Image Caching, Resizing & Retina Support

We now take better control of podcast images, episode images, contributor avatars and our own social icons. We are able to resize them to ideal sizes, which results in faster page load times for your users. Retina images for higher-resolution displays are also supported. We do this automatically, so all you need to do is click update, lean back and enjoy.

Read all the details in our blog post "Podlove Publisher 2.2: Say hello to image caching"

This update increases the WordPress requirement from 3.0 to 3.5 (due to the required image editing functionality).


  • fix: duplicate feed discovery
  • fix: ignore incomplete feed configurations
  • fix: don't include network admin module css in frontend
  • fix: dashboard episode edit links
  • fix: when deleting WordPress Network sites, trigger plugin uninstall to remove database tables
  • fix: web player flash fallback
  • fix: network templates now also appear in the template widget and template auto-insert setting
  • fix: issue where some database tables were not created
  • fix: podcast covers are displayed in frontend admin menu bar
  • show Twig template errors in dashboard log
  • web player template tag can set tracking context: episode.player({context: 'landing-page'})
  • add episode.categories template tag


  • deprecated episode.imageUrl, use episode.image instead
  • deprecated episode.imageUrlWithFallback, use episode.image({fallback: true}) instead
  • deprecated podcast.imageUrl, use podcast.image instead
  • deprecated service.logoUrl, use service.image instead
  • deprecated contributor.avatar, use contributor.image instead

While you are changing these, consider scaling them down appropriately. Your images are probably huge but in many cases you don't need the full size. So instead of episode.image or episode.image.url, specify a size, like this episode.image.url({width: 200}).


  • add warning in system report for users with default permalink settings (which is problematic for some podcast clients)
  • enhancement: delete caches in all blogs when changing a network template
  • enhancement: delete caches when changing the template default assignment
  • enhancement: do not rely on openssl module
  • fix: add flattr setting to contributors general tab
  • fix: duplicate episodes when using podlove.episodes template accessor
  • fix: correctly fire plugin activation hooks in network mode
  • fix: ensure network module is activated correctly
  • fix: "Add New" link in empty list tables


  • fix issue with users that have open_basedir set, which lead to all assets being invalid


  • fix: remove obsolete "Add New" template button from network templates screen
  • fix: template autoinsert does not use deprecated "id" parameter
  • fix: template widget does not use deprecated "id" parameter
  • fix: duplicate episodes in feeds
  • fix: some server configurations (especially on shared webhosting) break cURLs ability to follow HTTP redirects. We now check for that configuration and, if necessary, resolve the URL manually before continuing normally.
  • fix: XSS vulnerabilities in contributors search
  • fix: Template accessor now correctly returns the id, not the uri. contributor.uri is the new accessor to get the uri.
  • fix: Filtering contributions by id is now correctly affected by other filters, like group and role. Until now, podcast.contributors({id: 'james', role: 'on-air'}) always returned James, no matter if he had the given role or not.
  • add "Add New Contributor" item to contributor select list. Selecting it opens the screen to add a new contributor.
  • add Twig version to system report


Networks: WordPress Multisite Support is Here

  • dedicated WordPress Multisite support
  • "My Sites" menu features podcast covers and menus include often used pages like "Podlove Dashboard" and episodes
  • Network Dashboard provides a birds-eye view over your podcast empire
  • Network-Templates that are accessible in every podcast
  • Podcast lists: give templates access to multiple podcasts at once, allowing you to automatically list all podcasts in your network, the 10 last episode releases in your network and much more


We added a happy bunch of widgets to make your life easy.

  • Podcast Information: Display cover, subtitle and summary of your podcast
  • Recent Episodes: Display a list of recent episodes, with cover art and duration if you like
  • Template: Display any Publisher template in a widget area
  • Podcast License

The Subscribe Button Widget now defaults to "Big with Logo" and auto-width. It has also been renamed to "Podcast Subscribe Button" to be distinguishable from the new standalone plugin.


  • add accessors {{ podcast.landingPageUrl }}, {{ podcast.subscribe_button }} (see
  • add accessor {{ flattr.button }} (see
  • add accessor {{ episode.podcast }}
  • add query parameters to ``{{ contributor.episodes }}`:

    • group: Filter by contribution group. Default: ''.
    • role: Filter by contribution role. Default: ''.
    • post_status: Publication status of the post. Defaults to 'publish'
    • order: Designates the ascending or descending order of the 'orderby' parameter. Defaults to 'DESC'.
      • 'ASC' - ascending order from lowest to highest values (1, 2, 3; a, b, c).
      • 'DESC' - descending order from highest to lowest values (3, 2, 1; c, b, a).
    • orderby: Sort retrieved episodes by parameter. Defaults to 'publicationDate'.
      • 'publicationDate' - Order by publication date.
      • 'recordingDate' - Order by recording date.
      • 'title' - Order by title.
      • 'slug' - Order by episode slug.
      • 'limit' - Limit the number of returned episodes.


  • add gender contribution statistics to dashboard
  • add expert setting "Allow to skip feed redirects"
  • add warning in tracking settings when default permalink structure is used
  • add support for Auphonic cover art
  • add support for Jetpack "Publicize" module to podcast post type
  • add warning when open_basedir is set to system report
  • add daily cleanup of logging table (only keep entries of previous 4 weeks)
  • contributor editing has a tabbed interface
  • improved Podlove Dashboard performance
  • Open Graph title does not include episode subtitle any more. If a subtitle is available, it is put in front of the summary in the description tag.
  • fix: remove Jetpack "Site Icon" from podcast feeds
  • fix: empty template editor when last template is deleted
  • fix: empty caches when a scheduled episode gets published
  • fix analytics episode average calculation for ancient episodes

API changes

  • Flattr parameter in [podlove-episode-contributor-list] now defaults to "no". If you need to reactivate it, use [podlove-episode-contributor-list flattr="yes"]
  • [podlove-web-player] was renamed to [podlove-episode-web-player] to avoid clashes with the standalone web player plugin. For now, the old shortcode still works.
  • [podlove-subscribe-button] was renamed to [podlove-podcast-subscribe-button] to avoid clashes with the standalone button plugin. For now, the old shortcode still works.


  • fix: template editor cursor position in Safari (by changing to a different theme that doesn't use bold styles)
  • fix: double escaped feed enclosure URLs when using non-pretty-permalinks


  • fix: missing flattr attribute for contributors
  • fix: subscribe button description is properly wrapped in p-tags
  • fix: faulty valid file if check returns "unreachable" but includes a Content-Length header
  • fix: more thoughtful handling of ETags when validating files prevents failing updates
  • fix: "NaN" analytics should display properly now
  • fix: off-by-one display in analytics
  • fix: don't HTML-encode quotes in episode title/subtitle/summary since it leads to invalid feeds
  • add to the services list
  • add support for RSS channel image tag


Allow Non-Admins to access Analytics

Analytics have a new capability called "podlove_read_analytics". You can provide access to, for example, editors, using the following code snippet:

function podsnip_add_capability() {
    // default roles: editor, author, contributor, subscriber
    $role = get_role('editor');
add_action( 'admin_init', 'podsnip_add_capability');

You can add snippets using the "Code Snippets" plugin.


  • fix: use proper HTTP method to create/update/delete templates
  • fix: don't remove URLs from chapter marks when saving
  • fix: optional episode form elements can be saved


  • fix: include missing YAML library
  • fix: namespacing issue in uninstall procedure
  • fix: debug tracking example file must be downloadable



  • fix: properly sanitize episode form data (fixes "A wild Backslash appears")


  • format download numbers in episode list
  • remove check for PHP setting allow_url_fopen because we don't rely on it any more


Download Analytics

You want to know more about who listens to your podcast? We got you covered.

We spent months of research and prototyping to find a reliable way of tracking. We are confident that our approach works and produces trustworthy data. If you have not done so yet, you have to activate tracking in Expert Settings -> Tracking.

If you are interested in all the technical details, head over to

But what you are seeing now is just the beginning. We have a plethora of ideas on how to give you even more insight into the data available. Stay tuned!

We are curious what you think about the current analytics interface? What do you love? What do you hate? What do you miss? Head over to our new community site and share your thoughts:


  • fix: use home_url() instead of site_url() to generate tracking URLs
  • fix: tracking export does not get stuck forever when it fails once
  • fix: disappearing podcast description settings
  • fix: add function to repair button that removes duplicate episode entries
  • fix: template editor does not forget changes if you reselect a template after changing it
  • fix: improve uninstall routine
  • fix: wrong month when choosing Auphonic productions
  • fix: deactivate Jetpack's OpenGraph when the Publisher OpenGraph module is active

Other Changes

  • add services: miiverse, prezi
  • add missing services via repair button
  • Bitlove: add <bitlove:guid> to RSS feed and use this to identify files
  • moved episode GUID regeneration into separate metabox because it's rarely required
  • always check media files when opening an episode edit page
  • move podcast cover art from media tab to description tab

  • Improved feed settings

    • check for missing and duplicate slugs
    • check for missing asset assignment
    • show prominent warning for detected problems
    • provide contextual help to better understand what's required and why

Removed Functionality

  • removed module "Auphonic Production Data"
  • removed the following shortcodes (use Template Tags instead)
    • [podlove-episode-subtitle]
    • [podlove-episode-summary]
    • [podlove-episode-slug]
    • [podlove-episode-duration]
    • [podlove-episode-chapters]
    • [podlove-episode field="..."]
    • [podlove-podcast field="..."]
    • [podlove-show field="..."]
    • [podlove-podcast-license]
    • [podlove-episode-license]
    • [podlove-contributors] (use [podlove-episode-contributor-list] instead)
    • [podlove-contributor-list] (use [podlove-episode-contributor-list] instead)
  • removed the following template tags
    • {{ contributor.publicemail }} (use social module instead)
    • {{ license.html }} (use {% include '@core/license.twig' %} instead)


  • fix: catch failed IP categorizations
  • fix: solve PHP notice
  • add custom icon to close template fullscreen mode
  • add custom contributor css to look nicely in twentyfifteen theme


  • enable some WordPress template tags in Twig Templates: is_archive(), is_post_type_archive(), is_attachment(), is_tax(), is_date(), is_day(), is_feed(), is_comment_feed(), is_front_page(), is_home(), is_month(), is_page(), is_paged(), is_preview(), is_search(), is_single(), is_singular(), is_time(), is_year(), is_404(), is_main_query()
  • enable episode filtering by category slug: podcast.episodes({category: "kitten"})
  • redesigned template editor interface
  • fix feed cache issue which lead to enclosure URL mixups
  • display PHP deprecation warning aggressively for everyone below 5.4


  • Cache feed items. This drastically reduces load when no feed proxy is used; especially in a "full feed" with many episodes.
  • Add Luxembourgish to languages


Subscribe Button fixes & enhancements:

  • don't pass undiscoverable feeds to the button
  • don't show a button if no feed is available
  • change defaults to "big-logo" and "autowidth"
  • fix issue with internal format


Say hello to the Podlove Subscribe button, the Universal button to subscribe to buttons in the desired podcast client or player website. It ships as a widget, so you can easily display it on your site. For more finegrained positioning, you can use the [podlove-subscribe-button] shortcode.

More info on those sites:

Other Changes

  • fix contributor.episodes: only show published episodes
  • fix redirect form: remove url validation
  • fix HEAD requests for download URLs
  • redirects are counted and displayed in the redirect settings



  • fix social repair module
  • empty rss feeds now render properly
  • fix issue of randomly breaking URLs
  • fix missing files when using auto-publish feature by automatically validating files before publishing
  • fix "open" link for last contributor donations item
  • fix javascript error in license ui

New Features

  • add basic client-side input validation to avoid typing errors: Leading and trailing whitespace will be removed automatically. URL and email fields are automatically syntax checked.
  • add support for scientific networks: ResearchGate, ORCiD, Scopus
  • add explicit support for "Duplicate Post" plugin: duplicated episodes now regenerate GUIDs and contributions are copied, too

Enhancements & Others

  • contributors form:
    • switch public name and real name fields
    • remove public email field (see deprecations)
    • move contact email field to general section
  • ADN module: add option to not fall back on episode cover when no episode image is present
  • adjust Bitlove script so it plays well with https sites
  • include date in tracking export filename
  • move web player settings to expert settings
  • public contributor emails are handled by the social module now, instead of being a contributor attribute

Deprecations & Migration

If you are using {{ contributor.publicemail }} in your templates, you should change it to something like the following:

{% for service in{type: "email"}) %}
    <a target="_blank" href="{{ service.profileUrl }}">{{ service.rawValue }}</a>
{% endfor %}


  • fix bug in contribution counting
  • simplify internal cache key handling to avoid technical issues
  • support more licenses (CC4.0, CC0, Public Domain)
  • tracking: don't count HEAD requests
  • tracking: add manual migration notice to delete accidentally recorded HEAD requests


  • improve HHVM compatibility
  • resolve bug concerning internal article linking
  • use WordPress method to generate default episode slugs for better results (if you are using a plugin that changes permalink slug behavior, that affects episode slugs now, too)


Episode Form Improvements

  • Reorder components
  • Display episode title in episode meta box
  • Auto-generate media file slug based on the episode title. This is useful if your file slugs match the episode title. But don't worry, you can still change it to your liking if you prefer a different naming scheme.


  • Podlove Dashboard supports screen options
  • fix contribution counting in contributor table (you may have to hit the "repair" button in Podlove > Support if you still see wrong numbers)
  • fix tracking data export
  • fix missing OpenGraph metadata
  • improved redirects: added sortability and individual entries can be deactivated without being deleted
  • is accessible via template API now

As mentioned before, we will be phasing out PHP 5.3 soon. Please read the corresponding blog post for more details:


  • fix caching issue (cache keys were too long in last update, resulting in no cache hits at all)
  • fix error when creating a new episode


Improvements to media file slugs

  • Slugs may contain slashes now. This allows storing asset files in subfolders and using the WordPress media uploader to manage files.
  • Media file validation is more consistent: when you get a green checkmark, the file is guaranteed to be valid and reachable.


  • Once we release Publisher 2.0, we will increase the minimum PHP version to 5.4 and recommend 5.5. A notice is now displayed in the system report if you are running a version requiring an upgrade.
  • Rename a method to avoid a bug in early PHP 5.3 versions


  • tracking now includes range headers
  • plugin-migrations are more robust now
  • add caching for OpenGraph module
  • fix escaping in database logger
  • fix feed validator for sites not using "pretty permalinks"
  • fix dashboard box state saving
  • fix generation of faulty URLs when tracking was on but pretty permalinks off
  • fix auto-insertion of nonexisting templates
  • fix routing issues when /%category%/%postname% is used as permalink structure
  • fix rare cache concurrency issues by introducing a 24h auto-expiry
  • remove "Critical Podlove Warnings" — they are scary and don't help a lot


  • Hotfix: remove wrong output in HTML sites
  • rework support page


Various Fixes and Enhancements

  • Supply web player API with more data: "publicationDate" contains an ISO-8601 date and "show.url" the URL to the show.
  • Auphonic UI improvement: When selecting a production, the "Select existing production" option disappears.
  • Don't pass redirect=no parameter to feed URLs
  • Ensure web player IDs are unique to avoid rendering bugs
  • Fix caching bug that lead to disappearing web player and download buttons
  • Fix redirection UI bug
  • Flush rewrite rules after migrations to avoid broken links



A simple yet effective caching strategy has been implemented. This is used to cache rendered site segments. A complete cache invalidation happens when podcast related data changes. This should be a good start since such data rarely changes (mostly when a new episode is published). In a Multisite setup, each site handles its cache separately.

This is implemented using the Transients API. By default, WordPress uses the database as a caching backend. If you want to squeeze out even more speed, consider installing a Persistent Cache Plugin which replaces the database with a more efficient caching backend, such as memcached or APC. That might require some fiddling around, though.

Caching can be deactivated in the wp-config.php with the following line: define('PODLOVE_TEMPLATE_CACHE', false);

  • Cache Publisher templates
  • Cache feed discovery header
  • Cache Bitlove widget
  • Other minor performance improvements


  • There is now a default template containing the player and download section
  • Episode contributions can be sorted by comment and position, for example: episode.contributors({orderby: "comment", order: "DESC"}) or episode.contributors({orderby: "position", order: "ASC"})
  • Iterate over the list of episode tags: {% for tag in episode.tags({order: "DESC", orderby: "count"}) %} {{ }} {% endfor %}


  • Display available processing time in Auphonic production box
  • Episode slugs may contain a wider variety of characters now, such as umlauts.
  • Feeds now only contain contributors with an URI. Also, output of contributors in feeds can be filtered by group and/or role.
  • New donation option for Auphonic Credits
  • Remove scary debug output on failed media file validations. This can be found in the log now.
  • Fix Auphonic authentication issue by providing the whole certificate chain
  • Fix contributor related feed rendering issue


We decided to remove the "Force Download" feature. Its purpose was to guarantee that a click on a download button results in a download dialogue, rather than playing the media file in the browser. The way we implemented it worked, but came with many downsides. Just to name two of them: 1) We doubled the traffic and significantly increased load since we had to pull all the bytes through the webserver in addition to the download server (even if both are the same). 2) It was impossible to support HTTP range requests. That means no client was able to resume a broken or paused download. It also seemed to lead to strange behaviour in the web player.

But there is another, superior way to force downloads: configure your download server. The important setting here is Content-Disposition.

In Apache, you need the headers module (a2enmod headers on Debian-ish distributions). Then you can add this to your configuration:

<FilesMatch "\.(mp3|m4a|ogg|oga|ogv|opus|mpg|m4v|webm|flac|pdf|epub|zip)$">
    Header set Content-Disposition attachment


$HTTP["url"] =~ "\.(mp3|m4a|ogg|oga|ogv|opus|mpg|m4v|webm|flac|pdf|epub|zip)$" {
    setenv.add-response-header = ("Content-Disposition" => "attachment")


if ($request_filename ~ "\.(mp3|m4a|ogg|oga|ogv|opus|mpg|m4v|webm|flac|pdf|epub)$"){
    add_header Content-Disposition 'attachment';

Other Changes

  • Trim whitespace around some URLs that appear in the podcast feed.
  • Update certificate for
  • Fix an issue with saving contributors in Podlove > Podcast Settings > Contributors



  • Never redirect media file URLs to trailing-slash-URLs (WordPress has a habit of adding a trailing slash to every URL via redirect. That is undesirable here, since it create two download intents).
  • Handle empty user agent strings
  • Do not write anything to tracking-database unless tracking is in analytics mode.


  • Compress export files via gzip.
  • Add tracking data to export files.



  • For increased compatibility (we are looking at you, iTunes), new file URLs without parameters are used when analytics are active.
  • Add &ptm_file=<episode-slug>.<file-extension> parameter to the end of Parameter-URLs, so tools like wget generate a filename with a correct extension by default.
  • Feed URLs now support a &tracking=no parameter, which dynamically disables tracking parameters in feed enclosures. This is introduced for debugging purposes and is only mentioned here for the sake of completeness.
  • Fix PHP glitch that caused tracking to go into "Tracking URL Parameters" mode even when it was disabled

ADN Module

  • Fix issue that could lead to repostings
  • Fix tags description
  • Messages longer than 256 characters will be shortened now and "…" will be appended


  • Fix: reenable "force download" option


We discovered incompatibilities between our tracking implementation and some clients. To avoid further trouble, we are deactivating tracking until we solve the issue. The option is still available, we just switch it off automatically with this release and it isn't on by default any more.

If you're of the curious type, feel free to activate it and tell us any issues you run into. Thanks!


  • Fix: When tracking was active but no geo-location database available, downloads would fail. This exception is handled correctly now. You can check the status of tracking and the geo-location database in Expert Settings > Tracking


  • Feature: Services in templates can be filtered by their type. That way, you can, for example, iterate over all Twitter accounts via{type: "twitter"}). The previous "type" parameter (for choosing between "social", "donation" and "all") has been renamed to "category". All default templates have been adjusted accordingly but if you were using this API in a custom template, you need to change it.
  • Feature: podcast.contributors in templates are sorted by name now. You can change the order by writing podcast.contributors({order: "DESC"}). When using grouping, each group will be sorted separately.
  • Feature: podcast.contributors({scope: "global-active"}) is limited to contributors with at least one contribution in a published episode. To list contributors ignoring this limitation, use podcast.contributors({scope: "global"}). "global-active" is the new default.
  • Feature: Allow manual posting of ADN announcements
  • Feature: Add contributor support to ADN announcements
  • Feature: We are beginning to implement download intent tracking and statistics. As a first step, we are now tracking download intents. A following release will contain an analytics section where you can examine the statistics.
  • Feature: The feed <link> can be configured in Expert Settings > Website now. It still defaults to the home page. Other options include the episode archive and any WordPress page.
  • Enhancement: remove encryption for "protected feed" password to prevent autofill browser features to destroy contents
  • Enhancement: default WordPress search now covers episode subtitle, summary and chapters
  • Enhancement: add Vimeo, Gittip and to services
  • Enhancement: The expert setting "Display episodes on front page together with blog posts" changed to "Include episode posts on the front page and in the blog feed". So if you set it, episodes will additionally appear in /feed. However, only in the form of a post. You will not find enclosures, iTunes metadata etc. in /feed items.
  • Enhancement: sort chapters imported from Auphonic by time
  • Enhancement: Changes to feed list: redirect URL is shown and added screen options to hide columns
  • Enhancement: Added Publisher version as an attribute to the export file. If a file is imported with a version different from the current Publisher, a warning is displayed.
  • Fix: enable group and role selection in contributor shortcodes
  • Fix: failing delayed ADN broadcast
  • Fix: stop sending ADN announcements for old episodes
  • Fix: refresh of Auphonic presets keeps current preset
  • Fix: contributor.episodes does not return duplicate episodes any more
  • Fix: Jabber URL scheme is now prefixed with jabber:
  • Fix: Display podcast subtitle in feed description (it was the blog description before)
  • Fix: Hide contributors missing a URI from feeds
  • Fix: Escaping issue when saving podcast description settings


  • Feature: Direct episode access in templates via {{ podcast.episodes({slug: 'pod001'}).title }}
  • Feature: Episodes in templates can be filtered and ordered, for example {{ podcast.episodes({orderby: 'title', 'order': 'ASC'}) }}. For details, see podcast.episodes documentation
  • Feature: Direct contributor access in templates via {{ podcast.contributors({id: 'john'}).name }}
  • Feature: Add shortcode [podlove-podcast-social-media-list], which lists all social media accounts for the podcast
  • Feature: Add shortcode [podlove-podcast-donations-list], which lists all donation accounts for the podcast
  • Feature: Add tag support for Auphonic
  • Enhancement: Add "Save and Continue Editing" buttons to all table based management screens
  • Enhancement: Use translations for month and day names in formatted template dates (if a language other than english is used)
  • Enhancement: Add refresh buttons for Auphonic preset selector
  • Enhancement: Pass more data to web player (as preparation for the next release)
  • Enhancement: Improved export format: It has its own namespace and a version now. Publisher version and export date are included as XML comments. XML elements are indented for better readability.
  • Remove default content for new templates
  • Fix: "Network Activate" works now
  • Fix: group and role filters for [podlove-podcast-contributor-list] shortcode work as expected now
  • Fix: Add services and donations to export format
  • Fix: episode.player in episode loops, outside the WordPress loop works now
  • Fix: Auphonic chapter integration issue
  • Fix: Instagram URL scheme


  • Fix: contributor services will be saved correctly
  • Enhancement: add a donation column to contributor management table


Changes to the Templating System


and episode.publicat

Is Podlove Podcast Publisher free?

Yes! The core features of Podlove Podcast Publisher are and always will be free. Paid Professional Support is available but not necessary to run the plugin.

Are there Download Statistics?

Yes! Podcast Downloads can be tracked and analyzed. You can easily see how many people downloaded you podcast episodes, which clients they used, if they prefer to subscribe to the feed or listen on your website using the web player—and much more.

Where can I host my podcast files?

Any storage where you have control over the file naming is compatible with Podlove Podcast Publisher. You can manage files using a simple FTP/sFTP or use services like Amazon S3.

Where can I ask questions and get support?

Free support where questions are answered by the community is available in the Podlove Community Forum. There is a German community in the Sendegate. Professional Support by the plugin developer is also available.

How can I help the project?

The continued success of Open Source project relies on the community. There are many ways you can help:

This product includes GeoLite2 data created by MaxMind, available from

Version 2.4.5

Requires WordPress version: 3.5 or higher

Compatible up to: 4.7.2

Last Updated 09 Feb 2017

Date Added: 26 Jun 2012

Plugin Homepage


4.7 stars
25 ratings


Not Enough Data

Works: 0
Broken: 0