Title: Bang! Cart &#8211; Standalone Stripe Shopping Cart &amp; Buy Buttons
Author: Bang! Plugins
Published: <strong>August 5, 2026</strong>
Last modified: August 5, 2026

---

Search plugins

![](https://ps.w.org/bang-cart-for-stripe/assets/banner-772x250.png?rev=3635714)

![](https://ps.w.org/bang-cart-for-stripe/assets/icon-256x256.png?rev=3635714)

# Bang! Cart – Standalone Stripe Shopping Cart & Buy Buttons

 By [Bang! Plugins](https://profiles.wordpress.org/bangplugins/)

[Download](https://downloads.wordpress.org/plugin/bang-cart-for-stripe.3.5.0.zip)

 * [Details](https://wordpress.org/plugins/bang-cart-for-stripe/#description)
 * [Reviews](https://wordpress.org/plugins/bang-cart-for-stripe/#reviews)
 *  [Installation](https://wordpress.org/plugins/bang-cart-for-stripe/#installation)
 * [Development](https://wordpress.org/plugins/bang-cart-for-stripe/#developers)

 [Support](https://wordpress.org/support/plugin/bang-cart-for-stripe/)

## Description

Bang! Cart for Stripe gives every product a buy button you place exactly where you
want it – any page, any post, with a shortcode. Customers fill a fast, polished 
basket that matches your theme, and pay on Stripe’s own checkout page.

Your pages stay yours: the plugin adds no pages, no templates and no database tables
of its own. Stripe holds the card details and the order history – this plugin never
sees a card number and keeps no order records of its own.

**What it does**

 * Add-to-basket buttons for your Stripe products, or for products you add here.
 * A basket that works on a phone, in your theme, with your fonts and colours.
 * Delivery zones of your chosen countries – as many zones as you need, each with
   a flat rate per service, or first item plus each additional – with collection
   in person.
 * Free postage over a spend or a number of items.
 * A shop-wide sale percentage.
 * Discount codes, fixed or percentage, with a use limit and an expiry.
 * Stock counts, with low-stock and sold-out messages you write yourself.
 * Reservations, so two people cannot buy the same last item.
 * Confirmation emails to your customer and to you, in your own words.
 * A PDF receipt the plugin makes itself, attached to both order emails – switch
   it on under Invoice / receipt document on the Emails tab (a fresh install sends
   no document until you choose one).
 * Delayed bank payments handled properly – stock is not released while a Bacs payment
   settles.

**How your customers can pay**

Checkout happens on Stripe’s own payment page, so your shop offers whatever payment
methods your Stripe account has switched on – cards, Apple Pay, Google Pay and Link
out of the box, and methods like Klarna, iDEAL, Bancontact or Bacs Direct Debit 
where your country and your customer’s support them. Strong Customer Authentication(
3-D Secure) is handled there too, automatically. None of it is configured in this
plugin: you switch methods on in Stripe, and your checkout follows. Stripe ships
new payment methods, and your shop simply has them.

**What it deliberately does not do**

 * It does not store card details. Payment happens on Stripe’s page.
 * It does not keep a copy of your orders. Stripe already has them, and one truth
   beats two.
 * It does not do subscriptions, tax tables, or a hundred payment gateways.

**Who it suits**

Makers, artists, food producers, small-batch and craft shops – anyone selling a 
focused range of products from a site that is more than just a shop. If your products
live on pages you designed, and you want a buy button on each and a shopping cart
that follows your customer around the site, this is built for you.

**You will need**

A Stripe account and a secret key. Test mode works exactly like live mode, so you
can try the whole thing before taking a real payment.

Documentation, with screenshots of every step, lives at [bangplugins.com/docs/cart](https://www.bangplugins.com/docs/cart).

### External services

This plugin connects to Stripe to take payments. Stripe is the only external service
it uses.

When a customer checks out, the plugin creates a Stripe Checkout session through
the Stripe API (api.stripe.com) and sends the customer to Stripe’s secure page to
pay. It also receives payment confirmations back from Stripe by webhook, and in 
the admin it reads your products and prices from your Stripe account.

Data sent to Stripe: the items and amounts in the basket, the chosen delivery option
and cost, and – entered by the customer on Stripe’s own page – their email and delivery
or billing address. The plugin never sees or stores card numbers; Stripe handles
those entirely. This happens only when you or a customer does something that needs
Stripe: loading products, taking a payment, or verifying the webhook.

Stripe is provided by Stripe, Inc. Your use of it is subject to their terms and 
privacy policy:

 * Stripe Terms: https://stripe.com/legal
 * Stripe Privacy Policy: https://stripe.com/privacy

## Screenshots

[⌊The shopping cart basket, open in your theme.⌉⌊The shopping cart basket, open 
in your theme.⌉[

The shopping cart basket, open in your theme.

[⌊Products, synced from Stripe or added here.⌉⌊Products, synced from Stripe or added
here.⌉[

Products, synced from Stripe or added here.

[⌊Postage services and prices, per delivery zone.⌉⌊Postage services and prices, 
per delivery zone.⌉[

Postage services and prices, per delivery zone.

[⌊Checkout styling: the shopping cart in your own colours, previewed live.⌉⌊Checkout
styling: the shopping cart in your own colours, previewed live.⌉[

Checkout styling: the shopping cart in your own colours, previewed live.

## Installation

 1. Install and activate the plugin.
 2. Open **Bang! Cart** in the admin menu and paste your Stripe secret key on the Stripe
    tab.
 3. Press **Set up webhook automatically** on the Stripe tab – one button creates the
    webhook in your Stripe account and saves the signing secret for you. (You can still
    add it by hand in your Stripe dashboard if you prefer.) Without a webhook, orders
    are paid for but no emails are sent.
 4. Add your products, either by syncing them from Stripe or by adding them here.
 5. Copy a product’s shortcode onto its page.

## FAQ

### Do I need WooCommerce or another ecommerce plugin?

No. This is a complete standalone shopping cart: it needs nothing but WordPress 
and a Stripe account. It adds no pages, templates or database tables of its own,
so it sits happily on any site.

### Do I need a Stripe account?

Yes. This plugin is a shopfront for Stripe; Stripe takes the money.

### Which currencies can I charge in?

Any decimal currency Stripe supports – pounds, euros, dollars and dozens more, priced
the way you write them (5.50 charges as 5.50). Whole-unit currencies such as the
Japanese Yen are not offered yet.

### Does it work with page builders?

Yes. The buy button is a shortcode, so it renders anywhere your builder renders 
shortcodes – including inside Elementor widgets – and the basket follows your customer
on every page.

### Can I sell digital products?

The cart is built around physical goods: stock counts, postage, collection in person.
It does not deliver files, so digital downloads are not its focus.

### Does it work without the webhook?

Payments will succeed, but nothing will tell your site that they did – so no emails
go out and stock does not go down. Set the webhook up.

### Where are my orders?

In Stripe. The Orders tab shows the recent ones and lets you tick them off as posted,
but refunds and the full history live in Stripe, where they belong.

### Does my customer get a receipt?

Two ways, use either or both: Stripe can email its own receipt, and the plugin can
attach its own PDF receipt to the order emails – choose _Plugin receipt_ under Invoice/
receipt document on the Emails tab. A fresh install has this set to _None_, so pick
one if you want a document sent.

### Can I use my own products, not Stripe’s?

Yes. Products added here are sold and priced normally; they are just not tracked
as Stripe products in Stripe’s reporting.

### Can customers collect in person?

Yes. Switch a zone on and leave its postage prices empty.

### Is it translation-ready?

The storefront and most of the admin are. A translation template is included in /
languages.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Bang! Cart – Standalone Stripe Shopping Cart & Buy Buttons” is open source software.
The following people have contributed to this plugin.

Contributors

 *   [ Bang! Plugins ](https://profiles.wordpress.org/bangplugins/)

[Translate “Bang! Cart – Standalone Stripe Shopping Cart & Buy Buttons” into your language.](https://translate.wordpress.org/projects/wp-plugins/bang-cart-for-stripe)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/bang-cart-for-stripe/),
check out the [SVN repository](https://plugins.svn.wordpress.org/bang-cart-for-stripe/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/bang-cart-for-stripe/)
by [RSS](https://plugins.trac.wordpress.org/log/bang-cart-for-stripe/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 3.5.0

 * The buyer’s confirmation email now includes a Cancellation and returns section,
   on by default, editable on the Emails tab. UK distance-selling law requires this
   information in the email itself – a link to a returns page does not count – and
   missing it is expensive: no cancellation notice and the customer’s 14-day return
   window stretches to as long as a year; no note that the customer pays return 
   postage and the shop pays it instead. The default wording covers the 14-day right
   and how to use it, who pays return postage, when the right does not apply, faulty-
   goods rights, and the complaints route. Edit it to match how you actually handle
   returns, or switch it off if these details already reach every customer another
   durable way.
 * New Policy pages card on the Settings tab: your Terms of service, Privacy policy
   and Returns policy URLs. They are linked from the buyer’s confirmation email 
   under the cancellation wording. Each URL is checked when you save – a page that
   does not answer gets a warning, not a refusal, because a staging site behind 
   a password fails the same check silently at Stripe’s end too.
 * The same card explains the two Stripe Dashboard settings that put “By placing
   your order, you agree to our Terms of Service and Privacy Policy” under the Pay
   button – both are needed, Stripe’s error message does not say which one is missing,
   and neither can be set by a plugin.
 * A delivery zone somehow saved with priced postage but no countries can no longer
   take a posting order. Stripe attaches the postage and the country list together,
   so this state used to create a payment with no postage charged and no delivery
   address collected – the customer paid a total the basket never showed, and the
   shop had an order with nowhere to send it. Checkout now refuses with a clear 
   message instead, before any stock is reserved. Collection orders are unaffected:
   collecting needs no countries.
 * A source comment now records why the basket’s Checkout button may be worded freely:
   it only opens Stripe’s payment page. The button that takes the money is Stripe’s
   own Pay button, which is the one the button-labelling law governs, and Stripe
   keeps it compliant.
 * Test emails can now be sent to any address you type, with your own suggested.
   Mail from a site to its own domain often never leaves the server, so a test to
   a different domain – a Gmail or Outlook inbox – is the one that proves delivery.
   The address is remembered for next time, and a mistyped address refuses loudly
   instead of quietly testing the wrong inbox.

#### 3.4.1

 * The Page overlay control on the Design tab now stays editable in both basket 
   placements. Previously it sat with the floating-only settings, so it went grey
   in self-placed mode even though the overlay still dims the page there. Behaviour
   and saved values are unchanged.
 * The floating corner button’s live preview now sits in a framed Preview panel 
   beside its controls, matching the checkout styling preview.

#### 3.4.0

 * Multiple shipping zones. Every zone you switch on now sells: customers pick their
   region in the basket, and each zone prices at its own rates. The Add zone button
   sits under your zones on the Shipping tab.
 * New Page overlay control on the Design tab: choose the colour and strength of
   the tint that dims your page while the basket is open. Defaults to the indigo
   the plugin has always used, so nothing changes until you change it.
 * A refreshed wordmark in the admin header, and the admin and fresh-install storefront
   colours now follow its blue. Shops that have saved their own styling keep it,
   exactly as always.
 * The plugin’s admin styling and scripts, and the storefront basket’s styling and
   scripts, now load through WordPress’s enqueue system (wp_add_inline_style / wp_add_inline_script
   on registered handles) instead of printing style and script tags directly.
 * The description no longer compares this plugin with other plugins – it just says
   what this one does.
 * Wording: notes about settings made by an add-on that is not active now state 
   that fact plainly, with no product names, no paused badges pointing anywhere,
   and nothing offered for sale from a working screen.

#### 3.3.5

 * Fix: pressing Recount now tells you the answer instead of telling you to wait
   for it. The confirmation still said the total would “reappear here once it is
   complete” – wording written for the background-only count in 3.3.3 – while 3.3.4
   printed the finished figure directly beneath it. A message that tells you to 
   wait for something already on the screen sends you away and back to check.
 * The notice now reports what actually happened: the new total and order count 
   when the count finished in the press, that it is carrying on in the background
   when the history is too long for one request, or that there are no paid orders
   to total yet.

#### 3.3.4

 * Fix: pressing Recount, or landing on Orders for the first time, now counts straight
   away instead of queueing the work. 3.3.3 handed the whole job to WP-Cron – including
   for a shop whose entire history is a single request – so the press made no Stripe
   call at all, and on a site with WP-Cron switched off the total never appeared.
   The first slice now runs on the spot; only a longer history hands off to the 
   background.
 * Fix: a count in progress now advances on Orders tab loads whenever the queued
   background slice is overdue, so a site with WP-Cron disabled finishes over a 
   few page views rather than never.
 * Only the Orders tab pays for that first request – the other tabs fetch the order
   list for the “to post” badge as they always did, and spend nothing extra on a
   figure they do not show.

#### 3.3.3

 * New: the Orders tab now shows what the shop has taken, all time, above the orders.
   Gross, in the shop’s currency, with the order count beside it – and it says plainly
   that it is before Stripe’s fees and any refunds, because a figure an owner acts
   on should not need explaining.
 * It is counted, not guessed. The Orders tab only ever asks Stripe for the 25 most
   recent orders, so adding up what is on screen would have printed the same number
   for a shop with 25 orders and a shop with 2,500. The whole history is read once
   in the background instead, a slice at a time, and no figure is shown until that
   count is complete – a half-read history is not a smaller total, it is a wrong
   one.
 * After that it stays current for nothing. The admin already fetches recent orders
   on every tab of this plugin; new orders are counted from that list, so the ordinary
   day costs no extra request at all. A shop busy enough to outrun it falls back
   to a background catch-up rather than holding up the page.
 * Only paid orders count. An async bank payment that has not cleared is not money
   yet, and an order that needed no payment is not takings.
 * Test and live totals are separate and always were. Clear test order data now 
   removes the test total with the rest of the test notes, and never touches the
   live one.
 * A shop that has taken orders in more than one currency is told so rather than
   shown a total that adds them together.
 * Recount, beside the figure, rebuilds it from Stripe from scratch – for after 
   a refund, or any time the number deserves checking.

#### 3.3.2

 * Setting the webhook up by hand no longer breaks delayed bank payments. The hand-
   setup instructions on the Stripe tab named one Stripe event to tick; the one-
   button setup beside them has always subscribed four. Anyone who followed the 
   written route silently lost every Bacs or bank-debit order – paid for, never 
   completed. All four events are now listed, built from the plugin’s own list so
   the two can never drift apart again.
 * Those instructions now also explain customer.created, the event Verify connection
   now uses to prove the connection without taking a payment.
 * The connection check now says plainly what a missing async_payment event costs
   a shop, instead of mentioning it in passing.
 * The Emails tab named a “Check connection” button that does not exist – the buttons
   are Verify connection now and Re-check only.
 * The translation template was a version behind: it still offered translators three
   strings 3.3.1 had already replaced, and omitted the replacements, so that work
   was wasted and those lines stayed English. It is rebuilt from the shipped code.

#### 3.3.1

 * The Documentation button in the admin header is live – it opens the new documentation
   site at bangplugins.com/docs/cart.
 * Start here: the self-placed basket step now points at the Design tab, where the
   shortcode’s Copy button actually lives – both the wording and its Open button
   still said Settings after 3.3.0’s tab split.
 * The Email colours hint now names the real control, Save changes – there is no“
   Save colours” button.
 * readme: the install steps describe the one-button webhook setup (adding it by
   hand remains a fallback), and the plugin’s own PDF receipt is described instead
   of implying all receipts live in Stripe.
 * Housekeeping: seven code comments still said “Settings tab” for controls that
   moved to the Design tab in 3.3.0.

#### 3.3.0

 * Hardening release: rate-limited public endpoints, refresh-safe admin actions,
   crash-safe order fulfilment, multi-page PDF receipts, cross-tab basket sync, 
   an accessibility pass (visible focus, keyboard product cards, AA contrast), and
   a set of correctness fixes across discounts, stock metadata, coupon counters 
   and currency validation. Full detail in changelog.txt.
 * New default storefront palette – a clean indigo-and-blue base for your own styling(
   existing stores keep their current look automatically; everything stays configurable
   in Checkout styling).
 * The admin’s Settings tab is now two tabs: Design (checkout styling, basket placement,
   previews) and Settings (shop identity, status, thank-you page); stock messages
   moved beside the stock levels on Products.

#### 3.2.9

 * The large-order enquiry button now closes the basket when it is clicked. If it
   points at a section on the same page, the basket no longer sits open over whatever
   the page scrolls to.

#### 3.2.8

 * The per-zone large-order message is now tucked behind a switch in each zone –“
   Give this zone its own large-order message” – instead of always showing. Off (
   the default), the zone quietly uses the shop-wide Large orders settings, so a
   zone is no longer a wall of text repeating the option that already sits below
   it. Turn the switch on only where you want different wording.
 * The large-order enquiry button now opens the contact page in the same tab, not
   a new one.

#### 3.2.7

 * New choice on the Discounts tab: let a customer’s discount code apply on top 
   of an automatic discount. Off by default. With it on, the automatic discounts(
   quantity, sale, order value) still only ever apply one at a time, and then the
   code comes off on top – so a code and a sale can combine, the way most shops 
   work. The total can never fall below zero, and free delivery is unaffected.
 * Tidied the wording throughout so the plugin no longer talks in terms of “jars”–
   the examples now speak of “items”, since you might be selling anything.

#### 3.2.6

 * The {limit} and {over} placeholders in the Large orders settings are now click-
   to-copy too, so you can drop them straight into your message.
 * Widened the Enquiry link and Button wording boxes on the Large orders card (and
   the matching per-zone fields) – they were cramped to a fraction of their proper
   width.

#### 3.2.5

 * Every shortcode shown in the admin is now click-to-copy. The dedicated Copy buttons
   stay; on top of that, any shortcode woven into a line of help text – on Start
   here, Products, Settings and elsewhere – can be clicked to copy it, so you never
   have to select it by hand.

#### 3.2.4

 * Large orders no longer have to dead-end. On the Shipping tab you can now reword
   the “too many to post” message and, if you like, add a link so oversized baskets
   get a button through to your contact page instead of a flat “please remove some”.
   Set one message and link for the whole shop, or a different one per zone.

#### 3.2.3

 * Bang! Cart now sits high in the left-hand admin menu, just below Dashboard, instead
   of down by Comments – fewer plugins to scroll past to reach your shop.
 * New quick-access item in the top admin toolbar: a Bang! Cart menu with shortcuts
   to Orders, Products, Settings and Stripe, on every admin and front-end page. 
   Shown only to users who can manage the shop.

#### 3.2.2

 * A clean bill of health from WordPress’s official Plugin Check tool: 228 errors
   and 106 warnings, now zero. Every echoed style value is escaped, every translatable
   string with a placeholder carries a translators note, every form field is unslashed
   and sanitised at first touch, and the few deliberate exceptions (token-authenticated
   email links, the uninstall sweep, the migration’s one-time scan) now say in code
   exactly why they are what they are.
 * Fixed along the way: the Start here checklist’s placement scan now also recognises
   the pre-rename shortcode names, so a shop built before 3.2.0 is no longer told
   its button is missing.
 * Tested up to WordPress 7.0. The readme changelog now keeps recent versions only;
   the full history back to 2.0.0 ships in changelog.txt.

#### 3.2.1

 * The webhook section’s hand-setup note now links straight to the Developers – 
   Webhooks page of your Stripe dashboard, in the mode that matches the key above
   it – the same courtesy the API-key boxes got in 3.1.11.

#### 3.2.0

 * The plugin is now Bang! Cart for Stripe – a new name, same shop. Everything renames
   itself: settings saved under the old internal prefix are carried over automatically
   the first time the new version loads, and nothing needs re-entering.
 * Old links keep working forever: order-status and receipt links in emails already
   sent, shortcodes already pasted into pages, and the webhook address stored in
   Stripe’s dashboard all answer exactly as before.
 * If you added the old override constant to wp-config.php, it is still honoured.

Earlier versions: the complete history back to 2.0.0 ships in this plugin’s changelog.
txt.

## Meta

 *  Version **3.5.0**
 *  Last updated **8 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [buy button](https://wordpress.org/plugins/tags/buy-button/)[shopping cart](https://wordpress.org/plugins/tags/shopping-cart/)
   [stripe](https://wordpress.org/plugins/tags/stripe/)[stripe checkout](https://wordpress.org/plugins/tags/stripe-checkout/)
   [stripe payments](https://wordpress.org/plugins/tags/stripe-payments/)
 *  [Advanced View](https://wordpress.org/plugins/bang-cart-for-stripe/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/bang-cart-for-stripe/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/bang-cart-for-stripe/reviews/)

## Contributors

 *   [ Bang! Plugins ](https://profiles.wordpress.org/bangplugins/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/bang-cart-for-stripe/)