If your WordPress news site publishes video content alongside written articles, you’ve probably run into the same wall: YouTube and WordPress don’t talk to each other without help. Videos sit on your channel, posts sit in your CMS, and keeping them in sync either means manual work every time you publish or a (I think) bloated plugin that does far more than you need.
You can write this yourself using your AI coding solution of choice, but you can start with this code to move forward and save those credits for something else. I actually used ChatGPT to code the original plugin, back in August 2025. As one of my first projects with Claude AI a couple of months ago, I pulled in the code from that project, checked it, reworked it, tested it, and made what you can grab below for your own site.
Below is a bit more about what we did at Carrier Signal to solve when a site needs YouTube content surfaced automatically as native WordPress posts — with the featured image replaced by the actual video, without touching theme templates, and without installing a plugin that carries half the internet as a dependency.
Why most YouTube WordPress plugins fall short for news sites
The plugin ecosystem for pulling YouTube content into WordPress is older than you’d expect and hasn’t kept pace with how modern news sites are built. The plug-in this replaced on the site I migrated hadn’t been supported in a long time. The common problems:
They’re built for display, not publishing. Most YouTube plugins embed a gallery or a widget — they don’t create actual posts. That means your YouTube content doesn’t benefit from your editorial workflow, your category structure, your SEO setup, or your RSS feed.
They assume a single channel with a single category. If you run a news operation covering multiple beats — and multiple shows or contributors each with their own YouTube presence — a plugin that maps one channel to one category is a dead end.
They fight with your theme. Many older plugins override templates or inject shortcodes that break the moment you update your theme or switch to a block-based layout. On Newspack in particular, where the theme handles featured image placement tightly, an injected embed in the wrong place can wreck the archive and single-post layout simultaneously.
They don’t handle the featured image slot. On a news site, the featured image is load-bearing. It appears in article cards, in the homepage hero, in social sharing previews, and at the top of the post. A plugin that embeds a video somewhere in the post body misses the point entirely.
What the right solution looks like
The approach that actually works — and that we’ve deployed on news sites running Newspack and other WordPress themes — does the following:
Creates real posts. Each video becomes a WordPress post with a title, a publication date (preserved from YouTube), and post content populated from the video description. It goes through your normal editorial workflow and respects whatever post status you configure — draft, published, or pending review.
Maps each channel to its own taxonomy. You configure a category and up to two tags per channel. A daily news show lands in one category. A weekly interview series lands in another. You can run as many channels as you need.
Stores the video URL in a standard meta field. The video URL lives in cs_featured_video post meta — a consistent, queryable field that other parts of your site can reference. Nothing is hardcoded into the post content.
Replaces the featured image with the video. Using WordPress’s post_thumbnail_html filter — the same hook themes use to render featured images — the video oEmbed replaces the image wherever the featured image would appear: article cards, hero slots, the post header. No template edits required. The filter approach means it survives theme updates.
Detects native video support and stays silent. Avada, Divi, and Elementor all have their own featured video fields. If the plugin detects those in use on a given post, it doesn’t intervene. This matters on sites that mix page builder content with Newspack-style editorial templates.
Prevents duplicates. Every video’s YouTube ID is stored as post meta. Before creating a post, the sync checks whether that ID already exists. Re-running the sync — or changing the schedule — never creates duplicates.
Setting it up: what you actually need
A YouTube Data API v3 key
There is no way to reliably pull public YouTube channel data at scale without an API key. The good news: it’s free. You’ll need a Google Cloud account, a project, and the YouTube Data API v3 enabled. Google’s console walks you through it in about five minutes, and the free quota (10,000 units per day) is more than enough for typical news site usage.
The channel URL, handle, or ID
You can paste in anything — a full URL like https://www.youtube.com/@yourchannel, a bare handle like @yourchannel, or a raw channel ID starting with UC. The plugin resolves all of them to a channel ID automatically.
A category for each channel
Create your categories in WordPress first, then assign them in the plugin settings. If a channel maps to an existing editorial category, use that. If it’s new content that needs its own section, create the category before running the first sync.
A note on WordPress cron
WordPress’s built-in scheduler — wp-cron — fires on page load rather than on a real system clock. On low-traffic sites, this means scheduled syncs can lag by hours. If reliable timing matters (and on a news site it usually does), disable wp-cron in wp-config.php and add a real server-side cron job that triggers wp-cron.php on your preferred interval. Your host’s control panel or a simple crontab entry handles this in under a minute.
The migration context: moving a news site from a legacy theme to Newspack
The scenario that prompted this solution is common enough to be worth describing directly.
A news site built on a legacy WordPress theme had been running for years with a YouTube plugin that embedded video content via shortcode. The plugin was abandoned, incompatible with newer versions of WordPress, and had no concept of the post structure the editorial team needed.
The migration to Newspack introduced a new challenge: Newspack’s templates use featured images prominently — in article cards, in the homepage layout, and in the post header — and there was no direct equivalent in Newspack for the old plugin’s output. Template overrides were off the table; I wanted something portable and visible to the client, not a direct template change.
The post_thumbnail_html filter solved this cleanly. Newspack calls it when rendering featured images. By hooking into it and returning a responsive video embed when a video URL exists, the video appears in exactly the same place the featured image would — without a single template file being touched.
For the historical content, the sync ran once with the post status set to draft, which allowed the editorial team to review and publish on their own schedule. For new content, it runs on an automated schedule with posts publishing directly.
What this doesn’t do
It’s worth being direct about the boundaries of this approach.
It won’t strip or re-encode YouTube video. YouTube’s terms of service prohibit downloading or re-hosting their video content. The plugin embeds YouTube’s own player via oEmbed — the video is always served from YouTube’s infrastructure. This is correct behavior, not a limitation.
It doesn’t paginate deep channel histories automatically. The YouTube Data API returns up to 50 videos per request. For channels with large back catalogs, you can run the sync multiple times as new results come in, but bulk-importing hundreds of archived videos in one pass isn’t what this is designed for.
It creates posts, not custom post types. If your editorial workflow uses a custom post type for video content, you’d need to modify the post creation logic. For most news sites using standard posts with categories, this isn’t an issue.
Who this is for
This plugin is useful if you’re running a WordPress news or media site, publishing YouTube content alongside written articles, and need the two to stay in sync without manual work. It’s particularly well-suited to:
- Newspack sites where template overrides aren’t practical
- Sites with multiple YouTube channels that need to map to different editorial sections
- Editorial teams that want to review video content as drafts before it goes live
- Developers who need a light, dependency-free solution they can own and modify
Carrier Signal YouTube Sync
Need This Done for You?
If you’d rather hand this off than DIY it — this is exactly the kind of work I do at CarrierSignal. I’ve been doing web development since the nineties.
Built and tested in a real production environment. Developed in collaboration with Claude (Anthropic) through an iterative process of live debugging, page source analysis, and multiple rounds of testing. Code independently reviewed by Claude Sonnet for security and quality.
