Changelog

Recent releases. The complete history, all the way back to 2.0.0, ships inside the plugin as changelog.txt, because a full history belongs with the code rather than on a web page nobody scrolls.

3.7.1

One fix, and it is one you cannot see from your own side of the counter.

  • Fix: the logo at the top of your order emails could arrive torn in half in Gmail. Gmail cannot display WebP images - it converts every one it is sent, and a logo usually comes out as the corner of your artwork with flat colour where the rest should be. It reads as a broken upload, yet the same file is perfect on your website and everywhere else you look, which is why this could run for months uncaught. A WebP (or AVIF) logo is now copied to a PNG automatically and the emails use the copy. There is nothing for you to do.
  • This reaches more shops than it sounds. A WebP logo is rarely a choice anyone made: image-optimiser plugins convert a whole media library when they are installed, logo included. If your site has one, open the Emails tab after updating - the plugin says what it found and what it did about it, and warns you plainly in the two cases it cannot fix on its own. The Emails doc now tells the whole story.
  • Your own seller notification had the same fault wherever Show the logo in the seller email too is ticked, which it is by default. One fix covers both emails.
  • Worth knowing if you had already tried to fix this yourself: Gmail keeps its own converted copy of every image, filed under the image's address, for a long time - so replacing the picture without changing the file name keeps serving the broken version. The plugin's automatic copy is always written under a fresh name for exactly that reason.
  • Tested up to WordPress 7.1.

3.7.0

Groundwork, and almost nothing else. No new features, no new settings, and every checkout behaves exactly as it did before. This release prepares the plugin for two things that arrive in the Pro add-on, and until something supplies them, none of it does anything at all.

  • The plugin now understands a checkout that finishes on your own site, including the case where a card is declined. A payment that did not go through says so plainly and keeps the basket, rather than thanking somebody for an order that never happened. Nothing supplies that payment form in free, so your customers still pay on Stripe's page exactly as they did yesterday.
  • A basket can now hold the same product on more than one line. That is what lets one order carry three of the same mug with three different names on them, with all three still coming off one stock count. Free has no way to ask a customer for those words; the shape of the basket that holds them is here.
  • Fix: the chosen delivery zone and service now travel with the basket from page to page. They used to live only on the page they were picked on, so a customer who chose a dearer service and then navigated anywhere before checking out was quietly reset to the first service in the list. The basket already survived the journey; now the choices riding on it do too.
  • Replacing a Stripe secret key warns you, at the moment of saving, if the webhook did not come along with it. A key from a different Stripe account leaves the webhook behind in the old one - and without a webhook, payments complete with no order emails, no stock changes and no order records. Where the plugin made the webhook itself it asks Stripe outright and only speaks when something is genuinely wrong; a hand-made webhook gets an honest "check this" instead. The verdict sticks, too: the connection box stays red with the same plain sentence until it is put right, rather than the warning living exactly one page load.
  • One press now does the whole webhook job. Set up webhook automatically starts the end-to-end connection check itself the moment setup succeeds, so there is no second button to remember. Verify connection now remains, for re-proving an existing connection whenever you want.
  • While a connection check runs, the page says so. The checking box scrolls into view and the header chip reads "Stripe: checking..." with a pulsing dot until the answer lands.
  • The Start here checklist tells the truth about the webhook over time. If Stripe stops being connected after setup is complete, that step re-opens and says order emails have stopped, instead of keeping a tick that contradicts the header. The tab also shows a count of open rows, the same badge the Orders tab uses for parcels to post - and a completed shop with a healthy connection shows no badge at all.

Bang! Cart Pro 1.1.0 shipped alongside, and this is the release that uses all of the above. It adds checkout on your own site - Stripe's payment form embedded in a page of yours, so your header, your footer and your address bar stay throughout - and order and product notes, a box that asks your customer for a name to engrave, an invoice number or a delivery instruction, in words you write yourself. Both need free 3.7.0 or newer.

3.6.0

Groundwork again, with two real fixes worth reading. The new work prepares the plugin for products that sell in options, which arrives in the Pro add-on; the plugin now understands how such a basket line is counted, so stock, reservations and receipts stay exact when it appears.

  • Fix, and this one may need a minute of your time: saving the Products tab could write a stock count against the wrong product. A product set to Unlimited had its stock box greyed out in a way that stopped the browser sending it at all, so every product listed below it took the count belonging to the one above - and the tab redrew showing the new, wrong figures as though you had typed them. Any shop with an unlimited product above a limited one was affected. The boxes are still uneditable when they should be, but they now report their value. Check the stock figures on your Products tab after updating; a count that has drifted needs typing in once.
  • Fix: a Stripe Checkout page now expires when the stock reserved for it does. Left to Stripe's own setting the page stayed payable for 24 hours while the stock held for it was released after 30 minutes, so a checkout left open in a tab could still take payment the next morning for something sold that afternoon. The page now closes with the reservation, and the customer simply starts again with an up-to-date basket.
  • Fix: a hand-made checkout request listing the same product twice was charged in full but only partly subtracted from stock. Your storefront cannot produce such a request; this closes the gap for one built by hand against the public endpoint. The quantity now counts once, summed, everywhere that reads it.
  • Fix: when a product is sold out, the message names what is sold out rather than only the product. On a product with options that is the difference between "Bang! tee is sold out" and "Bang! tee - Red / Small is sold out" while the other sizes are still on the shelf.
  • Fix: with the Pro add-on active, unticking Custom price on a product now sticks. An unticked box and a deactivated add-on used to look identical to the save, which kept your settings safe through Pro-less saves at the cost of making the untick impossible. The editor now says when it was on the page, so off means off - and a save made with Pro deactivated still preserves everything, exactly as before.
  • Fix: on a slow first visit, the basket could briefly appear open and slide itself shut. Its closed position now travels ahead of the markup, so there is nothing to animate and nothing to see.
  • Fix: clicking inside an open product card no longer folds it shut. The grey header strip is meant to open and close it, but the check ran on the whole card, so a click on empty space in the body closed the card mid-edit.

Bang! Cart Pro 1.0.0 shipped alongside. It adds product variants - one product in several colours and sizes, each combination with its own price, its own stock count and its own photograph, with the picture belonging to a value rather than a combination so two colours in three sizes needs two photos and not six. Two choices is the deliberate limit; three would be twenty-seven rows to fill in. The same release removed the Stripe-issued invoice option: Stripe bills roughly 0.4% capped each time it raises one, the free plugin already builds a numbered PDF receipt for nothing, and the option had never been proven against a live key. A shop that had chosen it keeps the setting on file and is told plainly on the Emails tab to pick the plugin receipt instead. The version jumped from 0.4.0 because a 0.x number tells a buyer it is a beta, and it is not. Variants need free 3.6.0 or newer.

3.5.1

  • Three currencies removed from the picker, because the plugin cannot charge in them honestly. Chilean Peso is a whole-unit currency at Stripe, so a shop pricing at 5.50 was charged as 550 pesos - a hundred times the price, with the basket and receipt both showing the right figure. Croatian Kuna stopped existing when Croatia adopted the Euro, so a shop set to it could not take a payment at all. Icelandic Krona will not accept fractions of a krona, so it worked for whole-number prices and failed for anything else. All 44 remaining currencies were checked individually against Stripe's own tables.
  • Checkout now refuses to create a payment if the shop's saved currency is not one the plugin can charge in, and says so across the admin until it is put right. Refusing is deliberate: quietly switching to another currency would keep the checkout working while charging in the wrong money. No shop is moved to a different currency without being asked.
  • The customer's order status page shows the collection details for a collection order. The address and hours were already in the confirmation email and on the thank-you page; the status page - the one screen built to be revisited - now carries them too.
  • Marking a collection order now records the handover, in so many words. The Orders tab says Mark collected on collection rows (it said Mark posted on every row), the marked status page says Collected with the date (it said "Ready to collect - packed and waiting for you", which told a customer to come and fetch what they were already holding), and the unmarked page no longer promises an email no version ever sent. The card heading counts orders "to go out", and a collection row's Delivery column says Collection in person instead of borrowing the billing address.
  • The Stripe key boxes check both ways. The test box used to accept any text at all and fail later at the till; each box now accepts only the key that belongs in it and says so when refusing.
  • The order status previews on the Design tab cover all four states - being prepared for posting, posted, being prepared for collection, collected - each rendered by the real page code with the real wording. The collection preview used to show the delivery wording.
  • Your large-order message is honoured in zones that offer collection. The over-limit note now leads with your own words, if you have written any, with the collection offer after them. It used built-in wording on that branch, which read as broken to any shop that had written its own message.

3.5.0

  • The buyer's confirmation now carries a Cancellation and returns section, on by default. UK distance-selling law requires this information in the email itself - a link is not enough - and missing it has teeth: no cancellation notice and the customer's 14-day window stretches by up to a year; no note that the customer pays return postage and the shop pays it. The wording is editable on the Emails tab, tokens included, and it ships on for existing shops too - the owner who has never seen the toggle is exactly the owner who needs the text.
  • A Policy pages card on the Settings tab. Pick your Terms of service, Privacy policy and Returns policy from a dropdown of your own pages, or paste an address on another site; the links appear in the confirmation email under the cancellation wording. A picked page is stored as the page itself, so renaming it never breaks the link. The card also walks through the two Stripe Dashboard settings that put the consent line on the payment page - both are needed, and Stripe's error does not say which one is missing.
  • A delivery zone with priced postage but no countries can no longer take a posting order. That state used to produce a payment with no postage charged and no delivery address collected. Checkout now refuses with a clear message, before any stock or coupon hold is taken. Collection from such a zone still works - collecting needs no countries.
  • Test emails go to any address you type. The Send test emails button gained an address box: seller address suggested, last-used remembered, a mistyped address refused with an error. Mail from a site to its own domain often never leaves the server, so the test that proves delivery is one sent to a different domain - and now it can be.

3.4.1

  • The Page overlay control now works in both basket placements. It sat inside the floating-only group on the Design tab, so choosing "I'll place it myself" dimmed the control while the overlay itself went on tinting the page. It now stays live in either mode, and nothing about saved values changes.
  • The floating corner button's live preview moved into its own framed Preview panel beside the Shape, Size and Position controls, matching the checkout styling preview above it.

3.4.0

  • Multiple shipping zones, free. Every zone you switch on now sells: customers pick their region in the basket, and each zone prices at its own rates. The one-zone limit and its greyed Add zone button are gone; Add zone is always there on the Shipping tab.
  • A new Page overlay control on the Design tab, beside the floating basket settings: the colour and strength (0 to 90%) of the tint that dims the page while the basket is open. Existing shops look identical until their owner chooses otherwise.
  • A refreshed wordmark, and the plugin's colours follow it. The admin accent is now the wordmark's trolley blue (from the old indigo), fresh-install storefront defaults wear the same blue, and every remaining lavender-era tint was swept to a blue equivalent. Any shop that has saved its styling keeps its saved colours, exactly as always.
  • The listing name changed to Bang! Cart - Standalone Stripe Shopping Cart & Buy Buttons, so the directory search finds it by what it does. Nothing else about the plugin's address changed.
  • All admin and storefront styling and scripts now load through WordPress's enqueue system. The only inline styles left are in the order emails, which email apps require, and the standalone order-status pages served outside the theme.
  • The readme description restated: it says what this plugin does, with no comparisons against other plugins.
  • Settings made by an add-on that is not active are described in exactly those words: the zone note, the Discounts note, the invoice-document note and the product badge all state the fact and the way forward, and offer nothing for sale.

Bang! Cart Pro 0.4.0 shipped alongside. With zones free for everyone, Pro's zones module is removed; Pro is now band postage pricing, automatic discounts and customer-set prices. Zone data, editing and saving were always the free plugin's own, so nothing changes for existing shops.

3.3.5

The Recount notice on the Orders tab now reports the answer rather than promising it: the new total when the press finished the job, that counting carries on in the background when the history needs more than one request, that no single total is shown for a shop selling in more than one currency, or that there are no paid orders to total yet. Until now it told you the total would "reappear here once it is complete" while the finished figure sat directly underneath it.

3.3.4

Pressing Recount, or opening Orders for the first time, now counts on the spot instead of handing the whole job to WP-Cron - which runs only when somebody loads a page, and not at all on sites that have switched it off. A hundred orders is one request; the background queue is for the shop that needs a second slice, not the shop that needs a first one.

3.3.3

New: what the shop has taken, all time, above the orders - gross, in the shop's currency, with the order count beside it. It is counted from the full Stripe history rather than guessed from the 25 orders on screen, nothing is shown until the count finishes (a half-read history is not a smaller total, it is a wrong one), and only paid orders count. Test and live are separate totals, and a Recount button rebuilds the figure from Stripe from scratch whenever you stop trusting it.

3.3.2

  • Setting the webhook up by hand no longer breaks delayed bank payments. The Prefer to set it up by hand? instructions named one event to tick, checkout.session.completed, while the one-button setup beside them has always subscribed four. Anyone who followed the written route lost the two async_payment events, and with them every Bacs or bank-debit order: the money arrives, the order never completes, no confirmation email is sent and stock never moves. The instructions now list all four, built from the plugin's own list rather than retyped, so the two can never disagree again.
  • The same instructions now explain customer.created. It is what lets Verify connection now prove the connection without taking a payment, and the plugin deliberately will not add it to an endpoint you built yourself, so leaving it off meant the person who most needed the diagnostic was the one person who could not run it.
  • The connection check is blunter about missing async events. It used to end with a mild "for bank methods such as Bacs, also enable..." note; it now says what actually happens if you do not. It remains a note rather than a failure, because the check cannot see which payment methods your Stripe account has switched on.
  • The Emails tab pointed at a button that does not exist. Its Webhook & connection card sent you to the Stripe tab to find "Check connection"; the buttons there are Verify connection now and Re-check only. Both are now named properly.
  • The translation template was a version behind. It still offered translators three strings that 3.3.1 had already replaced, so a translator who did the work got nothing for it: the real strings were not in the template, and three translations pointed at controls that no longer exist. Rebuilt from the shipped code.

Bang! Cart Pro 0.3.6 shipped alongside. Its translation template was rebuilt, and its plugin header stopped advertising PDF invoices: 0.3.5 withdrew Stripe-issued invoices from the readme because the code has never been proven against a live key, but missed the Description line that WordPress prints on the Plugins screen. The feature itself stayed in the code at this point; it was removed outright in Pro 1.0.0.

3.3.1

  • The Documentation button in the admin header is live. It opens this documentation site.
  • 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 split the tabs.
  • The Email colours hint now names the real control, Save changes. There was no "Save colours" button.
  • readme: the install steps describe the one-button webhook setup, with setting it up by hand kept as the fallback; and the plugin's own PDF receipt is described rather than implying every receipt lives in Stripe.
  • Housekeeping: seven code comments still said "Settings tab" for controls that moved to Design in 3.3.0.

3.3.0

The hardening release, ahead of the WordPress.org submission.

  • Rate-limited public endpoints, refresh-safe admin actions and crash-safe order fulfilment.
  • Multi-page PDF receipts, so a long order no longer runs off the bottom of the page.
  • Cross-tab basket sync: two tabs of your shop now agree about what is in the basket.
  • An accessibility pass: visible focus, keyboard-reachable product cards, AA contrast.
  • Correctness fixes across discounts, stock metadata, coupon counters and currency validation.
  • A new default storefront palette, a clean indigo and blue base for your own styling. Existing shops keep their current look automatically, and everything stays configurable in Checkout styling.
  • The Settings tab became two tabs. Design now holds checkout styling, basket placement and the previews; Settings keeps shop identity, status and the 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 clicked, so a link to a section of the same page is no longer hidden behind the drawer.

3.2.8

The per-zone large-order message moved behind a switch, Give this zone its own large-order message, instead of always showing. Off by default, a zone quietly uses the shop-wide settings rather than repeating them back at you. The enquiry button also stopped opening in a new tab.

3.2.7

A new choice on the Discounts tab: let a customer's code apply on top of an automatic discount. Off by default. With it on, automatic discounts still only ever apply one at a time and 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.

Also: the wording throughout stopped talking in terms of jars. The examples speak of items now, since you might be selling anything.

3.2.6

The {limit} and {over} placeholders in the Large orders settings became click-to-copy, and the cramped Enquiry link and Button wording boxes were widened to their proper size.

3.2.5

Every shortcode shown anywhere in the admin became click-to-copy. The dedicated Copy buttons stayed; on top of them, any shortcode woven into a line of help text can now be clicked to copy, so you never have to select one by hand.

3.2.4

Large orders stopped dead-ending. You can now reword the "too many to post" message and add a link, so an oversized basket gets a button through to your contact page instead of a flat refusal. One message for the shop, or a different one per zone.

3.2.3

Bang! Cart moved high in the admin menu, just below Dashboard, instead of down by Comments. A new quick-access menu appeared in the top admin toolbar with shortcuts to Orders, Products, Settings and Stripe, 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 taken to zero. Every echoed style value escaped, every translatable string with a placeholder given a translator note, every form field unslashed and sanitised at first touch.

Fixed along the way: the Start here checklist now recognises 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.

3.2.1

The webhook's hand-setup note started linking straight to the Developers and Webhooks page of your Stripe dashboard, in the mode that matches the key above it.

3.2.0

The plugin became Bang! Cart. Settings saved under the old internal prefix carry 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.

3.1.x

A run of refinements following the free and Pro split: the admin wordmark and its free/pro badge, a new zone obeying its own pricing picker immediately, a cloned zone keeping its source's pricing mode, and the Add zone button showing greyed with a reason at the then one-zone limit rather than vanishing (the limit itself went in 3.4.0: every zone sells). 3.1.11 made the Stripe tab link straight to the test and live API key pages.

3.1.0

The free and Pro split completed. Four features moved to the Pro add-on: multiple delivery zones (returned to the free plugin in 3.4.0), customer-set prices, Stripe-issued PDF invoices and the automatic discounts. A Duplicate button appeared on your own products. The shop-wide sale, discount codes, the plugin's own free PDF receipt, stock and emails all stayed here.

3.0.0

Postage priced by unit band or basket value moved to the Pro add-on. The free plugin prices flat or first-item-plus-extras, and a band zone keeps its settings but quotes nothing without Pro rather than guessing a price.


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

Still stuck?

Write to me and it is me who answers, not a ticket queue. Tell me what you expected and what happened instead.

Ask a question

Bang! Creative Family

Bang! Plugins is part of a small UK creative group, so the plugins are made and backed by people who do this for a living.