Plugin Directory

Podlove Podcast Publisher

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


Updating all the things for your pleasure.


  • add template accessor episode.post 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 podlove.org 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 "paypal.me" 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: App.net 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 contributor.id 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 http://docs.podlove.org/reference/template-tags/#podcast)
  • add accessor {{ flattr.button }} (see http://docs.podlove.org/reference/template-tags/#flattr)
  • 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 trakt.tv 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 http://docs.podlove.org/guides/download-analytics/.

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: https://community.podlove.org/


  • 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 contributor.services({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
  • contributor.id 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: http://podlove.org/2014/08/14/podlove-publisher-2-phasing-out-php-5-3/


  • 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"}) %} {{ tag.name }} {% 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 auth.podlove.org
  • 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 podcast.services({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 about.me 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.publicationDate are DateTime objects now. Available accessors are: year, month, day, hours, minutes, seconds. For custom formatting, use episode.recordingDate.format("Y-m-d H:i:s") for example. Calling episode.recordingDate directly is still supported and defaults to the format configured in WordPress.

Other Changes

  • Enhancement: Add refresh buttons for ADN patter and broadcast channel selectors
  • Fix: Avoid "Grey Goo" scenario of self-replicating contributors


  • Hotfix: solve migration issue


Changes to the Templating System

  • New filter: padLeft(padCharacter, padLength) can be used to append a character to the left of the given string until a certain length is reached. Example: {{ "4"|padLeft("0",2) }} returns "04";
  • For consistency {{ contributor.avatar }} is now an object. To render an HTML image tag, use {% include '@contributors/avatar.twig' with {'avatar': contributor.avatar} only %}.
  • {{ episode.duration }} has been turned into an object to enable custom time renderings. The duration object has the following accessors: hours, minutes, seconds, milliseconds and totalMilliseconds.


  • {{ episode.duration }} should not be used any more. The default templates are updated but if you have used it in a custom template, you must replace it. Example: {{ episode.duration.hours }}:{{ episode.duration.minutes|padLeft("0",2) }}:{{ episode.duration.seconds|padLeft("0",2) }}
  • {{ episode.license.html }} and {{ podcast.license.html }} are deprecated. Use {% include '@core/license.twig' %} for the previous behaviour of choosing the correct license based on context. If you want to be more specific, use {% include '@core/license.twig' with {'license': episode.license} %} or {% include '@core/license.twig' with {'license': podcast.license} %}.

Other Changes

  • Feature: ADN Module supports broadcasts
  • Enhancement: Contributor shortcode defaults to donations="yes" to avoid confusion
  • Enhancement: [podlove-episode-downloads] now uses templates internally
  • Enhancement: Added 500px, Last.fm, OpenStreetMap and Soup to Services
  • Enhancement: Use custom contributor social/donation titles as icon titles
  • Enhancement: Template form has a "Save Changes and Continue Editing" button now
  • Enhancement: feed validation is asynchronous now and has improved performance
  • Enhancement: Licenses have a new interface and are compatible with Auphonic now: they can be imported from a finished production and are included when creating a production.
  • Enhancement: Default MySQL character set is utf8 now when creating tables
  • Enhancement: Add datepicker for episode recording date
  • Fix: all default contributors appear in new episodes again
  • Fix: change Tumblr URLs from https to http since Tumblr does not support them
  • Fix: [podlove-podcast-contributor-list] shows the correct contributors now
  • Fix: internal template warning when accessing empty contributor roles or groups
  • Fix: episode rendering when no files are available
  • Fix: flattr script in rss feeds
  • Fix: importer issue where sometimes modules would not activate properly


  • Feature: add template filter formatBytes to format an integer as kilobytes, megabytes etc. Example: {{ file.size|formatBytes }}
  • Feature: New accessor {{ file.id }}. This is required to generate download forms.
  • Fix: [podlove-episode-contributor-list] shortcode: Firstly, the "title" attribute works again. Secondly, output by group is optional now and defaults to "not grouped" (as it was before 1.10). If you are using contributor groups and would like grouped output, use [podlove-episode-contributor-list groupby="group"]
  • Fix: division by zero bug in statistics dashboard
  • Fix: parse time in statistics dashboard correctly as normalplaytime
  • Fix: add missing template accessor {{ episode.recordingDate }}
  • Remove separate "publication date" field in episodes. Instead, use the episode post publication date maintained by WordPress. It can be accessed via {{ episode.publicationDate }}
  • Fix: missing contributor-edit-icon on last entries


  • Fix: podlove-episode-contributor-list shortcode: add support for "group" and "role" attributes
  • Fix: podlove-episode-contributor-list shortcode: fix broken flattr button
  • Fix: feed widget: only compress if zlib extension is loaded


All-new, mighty Templating system

You can now use the Twig Template Syntax in all templates. Access all podcast/episode data via the new template API. Please read the Template Guide to get started.

If you have used templates before, please note that some shortcodes are now DEPRECATED. That means they still work but will be removed at some point. Following is a list of affected shortcodes and their replacements:

Instead of [podlove-web-player], write {{ episode.player }}.

Instead of [podlove-podcast-license], write {{ podcast.license.html }}.

Instead of [podlove-episode-license], write {{ episode.license.html }}.

Instead of [podlove-episode field="subtitle"], write {{ episode.subtitle }}. Instead of [podlove-episode field="summary"], write {{ episode.summary }} etc. When in doubt, look at the Episode Template Reference.

Changing the podcast data shortcodes works exactly the same: Instead of [podlove-podcast field="title"], write {{ podcast.title }} etc. When in doubt, look at the Podcast Template Reference.

Other Changes

  • Feature: The Podlove dashboard includes a section for feeds if you activate the "Feed Validation" module. It is intended as an overview for the state of your feeds. It shows the latest modification date, the number of entries, compressed and uncompressed size and the latest item. Additionally, you can validate your feeds against the w3c feed validator right from the dashboard.
  • Feature" Better Bitlove integration. There is a new setting in Podlove > Podcast Feeds > Directory Settings called "Available via Bitlove?". It checks if there is a corresponding Bitlove feed and verifies it on a regular basis.
  • Feature: Support for the oEmbed format
  • New shortcode: [podlove-episode-list] lists all episodes including their episode image, publication date, title, subtitle and duration chronologically. This replaces the archive pages generated by the Archivist - Custom Archive Templates plugin, if you are using it right now.
  • New shortcode: [podlove-feed-list] lists all public feeds
  • New shortcode: [podlove-global-contributor-list] shows all podcast contributors and lists related episodes.
  • New shortcode: [podlove-podcast-contributor-list] shows regular podcast contributors
  • Enhancement: The feed title may now include the asset title for easier discovery. This setting can be found at Podlove > Feed Settings
  • Changed shortcode: [podlove-contributor-list] is DEPRECATED. Please use [podlove-episode-contributor-list] instead.
  • Enhancement: add "autogrow" feature to chaptermarks text field
  • Enhancement: globally hide the migration-tool banner once dismissed rather than per-client via cookie
  • Fix: When setting the chapter asset to manual, delete all chapter caches to avoid hiccups
  • Fix: Contributor links in the backend use an ID now rather than the contributor slug. That way they work when no slug is set.
  • Fix ADN backslash escaping issue in post titles
  • Fix: all contributions can be deleted


  • Enhancement: Take over chapters when switching from chapter asset to manual
  • Enhancement: Contributor tables look better in a wider range of themes
  • Fix: Auphonic module: Buttons cannot be clicked again while the corresponding action is in progress


  • Enhancement: Split podcast settings into tabs.
  • Enhancement: Import/Export module supports contributors and contributions
  • Enhancement: Separate "default contributors" and "podcast contributors". You can configure default contributors in "Contributor Settings > Defaults" and podcast contributors in "Podcast Settings > Contributors". Display podcast contributors using the shortcode [podlove-podcast-contributor-list].
  • Enhancements: Plethora of adjustments in contributor interfaces to avoid confusions and smoothen workflows
  • Feature: Contributions may have a public comment (to describe the context of the person), which can be displayed in contributor lists.
  • Fix: Skip contributions with missing contributors.


  • Fix: episode images when using manual entry
  • Fix: do not include episodes in blog feed
  • Fix: paged feed calculation of number of pages when using global Publisher default
  • Fix: remove unused IDs from contributor lists


  • Fix: several contributor episode form bugs
  • Fix: sum of all media file sizes in dashboard statistics
  • Add lost bugfix: Bundle crt file to avoid StartSSL trust issues.


  • Enhancement: WordPress has an option to close commenting for posts after a certain amount of days. This now also applies to podcast episodes.
  • Enhancement: Fallback for Contributor Names.
  • We had to change the generated Flattr URL for contributors in episodes to a less error prone scheme. Flattr counts for those buttons will therefore reset to 0 (the actual clicks are not lost! they are just not displayed).
  • fix sum of all media file sizes in dashboard statistics
  • fix license URLs
  • fix feed paging issue
  • Fix: Feed Item Limit is now displayed correctly
  • Fix: Ignore deleted contributors if they were assigned to an Episode or Podcast
  • Fix: activation / deactivation of multiple modules at once works as expected now
  • add filter "podlove_enable_gzip_for_feeds" to disable gzip feed compression
  • Contributor role and group columns will be hidden if no roles or groups were added


  • fix and enhance dashboard statistics
  • gender statistics: use episode contributions instead of contributors for counting


  • fix redirect issue after podcast migrations
  • fix legacy ADN module publishing issue
  • only show itunes:complete in feeds if it is set avoid a feedvalidator.org bug
  • add experimental episode fun facts in dashboard
  • add PayPal Button link in contributor settings
  • other contributor admin enhancements
  • contributor public name defaults to real name now


  • Contributor Module improvements
    • New icon graphics
    • "Contributor Groups" as a new way to divide contributors by participation. For example, you might want to have a "Team" group and one for supporting contributions.
    • No more default roles. It's just not possible to provide a sensible default set. So just add the ones you need :) (existing roles will not be deleted)
    • The contributors defined in Podcast Settings > Contributors are now the default contributors for new episodes
    • Reworked contributor management table. Better use of space, hideable columns, avatars and more.
    • Reworked episode contributor table. Avatars, edit links and more.
    • Support for more services
    • ... and a bunch of other tweaks
  • Web Player Update: compatible with WordPress theme "Twenty Fourteen"
  • Fix: don't gzip feeds when zlib compression is active
  • Fix: episode media file checkbox width for WP3.8
  • Fix: menu icons for WP3.8


  • Fix: gzip feeds on compatible systems only (avoids failing feed generation)
  • Fix: Feed paging (again)


  • Fix: provide global feed limit default on setup
  • Fix: managing contributor roles no longer outputs permission issues
  • Fix: corrected a faulty "Add New" contributor link
  • Fix: paged feeds were broken


  • Fix: Module: Contributors prevent initial migration to impor

Requires: 3.5 or higher
Compatible up to: 4.3.1
Last Updated: 2 weeks ago
Active Installs: 1,000+


4.8 out of 5 stars


0 of 1 support threads in the last two months have been resolved.

Got something to say? Need help?


Not enough data

0 people say it works.
0 people say it's broken.

100,1,1 0,1,0
100,1,1 100,1,1
100,1,1 100,1,1
100,1,1 100,1,1 100,1,1
100,1,1 100,1,1
100,1,1 100,1,1
100,1,1 0,1,0 100,2,2 100,1,1
0,1,0 100,1,1
100,1,1 100,1,1
100,1,1 100,1,1
100,1,1 100,2,2