{"id":337369,"date":"2026-07-16T12:10:18","date_gmt":"2026-07-16T12:10:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/heyly-io-video-greeting-widget\/"},"modified":"2026-07-16T12:09:54","modified_gmt":"2026-07-16T12:09:54","slug":"heyly-video-widget","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/heyly-video-widget\/","author":13261307,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"1.0.3","tested":"7.0.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"heyly.io Video Greeting Widget","header_author":"Riin Agency","header_description":"Embed the heyly.io video greeting widget on your WordPress site. Up to 3 videos with per-page, per-post-type, URL and language targeting rules. WPML + Polylang compatible.","assets_banners_color":"f6f8fc","last_updated":"2026-07-16 12:09:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/heyly.io\/wordpress","header_author_uri":"https:\/\/riin.eu","rating":0,"author_block_rating":0,"active_installs":0,"downloads":22,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"Nalut","date":"2026-07-16 12:09:54"}},"upgrade_notice":{"1.0.3":"<p>WordPress.org compliance release \u2014 no functional changes.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3610181,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3610181,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3610181,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3610181,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3610181,"resolution":"1","location":"assets","locale":"","width":2396,"height":1360},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3610181,"resolution":"2","location":"assets","locale":"","width":2396,"height":2220},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3610181,"resolution":"3","location":"assets","locale":"","width":560,"height":620},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3610181,"resolution":"4","location":"assets","locale":"","width":2880,"height":1800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3610181,"resolution":"5","location":"assets","locale":"","width":2880,"height":1800},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3610181,"resolution":"6","location":"assets","locale":"","width":2880,"height":1800},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3610181,"resolution":"7","location":"assets","locale":"","width":2880,"height":1800}},"screenshots":{"1":"Global settings + slot 1 configuration.","2":"Targeting rules \u2014 include\/exclude by post type, page ID or URL pattern, plus per-language targeting (WPML\/Polylang).","3":"Per-post meta box: force show, force hide, or override the video on any page.","4":"The widget bubble on a live e-commerce site.","5":"The open widget with video and call-to-action buttons.","6":"The bubble on an English site.","7":"Fullscreen layout with the action sheet open."}},"plugin_section":[],"plugin_tags":[17007,10601,222,162,103],"plugin_category":[43,48,50],"plugin_contributors":[271879],"plugin_business_model":[],"class_list":["post-337369","plugin","type-plugin","status-publish","hentry","plugin_tags-greeting","plugin_tags-polylang","plugin_tags-video","plugin_tags-widget","plugin_tags-wpml","plugin_category-customization","plugin_category-language-tools","plugin_category-media","plugin_contributors-nalut","plugin_committers-nalut"],"banners":{"banner":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/banner-772x250.png?rev=3610181","banner_2x":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/banner-1544x500.png?rev=3610181","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/icon-128x128.png?rev=3610181","icon_2x":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/icon-256x256.png?rev=3610181","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/screenshot-1.png?rev=3610181","caption":"Global settings + slot 1 configuration."},{"src":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/screenshot-2.png?rev=3610181","caption":"Targeting rules \u2014 include\/exclude by post type, page ID or URL pattern, plus per-language targeting (WPML\/Polylang)."},{"src":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/screenshot-3.png?rev=3610181","caption":"Per-post meta box: force show, force hide, or override the video on any page."},{"src":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/screenshot-4.png?rev=3610181","caption":"The widget bubble on a live e-commerce site."},{"src":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/screenshot-5.png?rev=3610181","caption":"The open widget with video and call-to-action buttons."},{"src":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/screenshot-6.png?rev=3610181","caption":"The bubble on an English site."},{"src":"https:\/\/ps.w.org\/heyly-video-widget\/assets\/screenshot-7.png?rev=3610181","caption":"Fullscreen layout with the action sheet open."}],"raw_content":"<!--section=description-->\n<p><a href=\"https:\/\/heyly.io\">heyly.io<\/a> is a video greeting widget: a small floating bubble in the corner of your site that plays a short personal video (usually around 30 seconds) \u2014 like Instagram Stories, but for your website. After the video, visitors see up to 5 call-to-action buttons (book a call, WhatsApp, email, your link).<\/p>\n\n<p>No testimonials yet? You ARE the testimonial. In a world full of AI, a real face and a real voice are what make visitors trust you.<\/p>\n\n<p><strong>Swap videos like Instagram Stories.<\/strong> Changing your greeting is as easy as posting a new Story \u2014 record a new video in your heyly.io dashboard and it's live on your site in 30 seconds. No developer, no theme edits, no re-embedding.<\/p>\n\n<p><strong>You decide exactly where it shows.<\/strong> Per page, per post type, per URL pattern \u2014 show the widget only where it earns its place, and hide it everywhere else (e.g. checkout or privacy pages).<\/p>\n\n<p>This plugin makes installing and managing the heyly.io widget on a WordPress site easy:<\/p>\n\n<ul>\n<li>Paste your Video ID \u2014 no code editing, no theme changes<\/li>\n<li>Configure up to 3 videos with separate display rules<\/li>\n<li>Target by post type, page ID or URL pattern (glob or PCRE regex)<\/li>\n<li>Include + exclude rules (e.g. show everywhere except \/checkout and \/privacy)<\/li>\n<li>Per-page override meta box (force show \/ force hide \/ use site rules)<\/li>\n<li>WPML + Polylang auto-detection with multi-select language targeting<\/li>\n<li>Optional consent-required mode for cookie banners (widget stays off until the visitor accepts)<\/li>\n<li>Lightweight: the plugin adds a single script tag \u2014 nothing else loads on your pages<\/li>\n<\/ul>\n\n<p><strong>Ideas to try:<\/strong><\/p>\n\n<ul>\n<li>A dedicated greeting on each campaign landing page \u2014 welcome visitors coming from that specific ad or newsletter personally<\/li>\n<li>A seasonal video for a sale week \u2014 swap it in before the campaign, swap it back after, in seconds<\/li>\n<li>A different video per language on multilingual sites<\/li>\n<li>A personal \"here's what happens next\" greeting on your contact or thank-you page<\/li>\n<\/ul>\n\n<p><strong>Who is it for?<\/strong> Agencies, accountants, consultants, coaches and e-commerce shops \u2014 anyone whose business is built on personal trust.<\/p>\n\n<p><strong>You need a free heyly.io account.<\/strong> The widget videos, buttons and analytics are managed in your <a href=\"https:\/\/heyly.io\/dashboard\">heyly.io dashboard<\/a>. The Free plan includes 1 video and 1,000 views every 30 days; the Pro plan adds more videos and removes the \"Powered by heyly.io\" badge. See <a href=\"https:\/\/heyly.io\/#pricing\">pricing<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the heyly.io service. It outputs a single script tag pointing to <code>https:\/\/heyly.io\/widget.js<\/code>, which the visitor's browser loads from heyly.io.<\/p>\n\n<p>The widget script then:<\/p>\n\n<ul>\n<li>Fetches the widget configuration (your video, buttons, styling) from <code>https:\/\/heyly.io\/api\/...<\/code><\/li>\n<li>Streams the video from Cloudflare Stream (<code>*.cloudflarestream.com<\/code>)<\/li>\n<li>Sends anonymous usage events (view, play, click) to <code>https:\/\/heyly.io\/api\/events<\/code> so you can see analytics in your dashboard. A random visitor ID is stored in the visitor's browser localStorage; no names, emails or IP-based profiles are collected by the widget.<\/li>\n<\/ul>\n\n<p>If you enable the consent-required option, none of the above happens until the visitor accepts via your cookie banner.<\/p>\n\n<p>This service is provided by RA Meedia O\u00dc (Estonia, EU): <a href=\"https:\/\/heyly.io\/legal\/terms\">terms<\/a>, <a href=\"https:\/\/heyly.io\/legal\/privacy\">privacy policy<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Create a free account at <a href=\"https:\/\/heyly.io\">heyly.io<\/a> and upload or record your greeting video.<\/li>\n<li>In your heyly.io dashboard, copy the Video ID from the install snippet (the <code>data-video<\/code> value).<\/li>\n<li>In WordPress, go to <strong>Settings \u2192 heyly.io Widget<\/strong>, paste the Video ID into Slot 1 and enable it.<\/li>\n<li>Visit your site \u2014 the greeting bubble appears in the bottom-right corner.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20find%20my%20video%20id%3F\"><h3>Where do I find my Video ID?<\/h3><\/dt>\n<dd><p>Log in to your <a href=\"https:\/\/heyly.io\/dashboard\">heyly.io dashboard<\/a>, open a site, and copy the script snippet shown. The <code>data-video<\/code> value is your Video ID.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20paid%20plan%3F\"><h3>Do I need a paid plan?<\/h3><\/dt>\n<dd><p>No. The Free plan works with this plugin (1 video, 1,000 views every 30 days, \"Powered by heyly.io\" badge on the widget). Pro adds up to 3 videos per site and removes the badge.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20load%20any%20third-party%20code%3F\"><h3>Does the plugin load any third-party code?<\/h3><\/dt>\n<dd><p>The plugin only outputs a single <code>&lt;script&gt;<\/code> tag pointing to <code>https:\/\/heyly.io\/widget.js<\/code>. The widget script itself is loaded by the visitor's browser from heyly.io \u2014 see the External services section above.<\/p><\/dd>\n<dt id=\"is%20it%20gdpr-friendly%3F\"><h3>Is it GDPR-friendly?<\/h3><\/dt>\n<dd><p>The widget collects no personal data by default (a random ID in localStorage for analytics, no IP profiles). If you want to be strict, enable the consent-required option and wire it to your cookie banner \u2014 the widget then stays completely inactive until the visitor accepts.<\/p><\/dd>\n<dt id=\"can%20visitors%20close%20the%20widget%3F\"><h3>Can visitors close the widget?<\/h3><\/dt>\n<dd><p>Yes \u2014 the bubble has a small \u00d7 button. Closing it hides the widget for the rest of the visitor's browsing session.<\/p><\/dd>\n<dt id=\"is%20it%20wpml%20%2F%20polylang%20compatible%3F\"><h3>Is it WPML \/ Polylang compatible?<\/h3><\/dt>\n<dd><p>Yes. When either plugin is active the settings screen shows your configured languages as checkboxes per slot, and the widget only renders when the current language matches.<\/p><\/dd>\n<dt id=\"i%27m%20on%20a%20multilingual%20site%20without%20wpml%2Fpolylang%20%E2%80%94%20can%20i%20still%20show%20a%20different%20video%20per%20language%3F\"><h3>I'm on a multilingual site without WPML\/Polylang \u2014 can I still show a different video per language?<\/h3><\/dt>\n<dd><p>Yes. Use the per-post \"heyly.io Video\" meta box on each translated page and pick a different override Video ID.<\/p><\/dd>\n<dt id=\"why%20isn%27t%20the%20widget%20showing%3F\"><h3>Why isn't the widget showing?<\/h3><\/dt>\n<dd><p>View the page source and search for \"heyly\" \u2014 the plugin prints a diagnostic HTML comment explaining which rule matched (or why nothing did). Common causes: the slot is disabled, an exclude rule matches, or consent-required is on without a banner integration.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Plugin Check compliance pass: input-sanitization annotations, translators comment, REQUEST_URI sanitization, prefixed uninstall variables.<\/li>\n<li>Removed deprecated load_plugin_textdomain() call (WordPress loads translations automatically since 4.6).<\/li>\n<li>Tested up to WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Clearer placeholder text on include\/exclude rule fields \u2014 explicitly marked as optional examples to avoid users typing them in by accident.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Tabbed slot UI \u2014 no more long scroll.<\/li>\n<li>Relaxed Video ID validation (accepts any 8\u2013100 char ID; format check happens server-side anyway).<\/li>\n<li>Diagnostic HTML comment on every page so admins can View Source to see why the widget did\/didn't render.<\/li>\n<li>Live tab labels and Enabled-dot updates without saving.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Up to 3 video slots with include\/exclude rules.<\/li>\n<li>WPML + Polylang language targeting.<\/li>\n<li>Per-post override meta box.<\/li>\n<\/ul>","raw_excerpt":"In a world full of AI, real you wins. Greet visitors with a 30-second video and swap it as easily as an Instagram Story. Up to 5 CTA buttons.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/337369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=337369"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nalut"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=337369"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=337369"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=337369"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=337369"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=337369"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=337369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}