=== VidDefer – Deferred Video Embeds ===
Contributors:      kushang78
Tags:              lazy load, youtube, vimeo, performance, deferred
Requires at least: 6.0
Tested up to:      7.0
Stable tag:        1.0.0
Requires PHP:      8.0
License:           GPL-2.0-or-later
License URI:       https://www.gnu.org/licenses/gpl-2.0.html

Automatically lazy load YouTube, Vimeo, and self-hosted videos to dramatically boost page speed and Core Web Vitals.

== Description ==

**VidDefer – Deferred Video Embeds** replaces heavy video embeds with lightweight thumbnail placeholders. The real video only loads when a visitor clicks (or scrolls to) it — saving hundreds of kilobytes per page load.

= Supported Sources =

* **YouTube** — replaces iframes with thumbnail + play button
* **Vimeo** — replaces iframes with thumbnail + play button
* **Self-hosted videos** — replaces `<video>` elements (MP4, WebM, OGV)

= Key Features =

* Zero configuration — install, activate, done
* Click-to-load or scroll-triggered loading
* YouTube thumbnail quality control (SD / HQ / Max)
* 3 play button styles: YouTube-style, Circle, Minimal
* Custom play button & overlay colours
* GDPR / privacy notice overlay
* Exclude specific pages by ID or videos by CSS class
* No jQuery — pure ES6, < 2KB gzipped
* Works with Gutenberg, Elementor, Divi, WPBakery
* WCAG 2.1 keyboard-accessible placeholders
* Caches Vimeo thumbnails via WordPress transients

== Installation ==

= Method 1: Direct Installation (Recommended) =

1. Log into your WordPress admin panel
2. Go to **Plugins → Add New**
3. Search for "VidDefer – Deferred Video Embeds"
4. Click **Install Now**
5. Click **Activate**
6. Visit **Settings → VidDefer** page directly to configure your video settings.

Installation takes less than 1 minute.

= Method 2: Manual Installation (FTP) =

1. Download the plugin from WordPress.org
2. Unzip the downloaded file
3. Upload the `viddefer` folder to `/wp-content/plugins/` via FTP
4. Log into WordPress and go to **Plugins**
5. Find "VidDefer – Deferred Video Embeds" in the list
6. Click **Activate**
7. Configure via **Settings → VidDefer** page

== Screenshots ==

1. Video configuration and settings
2. Youtube embed vs VidDefer
3. Self-hosted embed vs VidDefer
4. Vimeo embed vs VidDefer

== Frequently Asked Questions ==

= Will it work with my page builder? =

Yes. The plugin uses PHP output buffering to intercept all video iframes and `<video>` tags regardless of how they were added to the page.

= Does it support YouTube Shorts? =

Yes, YouTube Shorts use the same embed format and are handled automatically.

= Will it break my video popups / lightboxes? =

Add the class `no-lazy` (configurable under Settings → VidDefer Exclusions) to any iframe, video element, or wrapping figure tag you want to skip.

= Does it require an API key? =

No. YouTube thumbnails use the public `img.youtube.com` CDN. Vimeo thumbnails use the public oEmbed endpoint.

== External services ==

This plugin can connect to external video services to display lazy-loaded video thumbnails and metadata.

= YouTube =

When YouTube lazy loading is enabled, the plugin uses YouTube's public thumbnail CDN to display thumbnail images for YouTube videos. The visitor's browser requests the thumbnail image from YouTube when a lazy-loaded YouTube placeholder is displayed. The request includes the YouTube video ID in the thumbnail URL and may include normal browser request data such as the visitor's IP address and user agent.

This service is provided by YouTube LLC. Terms of Service: https://www.youtube.com/t/terms Privacy Policy: https://policies.google.com/privacy

= Vimeo =

When Vimeo lazy loading is enabled, the plugin optimizes page performance by replacing heavy video players with a lightweight placeholder image. To generate this placeholder, your WordPress server makes a secure background request to Vimeo’s public oEmbed API to fetch the video's thumbnail URL and, optionally, its title. To minimize external requests and maximize site speed, this data is automatically cached locally using WordPress transients, meaning the server only contacts Vimeo when the metadata isn't already saved.

During this brief server-to-server connection, your site shares minimal, standard data with Vimeo to fulfill the request. This includes the specific Vimeo video URL (which contains the video ID) and a standard User-Agent string identifying your website's URL alongside the plugin's name and version. No personal user data is transmitted, making it a seamless and privacy-conscious way to boost your site's loading times.

This service is provided by Vimeo.com, Inc. Terms of Service: https://vimeo.com/terms Privacy Policy: https://vimeo.com/privacy

== Changelog ==

= 1.0.0 = Released June 12 - 2026

* Initial release
* YouTube, Vimeo, self-hosted lazy load
* Click and scroll triggers
* Admin settings page
* GDPR notice support
