{"id":392548,"date":"2026-10-27T07:16:02","date_gmt":"2026-10-27T07:16:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/stay-put-sticky-widgets-elements\/"},"modified":"2026-10-27T07:15:24","modified_gmt":"2026-10-27T07:15:24","slug":"stayrail","status":"publish","type":"plugin","link":"https:\/\/az.wordpress.org\/plugins\/stayrail\/","author":20261278,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.5.0","stable_tag":"0.5.0","tested":"7.1.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Stayrail \u2013 Sticky Widgets & Elements","header_author":"Inovex AS","header_description":"Make any widget, block or page element sticky while visitors scroll. Lightweight, no jQuery, zero layout shift, and a one-click import from Fixed Widget.","assets_banners_color":"879af0","last_updated":"2026-10-27 07:15:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/stayrailwp.com","header_author_uri":"https:\/\/inovex.no","rating":0,"author_block_rating":0,"active_installs":0,"downloads":69,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.5.0":{"tag":"0.5.0","author":"hasseandre","date":"2026-10-27 07:15:24","revision":3767916}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3767916,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3767916,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3767916,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3770690,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3770690,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3767916,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3767916,"resolution":"2","location":"assets","locale":"","width":1280,"height":860},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3767916,"resolution":"3","location":"assets","locale":"","width":1280,"height":860},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3767916,"resolution":"4","location":"assets","locale":"","width":1280,"height":860}},"screenshots":{"1":"A newsletter widget stays in view while the visitor reads \u2013 and stops before the footer.","2":"One clear settings screen: three ways to make something sticky, plus spacing.","3":"Any block can be made sticky from the Sticky panel in the block editor.","4":"Stop elements and per-device control."}},"plugin_section":[],"plugin_tags":[29969,4007,181326,4842,20346],"plugin_category":[],"plugin_contributors":[288879],"plugin_business_model":[],"class_list":["post-392548","plugin","type-plugin","status-publish","hentry","plugin_tags-fixed-widget","plugin_tags-sticky","plugin_tags-sticky-block","plugin_tags-sticky-sidebar","plugin_tags-sticky-widget","plugin_contributors-hasseandre","plugin_committers-hasseandre"],"banners":{"banner":"https:\/\/ps.w.org\/stayrail\/assets\/banner-772x250.png?rev=3770690","banner_2x":"https:\/\/ps.w.org\/stayrail\/assets\/banner-1544x500.png?rev=3770690","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/stayrail\/assets\/icon.svg?rev=3767916","icon":"https:\/\/ps.w.org\/stayrail\/assets\/icon.svg?rev=3767916","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/stayrail\/assets\/screenshot-1.png?rev=3767916","caption":"A newsletter widget stays in view while the visitor reads \u2013 and stops before the footer."},{"src":"https:\/\/ps.w.org\/stayrail\/assets\/screenshot-2.png?rev=3767916","caption":"One clear settings screen: three ways to make something sticky, plus spacing."},{"src":"https:\/\/ps.w.org\/stayrail\/assets\/screenshot-3.png?rev=3767916","caption":"Any block can be made sticky from the Sticky panel in the block editor."},{"src":"https:\/\/ps.w.org\/stayrail\/assets\/screenshot-4.png?rev=3767916","caption":"Stop elements and per-device control."}],"raw_content":"<!--section=description-->\n<p>Stayrail keeps your most important content in view: sidebar ads, sign-up forms, tables of contents, calls to action or anything else you choose.<\/p>\n\n<p>It is a modern, actively maintained alternative to the \"Fixed Widget\" (Q2W3) plugin, and it can import your existing Fixed Widget setup in one click.<\/p>\n\n<h4>Three ways to make something sticky<\/h4>\n\n<ul>\n<li><strong>Blocks<\/strong> \u2013 select any block in the editor, site editor or block widget editor and switch on \"Keep sticky while scrolling\".<\/li>\n<li><strong>Classic widgets<\/strong> \u2013 tick \"Keep sticky while scrolling\" on any widget under Appearance \u2192 Widgets.<\/li>\n<li><strong>Anything else<\/strong> \u2013 add a CSS selector in the settings, or give an element the class <code>stayrail-sticky<\/code>. Works with page builders such as Elementor, Divi, Bricks and Brizy.<\/li>\n<\/ul>\n\n<h4>Built to just work<\/h4>\n\n<ul>\n<li>Stable width when zooming, resizing or rotating the screen.<\/li>\n<li>Zero layout shift: a placeholder keeps the element's spot in the page.<\/li>\n<li>Automatically stays below the admin bar and sticky headers.<\/li>\n<li>Automatically stops at the site footer, plus your own stop elements.<\/li>\n<li>Several sticky widgets in one sidebar stack neatly.<\/li>\n<li>Choose desktop, tablet and\/or mobile, with your own breakpoints.<\/li>\n<li>Elements taller than the screen scroll until their bottom is reached, then stick.<\/li>\n<li>Plain JavaScript, no jQuery. Script loads deferred.<\/li>\n<li>Translation-ready. Norwegian (bokm\u00e5l) included.<\/li>\n<\/ul>\n\n<h4>Switching from Fixed Widget<\/h4>\n\n<p>Activate Stayrail and you'll see an import notice. One click copies your margins, stop elements, custom elements, minimum screen size and every widget you had marked as fixed. Then deactivate Fixed Widget.<\/p>\n\n<h4>For developers<\/h4>\n\n<ul>\n<li><code>window.Stayrail.refresh()<\/code> \u2013 re-scan the page after loading content with JavaScript (infinite scroll, AJAX).<\/li>\n<li><code>document.dispatchEvent( new Event( 'stayrail:refresh' ) )<\/code> \u2013 same, event-based.<\/li>\n<li><code>data-stayrail-devices=\"desktop,tablet\"<\/code> \u2013 per-element device override.<\/li>\n<li><code>data-stayrail-after=\"30\"<\/code> \u2013 only stick after 30 % of the page has been scrolled.<\/li>\n<li><code>.stayrail-is-stuck<\/code> \u2013 class added while an element is pinned.<\/li>\n<li><code>stayrail:stuck<\/code> \/ <code>stayrail:released<\/code> \u2013 events fired on the element when it is pinned or released.<\/li>\n<li><code>stayrail_frontend_config<\/code> \u2013 filter the configuration sent to the script.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>Stayrail includes the Freemius SDK, which is used only to sell and license the optional Stayrail Pro add-on. It runs in anonymous mode: the free plugin shows no opt-in screen and sends no data on its own.<\/p>\n\n<p>Data is sent to Freemius (https:\/\/freemius.com) only if you choose to opt in from the Plugins screen, or when you buy or activate Stayrail Pro. In that case Freemius receives your site address, WordPress and plugin versions, and the admin e-mail and name used for the license. Freemius terms: https:\/\/freemius.com\/terms\/ \u2013 privacy policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to Settings \u2192 Stayrail.<\/li>\n<li>Make a block, widget or element sticky using one of the three methods above.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"the%20sticky%20element%20doesn%27t%20stick.\"><h3>The sticky element doesn't stick.<\/h3><\/dt>\n<dd><p>Check that the device type is enabled under Devices, and that your browser window is wider than the minimum width (if set). Clear your page cache after changing settings.<\/p><\/dd>\n<dt id=\"the%20element%20ends%20up%20behind%20other%20content.\"><h3>The element ends up behind other content.<\/h3><\/dt>\n<dd><p>Raise the layer (z-index) under Advanced.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20caching%20and%20optimization%20plugins%3F\"><h3>Does it work with caching and optimization plugins?<\/h3><\/dt>\n<dd><p>Yes. The script has no dependencies and can be deferred or combined.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Translations now come from translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Prepared for Stayrail Pro through Freemius (anonymous mode, no data sent by default).<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>New events: stayrail:stuck and stayrail:released on pinned elements.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Per-element rules via data attributes (devices, scroll depth).<\/li>\n<li>Extension points for add-ons on the settings screen.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Make any widget, block or element sticky while visitors scroll. Lightweight, no jQuery, zero layout shift \u2013 with one-click import from Fixed Widget.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/392548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=392548"}],"author":[{"embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hasseandre"}],"wp:attachment":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=392548"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=392548"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=392548"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=392548"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=392548"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=392548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}