About this plugin
Freshet Feeds displays external feeds inside WordPress the way developers wish every feed plugin worked: your theme owns the markup. No vendor styling panels, no iframes, no third-party JavaScript on your pages.
Every provider — RSS/Atom, YouTube channels, Bluesky profiles — normalizes into one item model and renders through one template chain, overridable WooCommerce-style from your theme.
Use it where you would otherwise reach for a feed embed: an RSS feed block on a page, a YouTube channel feed, a social media feed from a Bluesky or Mastodon profile in a block widget area, a podcast feed’s episode list. Items are rendered as your own markup, not an embed, and nothing is imported as posts.
For developers
- A loop API: freshet_feeds( 'my-feed' ) returns normalized item objects; freshet_feeds_render( 'my-feed' ) runs the full template chain.
- Template overrides: copy item.php into {your-theme}/freshet-feeds/ and edit. An item hierarchy ( item-{feed-slug}.php → item-{provider}.php → item.php ) gives per-feed and per-type markup with clean fallbacks.
- Custom layouts by convention: drop layout-carousel.php in your theme, pass carousel — no registration.
- Hooks for everything: providers, template resolution, cache refresh events.
Performance & privacy by design
- Rendering never blocks on a remote API (the only exception is a brand-new feed’s very first fetch): items are cached server-side, stale content is served instantly while a background refresh runs.
- Feed images are stored locally in your uploads dir (some providers serve expiring signed image URLs — hotlinking them breaks).
- Visitors’ browsers never contact the source platforms. Content lives in your DOM: real SEO, no consent baggage.
Providers
- RSS / Atom — any feed URL; also covers Mastodon, subreddits, podcasts.
- YouTube (channel) — keyless public channel feed, no API key required.
- Bluesky (profile) — public API, no authentication.
- Mock (fixture data) — bundled sample posts, no credentials and no network calls, for building and styling templates before a live connection exists. Hidden and blocked in production.
The plugin is fully functional with unlimited feeds. studio/docs.
External services
This plugin talks to external services only to fetch the feed content you configure:
- YouTube feed (www.youtube.com/feeds) — only for configured YouTube feeds. Terms, Privacy.
- Bluesky public API (public.api.bsky.app) — only for configured Bluesky feeds. Terms, Privacy.
- Any RSS/Atom URL you configure is fetched from your server on your cache schedule.
All fetching happens server-side on your cache schedule; site visitors never contact these services.
Source code
com/freshetstudio/freshet-feeds. The compiled bundle in build/ is generated from blocks/ by running npm install and npm run build (uses @wordpress/scripts).