{"id":402232,"date":"2026-11-12T12:59:52","date_gmt":"2026-11-12T12:59:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ghostlabs-glide\/"},"modified":"2026-11-12T12:59:37","modified_gmt":"2026-11-12T12:59:37","slug":"ghostlabs-glide","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ghostlabs-glide\/","author":23277533,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.4","stable_tag":"1.0.4","tested":"7.1.4","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"GhostLabs Glide","header_author":"GhostLabs","header_description":"Content slider plugin. Free edition (content slider mode).","last_updated":"2026-11-12 12:59:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/theghostlab.io\/glide","header_author_uri":"https:\/\/theghostlab.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":78,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.0.4":{"tag":"1.0.4","author":"ghostlabs","date":"2026-11-12 12:59:37","revision":3798351}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3798348,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3798348,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3798348,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3798348,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3798348,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"ghostlabs\/glide":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/glide","version":"1.0.4","title":"Glide","category":"design","icon":"slides","description":"Scrollytelling and a content slider, built from blocks.","keywords":["slider","carousel","slideshow","scrollytelling"],"example":{},"attributes":{"mode":{"type":"string","default":"contentSlider"},"regionLabel":{"type":"string","default":""},"contentSlider":{"type":"object","default":{"loop":true,"autoplay":false,"autoplayInterval":5000,"showArrows":true,"slidesPerView":1,"gap":0,"speed":6,"dragFree":false,"fade":false,"navigation":"dots","height":"60vh","heightAuto":false,"useResponsiveHeight":false,"heightDesktop":600,"heightTablet":450,"heightMobile":300,"fit":"cover","verticalAlign":"center","showThumbnails":false,"thumbnailPosition":"bottom","autoHideControls":false}},"stickyScroll":{"type":"object","default":{"stickyOffset":40,"railPosition":"left","railWidth":240,"markerStyle":"numbered","showProgressLine":true,"showStepCounter":false,"smoothScroll":true}}},"supports":{"align":["wide","full"]},"textdomain":"ghostlabs-glide","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php","viewScript":"file:.\/view.js"},"ghostlabs\/glide-testimonial-rating":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/glide-testimonial-rating","version":"1.0.4","title":"Glide Testimonial Rating","category":"design","icon":"star-filled","description":"A 1-5 star rating for use inside a Glide Slide testimonial.","keywords":["rating","stars","testimonial","review"],"ancestor":["ghostlabs\/glide-slide"],"attributes":{"value":{"type":"number","default":5},"textAlign":{"type":"string"}},"supports":{"html":false,"color":{"text":true,"background":false,"link":false}},"textdomain":"ghostlabs-glide","editorScript":"file:.\/index.js","style":"file:.\/style-index.css","render":"file:.\/render.php"},"ghostlabs\/glide-slide":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/glide-slide","version":"1.0.4","title":"Glide Slide","category":"design","icon":"cover-image","description":"One slide or scroll step. Holds any blocks except another Glide.","keywords":["slide","carousel","slider"],"example":{},"parent":["ghostlabs\/glide"],"attributes":{"videoSource":{"type":"string","default":"file"},"videoUrl":{"type":"string","default":""},"videoId":{"type":"number"},"videoPoster":{"type":"string","default":""},"videoAutoplay":{"type":"boolean","default":true},"videoLoop":{"type":"boolean","default":true},"videoMuted":{"type":"boolean","default":true},"videoControls":{"type":"boolean","default":true},"stepTitle":{"type":"string","default":""},"useHeadingAsTitle":{"type":"boolean","default":true},"includeInContents":{"type":"boolean","default":true}},"supports":{"align":false},"textdomain":"ghostlabs-glide","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"ghostlabs\/glide-overlay":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/glide-overlay","version":"1.0.4","title":"Glide Overlay","category":"design","icon":"layout","description":"Overlay content displayed on top of the slider.","keywords":["overlay","caption","layer"],"example":{},"parent":["ghostlabs\/glide"],"supports":{"color":{"background":true,"text":true},"spacing":{"padding":true,"margin":false}},"textdomain":"ghostlabs-glide","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"}},"tagged_versions":["1.0.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3798348,"resolution":"1","location":"assets","locale":"","width":2560,"height":1600},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3798348,"resolution":"2","location":"assets","locale":"","width":2560,"height":1600},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3798348,"resolution":"3","location":"assets","locale":"","width":2560,"height":1600}},"screenshots":{"1":"The layout picker on a freshly inserted Glide block.","2":"A content slider with thumbnails and a progress bar.","3":"The Sticky Chapters layout, with its contents rail."}},"plugin_section":[],"plugin_tags":[4121,786,56659,611,4007],"plugin_category":[50],"plugin_contributors":[242362],"plugin_business_model":[],"class_list":["post-402232","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-carousel","plugin_tags-scrollytelling","plugin_tags-slider","plugin_tags-sticky","plugin_category-media","plugin_contributors-ghostlabs","plugin_committers-ghostlabs"],"banners":{"banner":"https:\/\/ps.w.org\/ghostlabs-glide\/assets\/banner-772x250.png?rev=3798348","banner_2x":"https:\/\/ps.w.org\/ghostlabs-glide\/assets\/banner-1544x500.png?rev=3798348","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/ghostlabs-glide\/assets\/icon.svg?rev=3798348","icon":"https:\/\/ps.w.org\/ghostlabs-glide\/assets\/icon.svg?rev=3798348","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ghostlabs-glide\/assets\/screenshot-1.png?rev=3798348","caption":"The layout picker on a freshly inserted Glide block."},{"src":"https:\/\/ps.w.org\/ghostlabs-glide\/assets\/screenshot-2.png?rev=3798348","caption":"A content slider with thumbnails and a progress bar."},{"src":"https:\/\/ps.w.org\/ghostlabs-glide\/assets\/screenshot-3.png?rev=3798348","caption":"The Sticky Chapters layout, with its contents rail."}],"raw_content":"<!--section=description-->\n<p>Glide adds four blocks that work together to build scroll-driven sections and\nsliders, with no shortcodes and no page-builder lock-in. Everything renders\nserver-side, so a step or a slide is real content in your post, and a Sticky\nChapters section is readable with JavaScript switched off.<\/p>\n\n<p><strong>Sticky Chapters<\/strong> \u2014 a contents rail that stays in view beside your steps and\nhighlights the one being read, built from the headings you already wrote. Put it\non either side or across the top, with numbered, dot or plain markers, a\nprogress line and a step counter. On phones it becomes a strip above the steps\nthat scrolls sideways to keep the current chapter in view. A step can take a\ntitle of its own, or stay on the page but out of the rail.<\/p>\n\n<p><strong>Content Slider<\/strong> \u2014 one to six slides per view, with arrows, dots, a progress\nbar or no controls, autoplay, loop, drag-free scrolling, keyboard navigation and\nthumbnails below, above or beside the slides. Fit it to the tallest slide, or\nset a height for desktop, tablet and phone. An overlay block holds content of\nits own on top of the slider.<\/p>\n\n<p><strong>Video backgrounds<\/strong> \u2014 from your Media Library, YouTube, Vimeo or another\noEmbed provider, with play and mute buttons for Media Library, YouTube and Vimeo\nvideo. In the slider, a video pauses when its slide leaves. A Media Library\nvideo with no thumbnail gets a poster made from one of its frames (see \"Video\nthumbnails use ffmpeg\" below).<\/p>\n\n<p><strong>While you edit<\/strong> \u2014 the sidebar warns you about settings that cost readers\ncontrol: arrows, dots and thumbnails all switched off, controls hidden until\nhover, or a video background with no play and mute buttons.<\/p>\n\n<h4>Glide Pro<\/h4>\n\n<p>Glide Pro adds three more sticky-scroll layouts (Sticky Media, Stacking Cards\nand Horizontal Pin), a marquee that loops any blocks left, right, up or down,\nthe Scale and Barn Doors transitions for the content slider, and chapter links\nmade from each step's title. It is a separate plugin, sold at\n<a href=\"https:\/\/theghostlab.io\/glide\">https:\/\/theghostlab.io\/glide<\/a>, and this plugin contains none of its features.<\/p>\n\n<h4>Accessibility<\/h4>\n\n<ul>\n<li>Arrow and pause controls are real buttons with labels, not styled divs.<\/li>\n<li>Autoplay starts paused when the visitor asks for reduced motion, and the\npause control still works so they can start it if they want to.<\/li>\n<li>Off-screen slides are marked inert, so tabbing does not wander into content\nnobody can see.<\/li>\n<li>Sticky Chapters is CSS <code>position: sticky<\/code>, so the layout holds with JavaScript\nswitched off.<\/li>\n<li>A live region tells screen reader users which slide is showing, and stays\nquiet during autoplay.<\/li>\n<li>With arrows, dots and thumbnails all switched off, previous and next buttons\nare still added for keyboard users, visible only while they have focus.<\/li>\n<\/ul>\n\n<h3>External services and server requirements<\/h3>\n\n<p>Glide sends nothing about your site, your visitors or your content anywhere. It\nhas no telemetry and no update server \u2014 updates come from WordPress.org like any\nother plugin in the directory. Settings \u2192 Glide links to the GhostLabs website\nand to your GhostLabs account; those are links you choose to follow, and the\nplugin itself sends nothing to either. This section covers the two server-side\ndetails a reader of the source will find and should not have to guess about,\nand the video providers a slide can embed.<\/p>\n\n<h4>Video thumbnails use ffmpeg, if your host has it<\/h4>\n\n<p>When you give a slide a video from your Media Library and that video has no\nposter image, Glide extracts a single frame so the slide has something to show\nbefore the video loads. It runs <code>ffmpeg<\/code> on your own server, on a file already in\nyour own uploads directory.<\/p>\n\n<ul>\n<li>It is reached only through a REST route that requires the <code>upload_files<\/code>\ncapability \u2014 Author and above. That is the same capability WordPress already\nrequires to add the video in the first place, and the same one core's image\neditor runs under.<\/li>\n<li>No text from the request reaches the shell. The request carries an attachment\nID; WordPress resolves that to a path, the path is resolved with <code>realpath()<\/code>\nand must land inside your uploads directory, and every value interpolated into\na command goes through <code>escapeshellarg()<\/code>.<\/li>\n<li>If your host has no ffmpeg, or disables <code>exec()<\/code>, nothing errors. Glide falls\nback to capturing the frame in the browser instead.<\/li>\n<\/ul>\n\n<p>Nothing about this is required. A slide with a poster image set, or a video from\nYouTube or Vimeo, never reaches it at all.<\/p>\n\n<h4>YouTube and Vimeo embeds<\/h4>\n\n<p>A slide with a YouTube or Vimeo video background embeds that provider's player,\nwhich loads from the provider and is subject to their terms and privacy policy \u2014\nthe same as any embedded video anywhere on your site. It happens only on a slide\nwhere you have set one, and only in the visitor's browser.<\/p>\n\n<ul>\n<li>YouTube \u2014 player embedded from <code>www.youtube.com<\/code>:\n<a href=\"https:\/\/www.youtube.com\/t\/terms\">https:\/\/www.youtube.com\/t\/terms<\/a> and <a href=\"https:\/\/policies.google.com\/privacy\">https:\/\/policies.google.com\/privacy<\/a><\/li>\n<li>Vimeo \u2014 player embedded from <code>player.vimeo.com<\/code>, with <code>dnt=1<\/code> set:\n<a href=\"https:\/\/vimeo.com\/terms\">https:\/\/vimeo.com\/terms<\/a> and <a href=\"https:\/\/vimeo.com\/privacy\">https:\/\/vimeo.com\/privacy<\/a><\/li>\n<\/ul>\n\n<p>While you are editing, pasting a video URL fetches a thumbnail for the slide\npreview: from <code>img.youtube.com<\/code> for YouTube, and from Vimeo's public oEmbed\nendpoint for Vimeo. Both requests carry only the video URL you pasted.<\/p>\n\n<p>That thumbnail is saved as the slide's poster image at the provider's address.\nThe poster appears only in the thumbnail strip, so on a slider with thumbnail\nnavigation each visitor's browser loads it from <code>img.youtube.com<\/code>, or from\nVimeo's image server, <code>i.vimeocdn.com<\/code>. Choose a poster from your media library\ninstead, after setting the video URL, and that request goes away.<\/p>\n\n<h4>Other video providers<\/h4>\n\n<p>Any other video URL is embedded through WordPress's own oEmbed support: your\nserver asks that provider for its embed code, keeps the answer for a day, and\nthe visitor's browser loads the provider's player. Which provider, and whose\nterms apply, depends on the URL you paste. If the provider has no embed for\nthat URL, the slide shows no video, and your server asks again an hour later.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>Glide's compiled JavaScript and CSS are minified. The readable sources they were\nbuilt from, and the build configuration that produced them, are published here:<\/p>\n\n<p><a href=\"https:\/\/github.com\/theghostlab\/wp-ghostlabs-glide\">https:\/\/github.com\/theghostlab\/wp-ghostlabs-glide<\/a><\/p>\n\n<p>The repository builds with no credentials and no private packages:\n    pnpm install &amp;&amp; pnpm run build reproduces the <code>build\/<\/code> directory that ships\ninside the plugin, byte for byte.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>Glide styles structure \u2014 surfaces, spacing, the reading measure and the chrome it\ngenerates itself \u2014 and leaves type to your theme. Colors are derived from the\ntext color they inherit, so the blocks follow whatever palette they land in,\nincluding a dark one.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20site%20down%3F\"><h3>Will it slow my site down?<\/h3><\/dt>\n<dd><p>Each mode's JavaScript and CSS load only when a block on the page uses it, and\nthe slider module loads when the block scrolls into view rather than on page\nload.<\/p><\/dd>\n<dt id=\"how%20does%20it%20behave%20on%20a%20phone%3F\"><h3>How does it behave on a phone?<\/h3><\/dt>\n<dd><p>The Sticky Chapters rail becomes a strip above the steps, which scrolls sideways\nto keep the current chapter in view. The content slider shows one slide at a\ntime and moves its arrows below the slides, so they don't sit over your text,\nand on a short or zoomed-in screen it grows to fit each slide's content instead\nof cutting it off.<\/p><\/dd>\n<dt id=\"how%20do%20i%20switch%20to%20glide%20pro%3F\"><h3>How do I switch to Glide Pro?<\/h3><\/dt>\n<dd><p>Glide Pro is a separate plugin, and you install it the way you install any\nplugin from outside the directory:<\/p>\n\n<ol>\n<li>Download Glide Pro from your GhostLabs account.<\/li>\n<li>Upload it from the Add Plugins screen, with its Upload Plugin button.<\/li>\n<li>Activate it, then enter your license key under Settings \u2192 Glide.<\/li>\n<\/ol>\n\n<p>When Glide Pro is activated it switches this plugin off. Every block you have\nbuilt and every setting stays exactly as it is: both editions read the same\ndata, so there is nothing to migrate. The one thing that changes is Sticky\nChapters' links: Glide Pro makes each step's link from its title, so a link to a\nchapter shared from the free edition stops landing on it. Settings \u2192 Glide\nrepeats these steps under \"Already own Glide Pro?\".<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Bug fixes.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Bug fixes.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Scrollytelling sections for the block editor: a contents rail that follows the reader down the page, and a full content slider.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/402232","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=402232"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ghostlabs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=402232"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=402232"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=402232"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=402232"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=402232"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=402232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}