Keith Solomon 1f4c6754e2
CI / Composer, lint, static analysis, and unit tests (push) Successful in 2m10s
CI / WordPress activation smoke test (push) Failing after 2m0s
feature: Assign feed season to a configurable taxonomy on import
Adds a 'Season taxonomy' setting (default empty) that points at an existing
taxonomy registered against the destination post type. On every successful
import the plugin reads itunes:season, looks up (or creates) a term with
that numeric name in the configured taxonomy, and assigns it to the
imported post via wp_set_object_terms.

Behavior:
- Empty option: no-op. Existing posts and installs without a season
  taxonomy are unaffected.
- Tax that doesn't exist or isn't attached to the post type: no-op.
- Feed item with no itunes:season: no-op. Manual taxonomy assignments
  are preserved on subsequent refreshes.
- Otherwise: the feed value wins, on both create and update paths.

The new assign_season_term() helper is public so it is unit-testable,
and four smoke tests cover the lookup, create-on-miss, unconfigured, and
no-season paths.
2026-08-24 12:04:09 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:48:40 -05:00
2026-08-24 08:46:51 -05:00
2026-08-24 08:46:51 -05:00

Podcast RSS to CPT

Import a podcast RSS feed into a configurable WordPress custom post type.

Description

Podcast RSS to CPT imports existing and newly published podcast episodes using WordPress's bundled feed parser and WP-Cron. It can use the included Podcast Episode post type or any registered post type that supports the fields you need. Imports default to bounded batches of 25 new or changed episodes and automatically continue while scheduling is enabled.

Imported data includes the title, full synopsis, excerpt, publication date, episode page URL, enclosure/audio URL and type, duration, season, episode number, explicit flag, source identifiers, and episode artwork. Artwork can be added to the media library and assigned as the featured image.

Requirements

  • WordPress 6.2+
  • PHP 7.4+

Installation

  1. Copy this directory into wp-content/plugins/podcast-rss-to-cpt.
  2. Activate Podcast RSS to CPT.
  3. Open Settings > Podcast RSS Import.
  4. Add the feed URL, select a target post type, and save.
  5. Use Run import now for the initial import. WP-Cron will check for new or changed episodes on the selected schedule.

Imported Metadata

Themes and integrations can use these protected post meta keys:

Key Description
_rss2cpt_source_id Feed-specific episode identifier
_rss2cpt_source_key Deduplication fingerprint
_rss2cpt_feed_url Source feed URL
_rss2cpt_episode_url Episode page URL
_rss2cpt_audio_url Enclosure/audio URL
_rss2cpt_audio_type Audio MIME type
_rss2cpt_audio_length Enclosure byte length
_rss2cpt_duration Duration string (HH:MM:SS)
_rss2cpt_duration_seconds Duration in seconds
_rss2cpt_season Season number
_rss2cpt_episode_number Episode number
_rss2cpt_episode_type Episode type (full, trailer, bonus)
_rss2cpt_explicit Explicit flag
_rss2cpt_image_url Episode artwork URL
_rss2cpt_creator Episode creator/author

Episode fields are registered with types for the configured post type. Public fields are available through the WordPress REST API; internal deduplication fingerprints remain private.

Enable Refresh feed-owned fields if publisher changes should overwrite the imported title, synopsis, excerpt, date, status, author, metadata, and artwork. This option is off by default to preserve editorial changes.

Notes

WP-Cron runs when the site receives traffic. For reliable publishing schedules, invoke wp-cron.php from a real system cron.

Removing the plugin keeps imported posts and downloaded media but removes plugin settings.

License

GPLv2 or later

S
Description
No description provided
Readme
119 KiB
Languages
PHP 100%