{"id":386997,"date":"2026-10-14T08:12:21","date_gmt":"2026-10-14T08:12:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/"},"modified":"2026-10-14T08:14:21","modified_gmt":"2026-10-14T08:14:21","slug":"hoverbuy-sticky-add-to-cart-bar-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/","author":17599152,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"Hoverbuy \u2013 Sticky Add to Cart Bar for WooCommerce","header_author":"Emtiaz Zahid","header_description":"A sticky add to cart bar with image, price, quantity and button that appears when the real button scrolls away. Variable products work too.","assets_banners_color":"a58f66","last_updated":"2026-10-14 08:14:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/emtiazzahid.github.io\/plugins\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/","header_author_uri":"https:\/\/github.com\/emtiazzahid","rating":0,"author_block_rating":0,"active_installs":0,"downloads":36,"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":"emtiazzahid","date":"2026-10-14 08:14:21","revision":3745675}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3745664,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3745664,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3745664,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3745664,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3745664,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3745664,"resolution":"1","location":"assets","locale":"","width":2560,"height":1600},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3745664,"resolution":"2","location":"assets","locale":"","width":2560,"height":1600},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3745664,"resolution":"3","location":"assets","locale":"","width":2560,"height":1600},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3745664,"resolution":"4","location":"assets","locale":"","width":2560,"height":1600},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3745664,"resolution":"5","location":"assets","locale":"","width":2560,"height":1600},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3745664,"resolution":"6","location":"assets","locale":"","width":2560,"height":1600}},"screenshots":{"1":"The bar at the bottom of a desktop product page: image, name, price, quantity and Add to cart, one click away.","2":"The compact phone layout keeps the image, price and button in a slim bar.","3":"A variable product before a choice: \"Choose options\" takes the shopper straight back to the options.","4":"Display settings: when the bar appears, where it sits and on which devices.","5":"Conditions: show the bar everywhere or only where it helps, by product, category, tag or type.","6":"Design settings with the live preview, updated before you save."}},"plugin_section":[],"plugin_tags":[48214,984,286680,142281,167825],"plugin_category":[55],"plugin_contributors":[191403],"plugin_business_model":[],"class_list":["post-386997","plugin","type-plugin","status-publish","hentry","plugin_tags-add-to-cart-button","plugin_tags-conversion","plugin_tags-floating-add-to-cart","plugin_tags-sticky-add-to-cart","plugin_tags-woocommerce-product-page","plugin_category-seo-and-marketing","plugin_contributors-emtiazzahid","plugin_committers-emtiazzahid"],"banners":{"banner":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/banner-772x250.png?rev=3745664","banner_2x":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/banner-1544x500.png?rev=3745664","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/icon.svg?rev=3745664","icon":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/icon.svg?rev=3745664","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/screenshot-1.png?rev=3745664","caption":"The bar at the bottom of a desktop product page: image, name, price, quantity and Add to cart, one click away."},{"src":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/screenshot-2.png?rev=3745664","caption":"The compact phone layout keeps the image, price and button in a slim bar."},{"src":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/screenshot-3.png?rev=3745664","caption":"A variable product before a choice: \"Choose options\" takes the shopper straight back to the options."},{"src":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/screenshot-4.png?rev=3745664","caption":"Display settings: when the bar appears, where it sits and on which devices."},{"src":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/screenshot-5.png?rev=3745664","caption":"Conditions: show the bar everywhere or only where it helps, by product, category, tag or type."},{"src":"https:\/\/ps.w.org\/hoverbuy-sticky-add-to-cart-bar-for-woocommerce\/assets\/screenshot-6.png?rev=3745664","caption":"Design settings with the live preview, updated before you save."}],"raw_content":"<!--section=description-->\n<p>Hoverbuy adds a sticky add to cart bar to your WooCommerce product pages. When a shopper scrolls past the product's own Add to cart button, a slim bar slides in at the bottom (or top) of the screen with the product image, name, price, star rating (once the product has reviews), stock status (when WooCommerce shows one), a quantity box and an Add to cart button. It is free and does not need a particular theme: it works from the add-to-cart form WooCommerce prints on the product page.<\/p>\n\n<p>The bar's button does not add anything to the cart by itself. It presses your product page's own Add to cart button or submits the product's own form with that button, so WooCommerce adds exactly what the form holds: the chosen variation, the quantity and any fields other plugins put in the form.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Appears when it matters.<\/strong> By default the bar shows once the real Add to cart button has scrolled out of view (watched with the browser's IntersectionObserver). You can switch to \"after the visitor scrolls a set distance\" instead; that mode is also the fallback in browsers without IntersectionObserver.<\/li>\n<li><strong>Variable products in the free version.<\/strong> Until a variation is chosen the button reads \"Choose options\" and takes the shopper back to the product form. Once a variation is chosen, the bar's price and stock status follow it and the button adds that variation.<\/li>\n<li><strong>Quantity in step with the form.<\/strong> The bar's quantity box and the product form's quantity box mirror each other, including the minimum and maximum the form allows.<\/li>\n<li><strong>Top or bottom.<\/strong> At the top, the bar sits below the WordPress admin bar and below a full-width fixed or sticky header. At the bottom, it sits above a full-width bar fixed to the bottom of the screen, such as a mobile navigation bar.<\/li>\n<li><strong>Optional hiding.<\/strong> Hide the bar while the visitor scrolls up, and while a cart drawer or side cart is open.<\/li>\n<li><strong>Devices.<\/strong> Switch the bar on or off for desktop, tablet and mobile. A compact phone layout (image, price and button, on by default) is used on screens under 768 px.<\/li>\n<li><strong>Conditions.<\/strong> Show it on all products, or only on products that match your rules: chosen products, categories (subcategories included), tags or product types (simple, variable, grouped, external and any type another plugin registers). Exclude products, categories, tags or types. Exclusions win over inclusions.<\/li>\n<li><strong>Per-product override.<\/strong> A \"Sticky add to cart bar\" box on the product edit screen: Default, Show or Hide. Show and Hide win over the rules above.<\/li>\n<li><strong>Design.<\/strong> Background, text, button background, button text and border colours (leave a colour empty to keep your theme's; an empty background or border uses the bar's light default), a soft shadow, the button text and the button corner radius. \"Use theme button styles\" (on by default) gives the button your theme's own button classes. The stacking order (z-index) is under Advanced.<\/li>\n<li><strong>Live preview.<\/strong> The settings screen shows one of your product pages with the bar (only you can see it) and applies your position, content and design changes before you save them.<\/li>\n<li><strong>Accessible.<\/strong> The bar is a labelled region, every control is reachable by keyboard, a hidden bar cannot receive focus, the bar never moves focus on its own and does not slide away while it holds keyboard focus, and animations are switched off when the visitor's system asks for reduced motion.<\/li>\n<li><strong>Light.<\/strong> One stylesheet and one script without dependencies, loaded only on product pages where the bar is shown. A chosen variation's price and stock status come from WooCommerce's own variation event, so the bar makes no AJAX requests of its own.<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>On a product page, Hoverbuy checks the settings, the product's own override, the product type, its categories and tags, and the visitor's device. If the bar should not appear, nothing is added to the page.<\/li>\n<li>If it should, the bar is printed after the product (or in the page footer when the template does not fire WooCommerce's <code>woocommerce_after_single_product<\/code> hook) and the script watches the real Add to cart button.<\/li>\n<li>The bar's quantity box already mirrors the form's. When the shopper clicks the bar's button, Hoverbuy presses the real Add to cart button or submits the product form with that button, and WooCommerce adds the product from that form.<\/li>\n<li>When the add is done without a page reload and WooCommerce's <code>added_to_cart<\/code> event fires, the bar shows \"Added to cart.\" with a View cart link.<\/li>\n<\/ol>\n\n<p>The bar needs JavaScript; without it, shoppers simply use the normal product form.<\/p>\n\n<h4>Compatibility<\/h4>\n\n<ul>\n<li><strong>Block themes.<\/strong> The Single Product block template fires <code>woocommerce_after_single_product<\/code>, and the bar is printed there or in the footer.<\/li>\n<li><strong>Page builders.<\/strong> The bar looks for WooCommerce's add-to-cart form (<code>form.cart<\/code>) and its button (<code>.single_add_to_cart_button<\/code>) on the page. If your product template uses different markup, set your own form and button selectors under Advanced.<\/li>\n<li><strong>Product add-ons and custom fields.<\/strong> Fields that other plugins add inside the product form are submitted with it, because the bar submits that same form.<\/li>\n<li><strong>Variation swatches.<\/strong> Swatch plugins that drive WooCommerce's own variation form update the bar too, because the bar listens to WooCommerce's <code>found_variation<\/code> and <code>reset_data<\/code> events.<\/li>\n<li><strong>Side carts.<\/strong> Hoverbuy sends no cart request of its own: the add goes through the product's form and WooCommerce. The bar hides while the page's html or body element carries a class from the \"Cart drawer classes\" list under Advanced. The default list covers the WooCommerce Mini-Cart block, Side Cart WooCommerce (XootiX), WPC Fly Cart, FunnelKit Cart and Modern Cart, each class taken from that plugin's own code; add the class your drawer uses if it is not there.<\/li>\n<\/ul>\n\n<h4>Developers<\/h4>\n\n<ul>\n<li>Filters: <code>hoverbuy_should_render<\/code> (final say on rendering), <code>hoverbuy_bar_parts<\/code> (add, remove or reorder the bar's parts), <code>hoverbuy_bar_settings<\/code> (settings for one product's bar), <code>hoverbuy_contexts<\/code> (name =&gt; conditional callback for the pages where the bar may appear; the page's queried object must still be a product, and the default is <code>product<\/code> =&gt; <code>is_product<\/code>), <code>hoverbuy_bar_allowed_html<\/code> (tags allowed in parts), <code>hoverbuy_capability<\/code> (who can change the settings and open the preview; default <code>manage_woocommerce<\/code>).<\/li>\n<li>Action: <code>hoverbuy_after_add<\/code> fires after a product added through the bar's button reaches the cart, with the cart item key, product id, quantity and variation id.<\/li>\n<li>JavaScript: the bar dispatches a bubbling <code>hoverbuy_bar_clicked<\/code> event with <code>detail.productId<\/code> and <code>detail.state<\/code> (<code>ready<\/code> or <code>choose<\/code>).<\/li>\n<li>Template: copy <code>templates\/bar.php<\/code> to <code>yourtheme\/hoverbuy\/bar.php<\/code> to change the markup.<\/li>\n<\/ul>\n\n<h4>More plugins by Emtiaz Zahid<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/launchmender\/\">Launchmender<\/a>: 44 pre-launch checks with one-click fixes, a manual checklist and a client handoff report<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/faultwright\/\">Faultwright<\/a>: PHP errors, JavaScript errors, failed cron jobs, emails and updates on one timeline<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/stalemender\/\">Stalemender<\/a>: content audit that gives every post a Freshness Score (0\u2013100) and tells you why<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/waymender\/\">Waymender<\/a>: finds broken links without hammering your server, logs 404s and fixes both in one click<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/anchormender\/\">Anchormender<\/a>: internal link suggestions while you write, an orphan post report and bulk internal linking<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/repeatwright\/\">Repeatwright<\/a>: RFM customer segments, repeat rate, LTV and cohort retention from your own WooCommerce orders<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Install Hoverbuy from the Plugins screen (or upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>) and activate it.<\/li>\n<li>Open a product page that has an Add to cart button and scroll past the button: the bar works with the default settings.<\/li>\n<li>To change it, go to WooCommerce \u2192 Sticky Add to Cart.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20variable%20products%3F\"><h3>Does it work with variable products?<\/h3><\/dt>\n<dd><p>Yes, in the free version. Until the shopper chooses a variation, the bar's button reads \"Choose options\", scrolls back to the product form and moves the keyboard focus to the first option the shopper can pick. After a choice, the bar shows that variation's price and stock status, and its button adds the variation with the quantity in the bar. Grouped and external products work too: the bar submits their form the same way (there is no quantity box in the bar for them).<\/p><\/dd>\n<dt id=\"my%20theme%20already%20has%20a%20sticky%20add%20to%20cart%20bar.%20how%20do%20i%20avoid%20two%3F\"><h3>My theme already has a sticky add to cart bar. How do I avoid two?<\/h3><\/dt>\n<dd><p>Switch one of them off. Storefront has its own bar under Appearance \u2192 Customize \u2192 WooCommerce \u2192 Product Page \u2192 Sticky Add-To-Cart, and OceanWP has one under Appearance \u2192 Customize \u2192 WooCommerce \u2192 Single Product \u2192 Floating Bar. Both are on by default, and the Hoverbuy settings screen reminds you while they are. Flatsome and Woodmart have one in their theme options, and Hoverbuy shows a reminder for them as well. To switch Hoverbuy off instead, untick \"Show the bar on product pages\" under WooCommerce \u2192 Sticky Add to Cart \u2192 Display.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%20or%20other%20page-builder%20product%20templates%3F\"><h3>Does it work with Elementor or other page-builder product templates?<\/h3><\/dt>\n<dd><p>It works when the product template contains WooCommerce's add-to-cart form: a <code>form.cart<\/code> with a <code>.single_add_to_cart_button<\/code> button, which is the markup WooCommerce's own add-to-cart template prints. If your template uses other markup, enter its form and button selectors under Advanced. If neither is found on the page, the bar stays hidden rather than showing a button that would do nothing.<\/p><\/dd>\n<dt id=\"the%20bar%20does%20not%20appear%20on%20my%20product%20page.%20what%20can%20i%20check%3F\"><h3>The bar does not appear on my product page. What can I check?<\/h3><\/dt>\n<dd><p>The bar only appears on products that have an add-to-cart form (it does not appear on an out-of-stock simple product, for example), when the Conditions and the product's own Show\/Hide box allow it, and on devices that are switched on. If all of that is fine, your theme probably renders the form with other markup: set the form and button selectors under Advanced.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20side%20cart%20plugins%3F\"><h3>Does it work with side cart plugins?<\/h3><\/dt>\n<dd><p>Yes. The bar runs no add-to-cart request of its own; the product is added through the product's own form and WooCommerce. While a cart drawer is open the bar hides, as long as the drawer adds one of the classes listed under Advanced \u2192 Cart drawer classes to the page.<\/p><\/dd>\n<dt id=\"does%20the%20device%20setting%20work%20with%20page%20caching%3F\"><h3>Does the device setting work with page caching?<\/h3><\/dt>\n<dd><p>The device is checked on the server from the browser's user agent and again in the browser from the screen width (phones under 768 px, tablets from 768 to 1024 px). If your page cache serves the same copy of a page to every device, the browser check still hides the bar on a device you switched off, but a page cached for a device you switched off has no bar for anyone. In that case keep all devices on, or, if your cache plugin offers one, turn on its separate cache for mobile visitors.<\/p><\/dd>\n<dt id=\"is%20the%20bar%20shown%20on%20the%20shop%2C%20category%20or%20cart%20pages%3F\"><h3>Is the bar shown on the shop, category or cart pages?<\/h3><\/dt>\n<dd><p>No. It appears on single product pages only, and its stylesheet and script are loaded only on product pages where it is shown.<\/p><\/dd>\n<dt id=\"does%20hoverbuy%20collect%20data%20or%20send%20anything%20to%20its%20author%3F\"><h3>Does Hoverbuy collect data or send anything to its author?<\/h3><\/dt>\n<dd><p>No. It has no tracking, sends nothing to its author or to any other outside service, and stores only its settings and the per-product Show\/Hide choice in your own database. Deleting the plugin removes both, unless you tick \"Keep these settings\" under Advanced.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: sticky add to cart bar that proxies the product's own form, button and scroll-distance triggers, variation price and stock sync, quantity sync, top or bottom position, device toggles and a compact phone layout, include and exclude conditions with a per-product override, design settings with a live preview, cart drawer hiding, and developer hooks.<\/li>\n<\/ul>","raw_excerpt":"A sticky add to cart bar with image, price, quantity and button that appears when the real button scrolls away. Variable products work too.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/386997","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=386997"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/emtiazzahid"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=386997"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=386997"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=386997"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=386997"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=386997"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=386997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}