{"id":347086,"date":"2026-07-30T19:43:17","date_gmt":"2026-07-30T19:43:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/qaiyo-social-video-embed\/"},"modified":"2026-09-27T13:03:05","modified_gmt":"2026-09-27T13:03:05","slug":"qaiyo-social-video-embed","status":"publish","type":"plugin","link":"https:\/\/te.wordpress.org\/plugins\/qaiyo-social-video-embed\/","author":23510315,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Qaiyo Social Video Embed","header_author":"Qaiyo","header_description":"Modern, letisztult social media vide\u00f3 megjelen\u00edt\u0151 plugin TikTok \u00e9s YouTube (Shorts + norm\u00e1l vide\u00f3k) t\u00e1mogat\u00e1ssal. Vegyes gal\u00e9ri\u00e1k egy n\u00e9zetben, YouTube csatorna feed automatikus import, magas felbont\u00e1s\u00fa bor\u00edt\u00f3k\u00e9pek, lazy load + click-to-play.","assets_banners_color":"","last_updated":"2026-09-27 13:03:05","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/qaiyo-plugins.com\/qaiyo-social-video-embed\/","header_author_uri":"https:\/\/qaiyo-plugins.com","rating":0,"author_block_rating":0,"active_installs":10,"downloads":434,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"qaiyo","date":"2026-07-30 19:43:03","revision":3629075},"1.1.0":{"tag":"1.1.0","author":"qaiyo","date":"2026-09-27 13:03:05","revision":3715514}},"upgrade_notice":{"1.1.0":"<p>VideoObject structured data, galleries that survive platform outages, accessibility and security fixes. Requires WordPress 6.5.<\/p>","1.0.0":"<p>First Qaiyo release.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3634093,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Admin settings page with appearance, play button and cache controls.","2":"Mixed TikTok + YouTube gallery on the front end.","3":"YouTube channel feed imported as a grid."}},"plugin_section":[],"plugin_tags":[210,208489,179061,222,1610],"plugin_category":[50,56],"plugin_contributors":[267332],"plugin_business_model":[],"class_list":["post-347086","plugin","type-plugin","status-publish","hentry","plugin_tags-gallery","plugin_tags-shorts","plugin_tags-tiktok","plugin_tags-video","plugin_tags-youtube","plugin_category-media","plugin_category-social-and-sharing","plugin_contributors-qaiyo","plugin_committers-qaiyo"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/qaiyo-social-video-embed\/assets\/icon-256x256.png?rev=3634093","icon_2x":"https:\/\/ps.w.org\/qaiyo-social-video-embed\/assets\/icon-256x256.png?rev=3634093","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Qaiyo Social Video Embed is a modern, multi-platform video embed plugin with TikTok, YouTube (Shorts + regular videos) and Vimeo support. Mix videos from different platforms together in a single gallery, or automatically import the latest videos from a YouTube channel.<\/p>\n\n<p><strong>Key features:<\/strong><\/p>\n\n<ul>\n<li><strong>Multi-platform<\/strong> \u2014 TikTok, YouTube and Vimeo in one plugin.<\/li>\n<li><strong>Mixed galleries<\/strong> \u2014 Videos from different platforms together in one grid, carousel or list view.<\/li>\n<li><strong>Gutenberg block<\/strong> \u2014 Insert galleries from the editor with a live preview, no shortcodes needed.<\/li>\n<li><strong>YouTube channel feed import<\/strong> \u2014 Paste a channel URL and automatically show the latest N videos or Shorts (no API key required).<\/li>\n<li><strong>Lightbox \/ modal playback<\/strong> \u2014 Optionally open videos in a fullscreen modal instead of inline.<\/li>\n<li><strong>Responsive column breakpoints<\/strong> \u2014 Separate column counts for desktop, tablet and mobile.<\/li>\n<li><strong>High-resolution thumbnails<\/strong> \u2014 Automatic use of maxresdefault.jpg (1280\u00d7720).<\/li>\n<li><strong>Automatic aspect ratio detection<\/strong> \u2014 9:16 (Shorts\/TikTok), 16:9 (regular YouTube).<\/li>\n<li><strong>Lazy load + click-to-play<\/strong> \u2014 The iframe only loads on click, keeping pages fast.<\/li>\n<li><strong>VideoObject structured data<\/strong> \u2014 Every embedded video is described with Schema.org JSON-LD (title, thumbnail, player URL, upload date, duration), so search engines and AI answer engines understand the page. Each video is described once per page; switch it off in the settings if another plugin already does this.<\/li>\n<li><strong>Customizable play button<\/strong> \u2014 Background and icon color configurable in the admin.<\/li>\n<li><strong>Resilient cache<\/strong> \u2014 Metadata is cached; when a platform is down, a channel gallery keeps showing the last videos it read instead of going blank, and a failing feed is not retried on every page view.<\/li>\n<li><strong>YouTube nocookie support<\/strong> \u2014 GDPR-friendly privacy-enhanced mode.<\/li>\n<li><strong>4 display modes<\/strong> \u2014 single, grid, carousel, list.<\/li>\n<li><strong>Accessible<\/strong> \u2014 Descriptive labels, keyboard support, a focus-trapped lightbox dialog.<\/li>\n<li><strong>Dark mode<\/strong> and print styles.<\/li>\n<li><strong>Extensible<\/strong> \u2014 Provider pattern, write your own provider.<\/li>\n<li><strong>Translation ready<\/strong> \u2014 Fully internationalized; translations are provided through translate.wordpress.org.<\/li>\n<li><strong>Translation plugin compatible<\/strong> \u2014 Works with WPML, Polylang, TranslatePress and other translation plugins.<\/li>\n<li><strong>WordPress standards<\/strong> \u2014 Nonce verification, capability checks, input sanitization, escaped output.<\/li>\n<\/ul>\n\n<h4>YouTube channel feed<\/h4>\n\n<p>Paste the channel's ID-based URL (you can copy it from the channel's About\/Share panel or from a video's channel link):<\/p>\n\n<ul>\n<li><code>https:\/\/www.youtube.com\/channel\/UCxxxxxxxxxxxxxxxxxxxxxx<\/code> \u2014 the latest videos<\/li>\n<li><code>https:\/\/www.youtube.com\/channel\/UCxxxxxxxxxxxxxxxxxxxxxx\/shorts<\/code> \u2014 the latest uploads shown vertically (9:16)<\/li>\n<li><code>https:\/\/www.youtube.com\/user\/legacyname<\/code> \u2014 legacy username channels are also supported<\/li>\n<\/ul>\n\n<p>The plugin reads YouTube's official public RSS feed (feeds\/videos.xml) for that channel \u2014 no API key needed and no page scraping. The feed lists a channel's latest 15 uploads. Handle URLs (<code>\/@name<\/code>) and custom URLs (<code>\/c\/name<\/code>) cannot be resolved without the YouTube Data API, which this plugin does not use \u2014 paste the <code>\/channel\/UC\u2026<\/code> URL instead. The feed does not say which uploads are Shorts, so <code>\/shorts<\/code> shows the latest uploads vertically rather than filtering them.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin embeds videos hosted on third-party platforms. It therefore contacts those platforms in two different ways, described below.<\/p>\n\n<p><strong>1. Server-side requests (made by your site, from wp-admin or while rendering a page)<\/strong><\/p>\n\n<p>These resolve the metadata of the videos you add. Only the video or channel URL that you enter is sent; the responses are cached. No visitor data is involved.<\/p>\n\n<ul>\n<li>YouTube (Google) \u2014 <code>www.youtube.com<\/code>: oEmbed endpoint (<code>\/oembed<\/code>) for individual videos, and the official public RSS feed (<code>\/feeds\/videos.xml<\/code>) for channel feeds, using the channel ID or legacy username contained in the URL you provide.<\/li>\n<li>Vimeo \u2014 <code>vimeo.com<\/code>: oEmbed endpoint (<code>\/api\/oembed.json<\/code>) for individual videos.<\/li>\n<li>TikTok \u2014 <code>www.tiktok.com<\/code>: oEmbed endpoint (<code>\/oembed<\/code>) for individual videos.<\/li>\n<li>WordPress.org \u2014 <code>api.wordpress.org<\/code>: on the plugin's \"Discover Qaiyo\" screen only, the standard WordPress plugin API (<code>plugins_api<\/code>) is queried to list this author's free plugins. No data about your site is sent beyond the standard API query.<\/li>\n<\/ul>\n\n<p><strong>2. Requests made by your visitors' browsers (when a page with the gallery is viewed)<\/strong><\/p>\n\n<p>Video thumbnails and the video players themselves are loaded directly from the platforms. This means your visitors' browsers contact those platforms, and \u2014 as with any embedded video \u2014 the platform receives the visitor's IP address, user agent and referring page, and may set cookies.<\/p>\n\n<ul>\n<li>Thumbnail images \u2014 <code>i.ytimg.com<\/code> (YouTube), plus Vimeo's and TikTok's own image CDNs.<\/li>\n<li>Video players (loaded only after the visitor clicks play) \u2014 <code>www.youtube.com<\/code> or <code>www.youtube-nocookie.com<\/code> (YouTube), <code>player.vimeo.com<\/code> (Vimeo), <code>www.tiktok.com<\/code> (TikTok).<\/li>\n<\/ul>\n\n<p>To reduce this, the plugin uses click-to-play (nothing from the player is loaded until the visitor clicks), offers YouTube's privacy-enhanced <code>youtube-nocookie.com<\/code> mode, and requests Vimeo's Do Not Track (<code>dnt=1<\/code>) parameter.<\/p>\n\n<p>This functionality is required for the plugin to display embedded videos. Provider terms and privacy policies:\n* YouTube (Google): https:\/\/www.youtube.com\/t\/terms \u2014 https:\/\/policies.google.com\/privacy\n* Vimeo: https:\/\/vimeo.com\/terms \u2014 https:\/\/vimeo.com\/privacy\n* TikTok: https:\/\/www.tiktok.com\/legal\/terms-of-service \u2014 https:\/\/www.tiktok.com\/legal\/privacy-policy\n* WordPress.org: https:\/\/wordpress.org\/about\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>qaiyo-social-video-embed<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin from the WordPress admin Plugins page.<\/li>\n<li>Navigate to <strong>Social Video Embed<\/strong> in the admin sidebar to configure appearance, play button, thumbnails and caching.<\/li>\n<li>Place a shortcode anywhere \u2014 page, post, Bricks, Gutenberg.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20embed%20a%20single%20video%3F\"><h3>How do I embed a single video?<\/h3><\/dt>\n<dd><p>[qsve_video url=\"https:\/\/youtu.be\/dQw4w9WgXcQ\"]<\/p>\n\n<p>This also works with TikTok and YouTube Shorts URLs.<\/p><\/dd>\n<dt id=\"how%20do%20i%20create%20a%20mixed%20gallery%3F\"><h3>How do I create a mixed gallery?<\/h3><\/dt>\n<dd><p>[qsve_video mode=\"grid\" columns=\"3\" urls=\"tiktok-url|youtube-url|shorts-url\"]<\/p>\n\n<p>Separate URLs with the <code>|<\/code> character.<\/p><\/dd>\n<dt id=\"how%20do%20i%20import%20a%20youtube%20channel%20feed%3F\"><h3>How do I import a YouTube channel feed?<\/h3><\/dt>\n<dd><p>[qsve_video channel=\"https:\/\/www.youtube.com\/channel\/UCxxxxxxxxxxxxxxxxxxxxxx\/shorts\" limit=\"6\"]<\/p>\n\n<p>Use the channel's ID-based URL (<code>\/channel\/UC...<\/code>). Add <code>\/shorts<\/code> to show the latest uploads vertically (9:16).<\/p><\/dd>\n<dt id=\"is%20there%20a%20block%20editor%20%28gutenberg%29%20block%3F\"><h3>Is there a block editor (Gutenberg) block?<\/h3><\/dt>\n<dd><p>Yes. Add the \"Qaiyo Social Video Embed\" block in the editor. It exposes the same options (URLs, mode, columns, channel, lightbox, etc.) with a live preview \u2014 no shortcodes required.<\/p><\/dd>\n<dt id=\"how%20do%20i%20open%20videos%20in%20a%20lightbox%3F\"><h3>How do I open videos in a lightbox?<\/h3><\/dt>\n<dd><p>Enable \"Open videos in a lightbox\" in the settings, choose it under Playback in the block, or add <code>playback=\"lightbox\"<\/code> to any shortcode. <code>playback=\"inline\"<\/code> does the opposite for one placement.<\/p><\/dd>\n<dt id=\"does%20vimeo%20work%3F\"><h3>Does Vimeo work?<\/h3><\/dt>\n<dd><p>Yes. Paste a Vimeo URL (e.g. <code>https:\/\/vimeo.com\/76979871<\/code>) into the <code>urls<\/code> attribute or the block. Vimeo channel\/showcase import is not available.<\/p><\/dd>\n<dt id=\"does%20tiktok%20channel%20import%20work%3F\"><h3>Does TikTok channel import work?<\/h3><\/dt>\n<dd><p>Not in this plugin. TikTok does not provide a public, key-less API for a profile's videos, so TikTok videos are added individually via the <code>urls<\/code> attribute.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20add%20structured%20data%3F\"><h3>Does the plugin add structured data?<\/h3><\/dt>\n<dd><p>Yes, a Schema.org <code>VideoObject<\/code> for every embedded video (one <code>@graph<\/code> per gallery). When the platform does not report an upload date (single YouTube and TikTok videos), the publish date of the page is used. Developers can adjust or drop an item with the <code>qsve_video_schema_item<\/code> filter and change the fallback date with <code>qsve_video_schema_fallback_date<\/code>. The setting \"VideoObject JSON-LD\" switches it off.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20youtube%20api%20key%3F\"><h3>Do I need a YouTube API key?<\/h3><\/dt>\n<dd><p>No. The plugin uses public oEmbed and RSS endpoints, so no API key is required.<\/p><\/dd>\n<dt id=\"which%20shortcodes%20are%20available%3F\"><h3>Which shortcodes are available?<\/h3><\/dt>\n<dd><p>[qsve_video], <code>[qsve_tiktok]<\/code> (TikTok only) and <code>[qsve_youtube]<\/code> (YouTube only).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: VideoObject JSON-LD structured data for every embedded video, with upload date and duration where the platform reports them (can be switched off).<\/li>\n<li>New: a channel gallery keeps showing its last good videos when YouTube is unreachable; a failing feed is retried every 15 minutes instead of on every page view.<\/li>\n<li>New: the block's Playback setting can force inline or lightbox playback per block.<\/li>\n<li>Fix: the player no longer loads inside the play button (invalid markup that screen readers announced as a button).<\/li>\n<li>Fix: a single channel URL placed in <code>urls<\/code> caused a PHP notice.<\/li>\n<li>Fix: video URLs are now encoded in oEmbed requests (a timestamp in the URL no longer broke the lookup).<\/li>\n<li>Fix: switching YouTube privacy mode now applies to already cached videos.<\/li>\n<li>Fix: unlisted Vimeo videos (with a privacy hash) now play.<\/li>\n<li>Fix: titles with \"&lt;\" were shown as \"&lt;\"; \"Youtube\" spelling in labels.<\/li>\n<li>Fix: the block showed its setup hint to site visitors; it is now shown to editors only.<\/li>\n<li>Fix: \"Clear all cache\" no longer flushes the whole site's object cache; only this plugin's entries are invalidated.<\/li>\n<li>Fix: uninstall now removes the plugin's data on every site of a network.<\/li>\n<li>Accessibility: descriptive labels on every play button and player, focus moves into the player, the lightbox is a proper dialog that keeps keyboard focus, ARIA tabs on the settings screen.<\/li>\n<li>Translations: the block editor is translated as well; a site's own translation now takes precedence over the bundled one.<\/li>\n<li>Security and code quality: admin actions check capabilities and nonces, remote requests use wp_safe_remote_get(), every value from a platform is validated before it is printed, admin screens are templates; PHPStan level 10 and a PHPUnit test suite.<\/li>\n<li>Requires WordPress 6.5 or newer.<\/li>\n<\/ul>\n\n<p><h4>1.0.0<\/h4><\/p>\n\n<ul>\n<li>First release under the Qaiyo brand.<\/li>\n<li>TikTok, YouTube (Shorts + regular) and Vimeo support, mixed galleries and YouTube channel feed import.<\/li>\n<li>Gutenberg block with live preview.<\/li>\n<li>Lightbox \/ modal playback option.<\/li>\n<li>Responsive column breakpoints (desktop \/ tablet \/ mobile).<\/li>\n<li>Top-level Qaiyo admin menu with its own brand separator.<\/li>\n<li>Admin UI in the Qaiyo design system (purple brand accent).<\/li>\n<li>English source language; fully translatable via translate.wordpress.org.<\/li>\n<li><code>[qsve_video]<\/code>, <code>[qsve_tiktok]<\/code>, <code>[qsve_youtube]<\/code> shortcodes.<\/li>\n<\/ul>","raw_excerpt":"TikTok, YouTube (Shorts + regular) and Vimeo in one mixed gallery, with YouTube channel feeds, lightbox playback and VideoObject structured data.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=347086"}],"author":[{"embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/qaiyo"}],"wp:attachment":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347086"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347086"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347086"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347086"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347086"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}