Developer Hooks And Extension Points

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_interval
  • sh_podcasting_bg_jobs_lock_timeout
  • sh_podcasting_bg_jobs_max_dispatches
  • sh_podcasting_bg_jobs_dispatch_window
  • sh_podcasting_bg_jobs_max_consecutive_errors
  • sh_podcasting_bg_jobs_enabled
  • sh_podcasting_bg_jobs_max_upload_items_per_task
  • sh_podcasting_bg_jobs_upload_circuit_window
  • sh_podcasting_bg_jobs_upload_circuit_max_failures
  • sh_podcasting_bg_jobs_config_error_codes
  • sh_podcasting_bg_jobs_memory_exceeded
  • sh_podcasting_bg_jobs_query_args
  • sh_podcasting_bg_jobs_query_url
  • sh_podcasting_bg_jobs_post_args
  • sh_podcasting_bg_jobs_queue_lock_time

Task handlers use:

  • sh_podcasting_bg_task_upload_media
  • sh_podcasting_bg_task_delete_media
  • sh_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.