Skip to main content

Chapter Markers

Chapter Markers lets listeners jump to any section of an episode from their podcast app or from your episode page. It is included in every Benecaster plan — no separate purchase required.


What chapters do

Chapters divide an episode into named, timestamped sections. Compatible podcast apps show a chapter list alongside the playhead — listeners tap any chapter title to jump directly there. On your episode page, Benecaster renders the same chapter list as a clickable seek list so web listeners get the same navigation.

Chapters are most useful for:

  • Long-form interviews — let listeners skip to the guest introduction, a specific question, or the resources section
  • Educational episodes — named sections make content easier to revisit
  • Multi-topic episodes — listeners who came for one story aren’t forced to hunt for it

Adding chapters to an episode

Open an episode and go to the More tab. The Chapters section sits between Credits and Errata. For each chapter row:

Field Required Notes
Start time Yes Format: HH:MM:SS — e.g. 00:12:30. Invalid timestamps show an inline error and are dropped on save.
Title Yes The chapter label shown in apps and on the episode page.
URL No Optional link displayed alongside the chapter in apps that support it.
Image No Opens the WordPress media library. Square images work best. Shown in compatible apps while that chapter plays.

Use the ↑ ↓ arrows to reorder chapters. Chapters with invalid timestamps are dropped silently when the episode is saved — fix the format before saving if a row disappears.

The chapter count displays in the section header as each row is added.

The chapter editor panel in the episode editor


How chapters appear in your RSS feed

Benecaster outputs chapters in two formats simultaneously — no configuration required.

Podlove Simple Chapters

A <psc:chapters version="1.2"> block is embedded directly in the RSS <item>. Timestamps are written as HH:MM:SS.000 (millisecond precision, as the spec requires). Link URLs render as href; images resolve to their full-size attachment URL and render as image.

Apps that use this format: Overcast, Pocket Casts.

Podcasting 2.0 JSON chapters

A <podcast:chapters> tag points to a JSON endpoint served by your site:

https://yoursite.com/wp-json/benecaster/v1/episodes/{id}/chapters

The JSON follows the Podcasting 2.0 chapters specification v1.2.0. The endpoint is public (no authentication), cached for 5 minutes, and supports conditional requests (ETag / If-None-Match) to avoid redundant fetches by podcast apps.

Apps that use this format: Apple Podcasts, Podcast Addict, Fountain, Podverse, Castopod, and any other Podcasting 2.0 compatible app.

App support summary

App Format used
Overcast Podlove Simple Chapters
Pocket Casts Podlove Simple Chapters
Apple Podcasts Podcasting 2.0 JSON
Podcast Addict Podcasting 2.0 JSON
Fountain Podcasting 2.0 JSON
Podverse Podcasting 2.0 JSON
Any Podcasting 2.0 app Podcasting 2.0 JSON

Apps that support neither format display no chapters — the episode still plays normally.


Displaying chapters on the episode page

Benecaster renders a chapter list between the audio player and the episode description. Each row is a button that seeks to that timestamp when clicked. Rows that include a link URL show a secondary external link below the seek button.

The chapter section is suppressed entirely when an episode has no chapters. No empty container is left in the markup.

The template is at templates/episode/chapters.php and can be overridden by a theme at {theme}/benecaster/episode/chapters.php.

CSS hooks:

Class Element
.benecaster-episode-chapters Outer <section> wrapper
.benecaster-episode-chapters-list The <ol> or <ul> containing all rows
.benecaster-episode-chapters-item Each list item
.benecaster-episode-chapters-seek The <button> that triggers seek
.benecaster-episode-chapters-timestamp The timestamp label inside the button
.benecaster-episode-chapters-title The chapter title label inside the button
.benecaster-episode-chapters-link The secondary <a> link (present only when a URL is set)

Seek behavior is handled by an inline <script> block in the template — no separate JavaScript asset is required. Clicking a .benecaster-episode-chapters-seek button sets audio.currentTime and calls audio.play() on the nearest .benecaster-audio-player element. On episodes that are video-only or embed-only, the chapter list renders but the seek interaction has no effect.


Auto-suggest from transcript

When the Transcription Service add-on is active and a transcript exists for an episode, an Auto-suggest chapters button appears in the Chapters section of the episode editor. Clicking it asks Benecaster to analyze the transcript and suggest chapter timestamps and titles. The suggestions pre-fill the chapter editor — you review, edit, and confirm them before saving.

The button is hidden (not disabled) when the Transcription Service add-on is inactive. If the add-on is active but no transcript exists for the episode, the button is present but returns no suggestions.

This is the fastest way to chapter a long episode: request a transcript, let Benecaster identify natural topic breaks, and adjust the suggestions rather than writing chapters from scratch.


For developers

benecaster_episode_chapters — filter the chapter list before it is rendered on the episode page. Return an empty array to suppress the chapter section entirely on that render pass. This filter does not affect RSS output — the feed reads chapters directly from post meta.

apply_filters( 'benecaster_episode_chapters', array $chapters, int $episode_id, int $show_id )

See the add-chapter-image-to-front-end-list recipe for an example that injects artwork into each chapter row.

benecaster_chapter_autosuggest — add-ons hook this filter to power the Auto-suggest button. Return an array of {timestamp, title, url?, image_id?} rows. When no hook is registered or the filter returns an empty array, the endpoint responds with 501.

apply_filters( 'benecaster_chapter_autosuggest', array $chapters, int $episode_id, WP_Post $post )

See the suggest-chapter-markers-from-transcript recipe.

See Also