Filter Hooks Reference
All filter hooks provided by Benecaster core. Each hook name links to its reference page with full parameter docs, return type, usage notes, and code examples.
All filters listed here are Free unless noted otherwise.
Feed
| Filter | Description |
|---|---|
[benecaster_feed_episodes](/docs/benecaster_feed_episodes/) |
Filters the array of episode objects for a feed tier before XML serialisation |
[benecaster_feed_episode_data](/docs/benecaster_feed_episode_data/) |
Filters the data array for a single episode before XML rendering — most granular per-episode customisation point |
[benecaster_feed_enclosure_url](/docs/benecaster_feed_enclosure_url/) |
Filters the audio/video URL placed in the RSS <enclosure> tag |
[benecaster_feed_item_xml](/docs/benecaster_feed_item_xml/) |
Filters the compiled XML string for a single episode item after serialisation |
[benecaster_feed_episode_limit](/docs/benecaster_feed_episode_limit/) |
Filters the maximum number of episodes included per feed tier |
[benecaster_feed_channel_data](/docs/benecaster_feed_channel_data/) |
Filters the channel-level RSS data array before XML compilation; includes new_feed_url key for controlling the <itunes:new-feed-url> tag |
[benecaster_feed_xml](/docs/benecaster_feed_xml/) |
Filters the complete compiled RSS XML string; two call sites — per-tier (string third arg) and assembled multi-tier (string[] third arg) |
[benecaster_podcast_chapters](/docs/benecaster_podcast_chapters/) |
Filters podcast:chapters data for an episode item; Chapter Markers add-on populates automatically |
[benecaster_podcast_transcripts](/docs/benecaster_podcast_transcripts/) |
Filters podcast:transcript entries for an episode item; Transcription add-on populates automatically |
benecaster_feed_podcast2_channel_tags |
Filters the channel-level Podcasting 2.0 tag array before XML output; array pre-populated from show meta (guid, locked, funding, block, txt, license) |
benecaster_feed_podcast2_episode_tags |
Filters the per-episode Podcasting 2.0 tag array before XML output; integration point for Transcription Service (podcast:transcript), Guest Manager (podcast:person), and Chapter Markers (podcast:chapters) add-ons |
benecaster_podcast2_funding_label |
Filters the <podcast:funding> element label text; defaults to “{show title} Listener Support” |
[benecaster_episode_references](/docs/benecaster_episode_references/) |
Filters the references array for an episode before it is returned in REST responses |
Subscriber Engagement
| Filter | Description |
|---|---|
[benecaster_subscriber_engagement_threshold](/docs/benecaster_subscriber_engagement_threshold/) |
Filters the inactivity threshold (days) used by the engagement cron before it marks a subscriber as inactive; override per show |
RSS Output Filters — Premium
All filters in this section require an active paid Benecaster license.
| Filter | Description |
|---|---|
[benecaster_rss_channel_title](/docs/benecaster_rss_channel_title/) |
Filters <title> in the RSS channel |
[benecaster_rss_channel_description](/docs/benecaster_rss_channel_description/) |
Filters <description> in the RSS channel |
[benecaster_rss_channel_image](/docs/benecaster_rss_channel_image/) |
Filters the <itunes:image> URL |
[benecaster_rss_channel_author](/docs/benecaster_rss_channel_author/) |
Filters <itunes:author> |
[benecaster_rss_channel_category](/docs/benecaster_rss_channel_category/) |
Filters <itunes:category> |
[benecaster_rss_extra_channel_tags](/docs/benecaster_rss_extra_channel_tags/) |
Filters additional XML appended to the RSS channel block |
[benecaster_rss_item_title](/docs/benecaster_rss_item_title/) |
Filters <title> per episode item |
[benecaster_rss_item_description](/docs/benecaster_rss_item_description/) |
Filters <description> per episode item |
[benecaster_rss_item_enclosure](/docs/benecaster_rss_item_enclosure/) |
Filters the enclosure array {url, length, type} per episode item |
[benecaster_rss_item_guid](/docs/benecaster_rss_item_guid/) |
Filters <guid> per episode item |
[benecaster_rss_item_pubdate](/docs/benecaster_rss_item_pubdate/) |
Filters <pubDate> per episode item |
[benecaster_rss_extra_item_tags](/docs/benecaster_rss_extra_item_tags/) |
Filters additional XML appended to each episode item |
SSP / PowerPress Import
| Filter | Description |
|---|---|
[benecaster_ssp_import_post_data](/docs/benecaster_ssp_import_post_data/) |
Filters the wp_insert_post() argument array before each SSP draft episode is inserted; override title, status, content, or date |
Episodes
| Filter | Description |
|---|---|
[benecaster_episode_auto_number](/docs/benecaster_episode_auto_number/) |
Filters the auto-assigned episode number when an episode is first published |
[benecaster_episode_itunes_type](/docs/benecaster_episode_itunes_type/) |
Filters the resolved iTunes canonical type for an episode during feed compilation |
[benecaster_episode_description](/docs/benecaster_episode_description/) |
Filters the episode description HTML rendered on the front-end episode page (distinct from benecaster_episode_description_rss which filters the RSS feed description) |
[benecaster_latest_episode_id](/docs/benecaster_latest_episode_id/) |
Filters the resolved episode ID used by [benecaster_latest_episode]; return null to suppress rendering entirely |
[benecaster_episode_audio_url](/docs/benecaster_episode_audio_url/) |
Filters the audio file URL used in the front-end player and episode page |
[benecaster_episode_embed_audio](/docs/benecaster_episode_embed_audio/) |
Filters the rendered HTML for the embedded audio player on the episode page |
[benecaster_episode_video_url](/docs/benecaster_episode_video_url/) |
Filters the video file URL used in the front-end player and episode page |
[benecaster_episode_embed_video](/docs/benecaster_episode_embed_video/) |
Filters the rendered HTML for the embedded video player on the episode page |
[benecaster_episode_share_links](/docs/benecaster_episode_share_links/) |
Filters the share links array for an episode; each entry is {label, url, class}; used in the episode/share.php template part |
[benecaster_show_episode_player](/docs/benecaster_show_episode_player/) |
Filters whether the episode player is rendered on the episode page; return false to suppress the player entirely (locked-state template still renders) |
[benecaster_episode_is_accessible](/docs/benecaster_episode_is_accessible/) |
Overrides episode access for custom rules; args (bool $can_access, int $episode_id, int $user_id, string $tier_slug) where $tier_slug is the subscriber’s active token tier or '' when no token; return false to lock, true to grant access regardless of tier; fires inside benecaster_user_can_access_episode() |
Templates — Episode Page
| Filter | Description |
|---|---|
[benecaster_episode_custom_fields](/docs/benecaster_episode_custom_fields/) |
Filters the custom fields renderable groups array before output in episode/custom-fields.php; each group is {heading, fields[]} |
[benecaster_episode_nav_prev](/docs/benecaster_episode_nav_prev/) |
Filters the WP_Post object for the previous episode in episode/navigation.php; return null to suppress the previous link |
[benecaster_episode_nav_next](/docs/benecaster_episode_nav_next/) |
Filters the WP_Post object for the next episode in episode/navigation.php; return null to suppress the next link |
[benecaster_episode_subscribe_fallback_message](/docs/benecaster_episode_subscribe_fallback_message/) |
Filters the subscribe CTA fallback text shown in episode/subscribe.php when no subscribe URL is configured |
Episode Page Blocks
| Filter | Description |
|---|---|
[benecaster_episode_page_block_types](/docs/benecaster_episode_page_block_types/) |
Registers or modifies block type definitions for the Episode Page settings panel |
[benecaster_episode_page_blocks](/docs/benecaster_episode_page_blocks/) |
Filters the ordered block list before an episode page renders; each block: {slug, enabled, config} |
benecaster_episode_page_block_{slug} |
Filters the rendered HTML for one specific Episode Page block (dynamic filter name — {slug} matches the block type slug); return '' to suppress |
[benecaster_related_episodes_query_types](/docs/benecaster_related_episodes_query_types/) |
Registers or modifies query type strategies for the Related Episodes block |
[benecaster_related_episodes](/docs/benecaster_related_episodes/) |
Filters the related episodes array before rendering in the Related Episodes block |
[benecaster_related_episodes_output](/docs/benecaster_related_episodes_output/) |
Filters the rendered HTML output of the Related Episodes block |
[benecaster_episode_nav_output](/docs/benecaster_episode_nav_output/) |
Filters the rendered HTML of the Episode Navigation block and [benecaster_episode_nav] shortcode |
[benecaster_episode_share_text](/docs/benecaster_episode_share_text/) |
Filters the share text for a specific platform in the Share Buttons block |
[benecaster_episode_share_output](/docs/benecaster_episode_share_output/) |
Filters the rendered HTML output of the Share Buttons block and [benecaster_episode_share] shortcode |
[benecaster_show_social_links](/docs/benecaster_show_social_links/) |
Filters the show social links array for the Social Links block and [benecaster_social_links] shortcode |
[benecaster_social_links_output](/docs/benecaster_social_links_output/) |
Filters the rendered HTML output of the Social Links block and [benecaster_social_links] shortcode |
[benecaster_rss_link_output](/docs/benecaster_rss_link_output/) |
Filters the rendered HTML of the RSS Subscribe button and [benecaster_rss_link] shortcode |
[benecaster_platform_links_output](/docs/benecaster_platform_links_output/) |
Filters the rendered HTML of the Platform Links block and [benecaster_platform_links] shortcode |
Templates — Episode Archive
| Filter | Description |
|---|---|
[benecaster_archive_header_title](/docs/benecaster_archive_header_title/) |
Filters the archive heading text rendered in archive/header.php |
[benecaster_archive_header_description](/docs/benecaster_archive_header_description/) |
Filters the archive subheading/description text rendered in archive/header.php |
[benecaster_archive_show_filters](/docs/benecaster_archive_show_filters/) |
Filters whether the episode filter bar is rendered; return false to suppress it |
[benecaster_archive_no_results_message](/docs/benecaster_archive_no_results_message/) |
Filters the empty-state message shown in archive/no-results.php when no episodes match the current filters |
[benecaster_archive_pagination_html](/docs/benecaster_archive_pagination_html/) |
Filters the pagination HTML rendered in archive/pagination.php |
[benecaster_episode_card_classes](/docs/benecaster_episode_card_classes/) |
Filters the CSS class string on each episode card in archive/episode-card.php |
[benecaster_episode_card_meta](/docs/benecaster_episode_card_meta/) |
Filters the meta array for each episode card; keys: episode_number, season_number, duration, pub_date |
[benecaster_episode_card_title](/docs/benecaster_episode_card_title/) |
Filters the episode title string rendered in each archive card |
[benecaster_episode_card_excerpt](/docs/benecaster_episode_card_excerpt/) |
Filters the episode excerpt string rendered in each archive card |
[benecaster_episode_card_artwork](/docs/benecaster_episode_card_artwork/) |
Filters the artwork URL used in each archive card |
[benecaster_episode_card_locked_message](/docs/benecaster_episode_card_locked_message/) |
Filters the locked state message shown on archive cards for episodes the current user cannot access |
Episode Search
| Filter | Description |
|---|---|
[benecaster_search_query_args](/docs/benecaster_search_query_args/) |
Filters the query arguments before the episode search runs |
[benecaster_search_pre_results](/docs/benecaster_search_pre_results/) |
Short-circuit the episode search; return a non-null array to skip core SQL and return custom results |
[benecaster_search_results](/docs/benecaster_search_results/) |
Filters the final episode search result set and pagination metadata |
[benecaster_search_result_excerpt](/docs/benecaster_search_result_excerpt/) |
Filters the search result excerpt string; <mark> wrapping around matched terms is already applied |
[benecaster_search_indexable](/docs/benecaster_search_indexable/) |
Controls whether a specific episode is included in search results; return false to exclude |
[benecaster_search_output](/docs/benecaster_search_output/) |
Filters the rendered HTML output of [benecaster_search] |
[benecaster_search_supplemental_episode_ids](/docs/benecaster_search_supplemental_episode_ids/) |
Adds supplemental episode IDs to merge into search results via OR p.ID IN (...) (e.g. transcript matches from the Transcription add-on) |
Data Export
| Filter | Description |
|---|---|
[benecaster_export_sheets](/docs/benecaster_export_sheets/) |
Registers and filters available sheets for the “Your Data” XLSX export |
benecaster_export_sheet_rows_{sheet_id} |
Provides or filters row data for one XLSX export sheet (dynamic filter name — {sheet_id} is replaced with the sheet ID string) |
Member Thanks
| Filter | Description |
|---|---|
[benecaster_member_thanks_query_types](/docs/benecaster_member_thanks_query_types/) |
Registers or modifies query type strategies for the [benecaster_member_thanks] shortcode and the Episode Workbench tile |
[benecaster_member_thanks_output](/docs/benecaster_member_thanks_output/) |
Filters the rendered HTML output of [benecaster_member_thanks] |
Custom Fields
| Filter | Description |
|---|---|
[benecaster_field_groups](/docs/benecaster_field_groups/) |
Filters the array of field group definitions before they are rendered for a CPT |
[benecaster_field_value](/docs/benecaster_field_value/) |
Filters a custom field value before it is returned to the caller |
References
| Filter | Description |
|---|---|
[benecaster_reference_groups](/docs/benecaster_reference_groups/) |
Filters the reference group list for a show before it is returned in REST responses |
Admin UI
| Filter | Description |
|---|---|
[benecaster_dashboard_cards](/docs/benecaster_dashboard_cards/) |
Filters the dashboard card declarations rendered after the core stat cards |
[benecaster_episode_editor_tabs](/docs/benecaster_episode_editor_tabs/) |
Filters the tab configuration array used by the episode editor sidebar |
[benecaster_settings_pages](/docs/benecaster_settings_pages/) |
Filters the settings page declarations shown in the show settings left navigation |
[benecaster_settings_sections](/docs/benecaster_settings_sections/) |
Filters field section declarations injected into existing settings pages |
| Filter | Description |
|---|---|
[benecaster_email_should_send](/docs/benecaster_email_should_send/) |
Controls whether a specific email is dispatched; type-specific variant: benecaster_email_should_send_{type} |
[benecaster_email_subject](/docs/benecaster_email_subject/) |
Filters the subject line for any Benecaster email; type-specific variant: benecaster_email_subject_{type} |
[benecaster_email_body_html](/docs/benecaster_email_body_html/) |
Filters the HTML body for any Benecaster email; type-specific variant: benecaster_email_body_html_{type} |
[benecaster_email_body_text](/docs/benecaster_email_body_text/) |
Filters the plain text body for any Benecaster email; type-specific variant: benecaster_email_body_text_{type} |
[benecaster_email_headers](/docs/benecaster_email_headers/) |
Filters the headers array passed to wp_mail(); type-specific variant: benecaster_email_headers_{type} |
[benecaster_email_merge_tags](/docs/benecaster_email_merge_tags/) |
The primary hook for registering custom merge tags; type-specific variant: benecaster_email_merge_tags_{type} |
[benecaster_email_wrapper_args](/docs/benecaster_email_wrapper_args/) |
Filters the header/footer template context: logo URL, show name, accent colour, footer text |
[benecaster_email_template_locale](/docs/benecaster_email_template_locale/) |
Filters the locale used for email template file resolution before template loading |
[benecaster_email_unsubscribe_allowed](/docs/benecaster_email_unsubscribe_allowed/) |
Controls whether an unsubscribe request should be processed; only use for rate limiting, never to block legitimate opt-outs |
[benecaster_transactional_email_types](/docs/benecaster_transactional_email_types/) |
Filters the email types that bypass broadcast opt-out suppression (welcome, token_reset, etc.) |
[benecaster_managed_email_types](/docs/benecaster_managed_email_types/) |
Filters the array of registered email types; types returned here appear as editable templates in the Email Editor |
Shortcode Output
| Filter | Description |
|---|---|
[benecaster_player_output](/docs/benecaster_player_output/) |
Filters the full rendered HTML output of [benecaster_player] |
[benecaster_subscribe_output](/docs/benecaster_subscribe_output/) |
Filters the full rendered HTML output of [benecaster_subscribe] |
[benecaster_episode_description_output](/docs/benecaster_episode_description_output/) |
Filters the rendered HTML output of [benecaster_episode_description] |
[benecaster_latest_episode_output](/docs/benecaster_latest_episode_output/) |
Filters the rendered HTML output of [benecaster_latest_episode] |
[benecaster_episode_link_output](/docs/benecaster_episode_link_output/) |
Filters the rendered HTML of an episode link inserted via the TipTap @ inline picker ([benecaster_episode_link]) |
[benecaster_timestamp_output](/docs/benecaster_timestamp_output/) |
Filters the rendered HTML of a timestamp link inserted via the TipTap # trigger ([benecaster_timestamp]) |
[benecaster_feed_url_output](/docs/benecaster_feed_url_output/) |
Filters the full rendered HTML output of [benecaster_feed_url] |
[benecaster_qr_code_output](/docs/benecaster_qr_code_output/) |
Filters the full rendered HTML output of [benecaster_qr_code] |
[benecaster_episodes_output](/docs/benecaster_episodes_output/) |
Filters the full rendered HTML output of [benecaster_episodes] |
[benecaster_locked_content_message](/docs/benecaster_locked_content_message/) |
Filters the locked state HTML for a locked episode; parameters: ($html, $episode_id, $required_tier, $user_tier) — $required_tier is '' when undetermined; $user_tier is '' when not subscribed; fires in episode/player-locked.php and the player shortcode |
[benecaster_upgrade_prompt_html](/docs/benecaster_upgrade_prompt_html/) |
Filters the upgrade prompt HTML shown to logged-in subscribers at the wrong tier; parameters: ($html, $episode_id, $show_id, $required_tier, $user_tier) |
[benecaster_subscriber_count_output](/docs/benecaster_subscriber_count_output/) |
Filters the rendered output of [benecaster_subscriber_count] |
[benecaster_episode_count_output](/docs/benecaster_episode_count_output/) |
Filters the rendered output of [benecaster_episode_count] |
[benecaster_tier_price_output](/docs/benecaster_tier_price_output/) |
Filters the rendered output of [benecaster_tier_price] |
[benecaster_tier_name_output](/docs/benecaster_tier_name_output/) |
Filters the rendered output of [benecaster_tier_name] |
[benecaster_pricing_table_output](/docs/benecaster_pricing_table_output/) |
Filters the rendered output of [benecaster_pricing_table] |
Account Page
| Filter | Description |
|---|---|
[benecaster_account_page_url](/docs/benecaster_account_page_url/) |
Filters the subscriber account page URL returned by benecaster_account_page_url() |
[benecaster_wc_account_tab_label](/docs/benecaster_wc_account_tab_label/) |
Filters the label of the Podcast Subscriptions tab in WooCommerce My Account |
[benecaster_pmpro_account_link_label](/docs/benecaster_pmpro_account_link_label/) |
Filters the label of the Manage Podcast Subscriptions link in the PMPro account page |
[benecaster_memberpress_account_label](/docs/benecaster_memberpress_account_label/) |
Filters the section heading in the MemberPress account page |
[benecaster_rcp_account_label](/docs/benecaster_rcp_account_label/) |
Filters the section heading in the Restrict Content Pro account page |
Templates — Show Page
| Filter | Description |
|---|---|
[benecaster_show_description](/docs/benecaster_show_description/) |
Filters the show description text returned by benecaster_get_show_description() |
[benecaster_show_header_title](/docs/benecaster_show_header_title/) |
Filters the show title rendered in show/header.php |
[benecaster_show_header_description](/docs/benecaster_show_header_description/) |
Filters the show description rendered in show/header.php |
[benecaster_show_header_artwork_url](/docs/benecaster_show_header_artwork_url/) |
Filters the show artwork URL used in show/header.php |
[benecaster_show_subscribe_links](/docs/benecaster_show_subscribe_links/) |
Filters the platform links array rendered in show/subscribe-links.php; each entry: {platform, url} |
[benecaster_show_tiers](/docs/benecaster_show_tiers/) |
Filters the tiers array rendered in show/tiers.php; each entry from the active bridge’s get_all_tiers() |
[benecaster_show_episode_list_args](/docs/benecaster_show_episode_list_args/) |
Filters the WP_Query arguments for the embedded episode list in show/episode-list.php; defaults: posts_per_page=10, orderby=date, order=DESC |
[benecaster_show_stats_visible](/docs/benecaster_show_stats_visible/) |
Controls whether show/stats.php renders; returns false by default — return true to show public stats |
[benecaster_show_stats_episode_count](/docs/benecaster_show_stats_episode_count/) |
Filters the episode count displayed in the public stats block |
Token and Access
| Filter | Description |
|---|---|
[benecaster_user_tier_for_show](/docs/benecaster_user_tier_for_show/) |
Filters the resolved tier slug for the current user on a given show; used by benecaster_get_user_tier_for_show() and by PreviewTierManager for Preview as Tier mode; return a tier slug string or empty string |
[benecaster_teaser_content](/docs/benecaster_teaser_content/) |
Filters the teaser content shown to users who cannot access a locked episode; fires in TeaserResolver::resolve() called from episode/content.php; Free |
Setup and Configuration
| Filter | Description |
|---|---|
[benecaster_setup_wizard_steps](/docs/benecaster_setup_wizard_steps/) |
Filters the ordered array of step definitions passed to the setup wizard |
[benecaster_setup_wizard_bridge_options](/docs/benecaster_setup_wizard_bridge_options/) |
Filters the bridge card options displayed in the wizard’s Subscription step |
[benecaster_addon_setup_checks](/docs/benecaster_addon_setup_checks/) |
Registers runtime setup guidance notices for add-ons; each callable returns null (condition met) or a notice array (condition failing); SetupNoticeManager evaluates on every admin load |
Maintenance
| Filter | Description |
|---|---|
[benecaster_shadow_record_expiry_days](/docs/benecaster_shadow_record_expiry_days/) |
Filters the shadow import record expiry threshold in days (default 90); controls when completed Patreon/Supercast migration records are purged |
[benecaster_email_log_retention_days](/docs/benecaster_email_log_retention_days/) |
Filters the email log retention period in days (default 365); controls what the orphaned data scanner surfaces as cleanable in Tools → Maintenance |