Developer Hooks and Extension Points
Selfhost Podcasting exposes filters and actions for feed output, admin forms, integrations, migrations, background jobs, S3 behavior, and Pro private access.
Hook signatures can change across major versions. Test custom code on staging before updating production sites.
Admin and form hooks
sh_podcasting_admin_submenu_pages
Filter submenu pages under Selfhost Podcasting.
sh_podcasting_admin_podcast_section_labels
Filter labels used for podcast workspace sections.
sh_podcasting_page_scripts
Register page-specific admin script callbacks.
sh_podcasting_script_data
Filter localized admin script data.
sh_podcasting_form_fields
Filter podcast information fields.
sh_podcasting_podcast_form_zones
Control podcast form layout zones.
sh_podcasting_form_field_markup
Override custom podcast field markup.
sh_podcasting_epi_form_fields
Filter episode fields.
sh_podcasting_episode_form_zones
Control episode form layout zones.
sh_podcasting_epi_field_markup
Override custom episode field markup.
sh_podcasting_settings_form_fields
Filter feed settings fields.
sh_podcasting_settings_field_markup
Override custom settings field markup.
sh_podcasting_integrations_form_fields
Filter integration service fields.
sh_podcasting_integration_field_markup
Override integration field markup.
Save and lifecycle actions
selfhost_podcasting_podcast_created
Fires after a podcast is created.
selfhost_podcasting_podcast_saved
Fires after podcast data or feed settings are saved.
selfhost_podcasting_feed_settings_saved
Fires after feed settings are saved.
selfhost_podcasting_integration_saved
Fires after an integration is saved.
selfhost_podcasting_episode_saved
Fires after an episode is saved.
selfhost_podcasting_episode_deleted
Fires after an episode is detached or deleted from a podcast.
selfhost_podcasting_podcast_deleted
Fires before a podcast is deleted.
selfhost_podcasting_privacy_status_changed
Fires when Pro private/public status changes.
Episode list hooks
sh_podcasting_episodes_list_columns
Filter All Episodes and podcast-scoped columns.
sh_podcasting_episodes_list_bulk_actions
Filter available bulk actions.
sh_podcasting_episodes_list_row_actions
Filter row actions.
sh_podcasting_episodes_list_tablenav
Add controls above the episode list table.
Feed hooks
sh_podcasting_should_register_feed
Control whether a feed callback should be registered.
sh_podcasting_feed_generator
Change the feed generator class for a feed key.
sh_podcasting_feed_podcast_id
Resolve a feed key to a podcast ID.
sh_podcasting_pod_feed_data
Filter loaded podcast feed data.
sh_podcasting_pod_excerpt_length
Filter show excerpt length.
sh_podcasting_epi_excerpt_length
Filter episode excerpt length.
sh_podcasting_episode_permalink
Filter episode permalink in feed output.
sh_podcasting_pod_escape_methods
Filter channel value escaping callbacks.
sh_podcasting_epi_escape_methods
Filter item value escaping callbacks.
sh_podcasting_channel_markup_array
Filter channel XML markup array.
sh_podcasting_item_markup_array
Filter episode item XML markup array.
sh_podcasting_namespaces
Filter RSS namespace declarations.
sh_podcasting_preview_audio_url
Filter the media URL used by the browser preview.
Background queue hooks
The queue identifier is sh_podcasting_bg_jobs.
Filters include:
sh_podcasting_bg_jobs_process_intervalsh_podcasting_bg_jobs_lock_timeoutsh_podcasting_bg_jobs_max_dispatchessh_podcasting_bg_jobs_dispatch_windowsh_podcasting_bg_jobs_max_consecutive_errorssh_podcasting_bg_jobs_enabledsh_podcasting_bg_jobs_max_upload_items_per_tasksh_podcasting_bg_jobs_upload_circuit_windowsh_podcasting_bg_jobs_upload_circuit_max_failuressh_podcasting_bg_jobs_config_error_codessh_podcasting_bg_jobs_memory_exceededsh_podcasting_bg_jobs_query_argssh_podcasting_bg_jobs_query_urlsh_podcasting_bg_jobs_post_argssh_podcasting_bg_jobs_queue_lock_time
Task handlers use:
sh_podcasting_bg_task_upload_mediash_podcasting_bg_task_delete_mediash_podcasting_bg_task_backfill_duration
S3 hooks
sh_podcasting_s3_object_acl
Filter object ACL used for uploads.
sh_podcasting_s3_multipart_threshold
Filter size threshold for multipart uploads.
sh_podcasting_s3_multipart_part_size
Filter multipart part size.
sh_podcasting_s3_verify_object_attempts
Filter object verification attempts.
sh_podcasting_s3_verify_delivery_url
Enable or disable delivery URL verification.
sh_podcasting_s3_fail_on_delivery_verification
Restore failure-on-unverified-delivery behavior.
sh_podcasting_s3_delivery_verification_failed
Action fired when delivery verification fails.
sh_podcasting_publish_bucket_url
Filter whether a bucket URL can be published in the feed.
sh_podcasting_s3_max_remote_download_size
Set a maximum remote media size before staging upload.
sh_podcasting_s3_temp_space_buffer
Filter required temporary disk-space buffer.
Migration hooks
sh_podcasting_migration_providers
Filter registered migration providers.
sh_podcasting_migration_ajax_batch_size
Filter AJAX migration batch size.
selfhost_podcasting_migration_completed
Fires after a migration completes.
selfhost_podcasting_takeover_status_changed
Fires when source feed takeover is enabled or disabled.
Pro private access hooks
shp_private_podcasting_supported_integrations
Filter supported commerce integration definitions.
Private access managers also expose class methods for granting and revoking access from custom sources. Use the existing integration classes as references for identity, grant, token, and notification flow.
