{"id":348522,"date":"2026-08-05T18:38:17","date_gmt":"2026-08-05T18:38:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bang-cart-for-stripe-standalone-cart-payment-buttons\/"},"modified":"2026-08-05T18:38:09","modified_gmt":"2026-08-05T18:38:09","slug":"bang-cart-for-stripe","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/bang-cart-for-stripe\/","author":23541890,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.5.0","stable_tag":"3.5.0","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Bang! Cart - Standalone Stripe Shopping Cart & Buy Buttons","header_author":"Bang! Plugins","header_description":"A standalone cart with add-to-basket buttons for your Stripe products - or your own products added right here. A fast basket on your own pages, checkout on Stripe's payment page.","assets_banners_color":"a4a0b6","last_updated":"2026-08-05 18:38:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.bangplugins.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.5.0":{"tag":"3.5.0","author":"bangplugins","date":"2026-08-05 18:38:09"}},"upgrade_notice":{"2.0.0":"<p>Fixes a quantity discount that charged less than it said. If you use quantity discounts, check your prices after upgrading.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3635714,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3635714,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3635714,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3635714,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.5.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3635714,"resolution":"1","location":"assets","locale":"","width":2560,"height":1600},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3635714,"resolution":"2","location":"assets","locale":"","width":2560,"height":1466},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3635714,"resolution":"3","location":"assets","locale":"","width":2560,"height":1466},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3635714,"resolution":"4","location":"assets","locale":"","width":2560,"height":1466}},"screenshots":{"1":"The shopping cart basket, open in your theme.","2":"Products, synced from Stripe or added here.","3":"Postage services and prices, per delivery zone.","4":"Checkout styling: the shopping cart in your own colours, previewed live."}},"plugin_section":[],"plugin_tags":[15107,3045,5349,5875,129011],"plugin_category":[45],"plugin_contributors":[274567],"plugin_business_model":[],"class_list":["post-348522","plugin","type-plugin","status-publish","hentry","plugin_tags-buy-button","plugin_tags-shopping-cart","plugin_tags-stripe","plugin_tags-stripe-checkout","plugin_tags-stripe-payments","plugin_category-ecommerce","plugin_contributors-bangplugins","plugin_committers-bangplugins","plugin_support_reps-bgbloke"],"banners":{"banner":"https:\/\/ps.w.org\/bang-cart-for-stripe\/assets\/banner-772x250.png?rev=3635714","banner_2x":"https:\/\/ps.w.org\/bang-cart-for-stripe\/assets\/banner-1544x500.png?rev=3635714","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bang-cart-for-stripe\/assets\/icon-128x128.png?rev=3635714","icon_2x":"https:\/\/ps.w.org\/bang-cart-for-stripe\/assets\/icon-256x256.png?rev=3635714","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bang-cart-for-stripe\/assets\/screenshot-1.png?rev=3635714","caption":"The shopping cart basket, open in your theme."},{"src":"https:\/\/ps.w.org\/bang-cart-for-stripe\/assets\/screenshot-2.png?rev=3635714","caption":"Products, synced from Stripe or added here."},{"src":"https:\/\/ps.w.org\/bang-cart-for-stripe\/assets\/screenshot-3.png?rev=3635714","caption":"Postage services and prices, per delivery zone."},{"src":"https:\/\/ps.w.org\/bang-cart-for-stripe\/assets\/screenshot-4.png?rev=3635714","caption":"Checkout styling: the shopping cart in your own colours, previewed live."}],"raw_content":"<!--section=description-->\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Add-to-basket buttons for your Stripe products, or for products you add here.<\/li>\n<li>A basket that works on a phone, in your theme, with your fonts and colours.<\/li>\n<li>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.<\/li>\n<li>Free postage over a spend or a number of items.<\/li>\n<li>A shop-wide sale percentage.<\/li>\n<li>Discount codes, fixed or percentage, with a use limit and an expiry.<\/li>\n<li>Stock counts, with low-stock and sold-out messages you write yourself.<\/li>\n<li>Reservations, so two people cannot buy the same last item.<\/li>\n<li>Confirmation emails to your customer and to you, in your own words.<\/li>\n<li>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).<\/li>\n<li>Delayed bank payments handled properly - stock is not released while a Bacs payment settles.<\/li>\n<\/ul>\n\n<p><strong>How your customers can pay<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p><strong>What it deliberately does not do<\/strong><\/p>\n\n<ul>\n<li>It does not store card details. Payment happens on Stripe's page.<\/li>\n<li>It does not keep a copy of your orders. Stripe already has them, and one truth beats two.<\/li>\n<li>It does not do subscriptions, tax tables, or a hundred payment gateways.<\/li>\n<\/ul>\n\n<p><strong>Who it suits<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p><strong>You will need<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p>Documentation, with screenshots of every step, lives at <a href=\"https:\/\/www.bangplugins.com\/docs\/cart\">bangplugins.com\/docs\/cart<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to Stripe to take payments. Stripe is the only external service it uses.<\/p>\n\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<p>Stripe is provided by Stripe, Inc. Your use of it is subject to their terms and privacy policy:<\/p>\n\n<ul>\n<li>Stripe Terms: https:\/\/stripe.com\/legal<\/li>\n<li>Stripe Privacy Policy: https:\/\/stripe.com\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Bang! Cart<\/strong> in the admin menu and paste your Stripe secret key on the Stripe tab.<\/li>\n<li>Press <strong>Set up webhook automatically<\/strong> 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.<\/li>\n<li>Add your products, either by syncing them from Stripe or by adding them here.<\/li>\n<li>Copy a product's shortcode onto its page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20woocommerce%20or%20another%20ecommerce%20plugin%3F\"><h3>Do I need WooCommerce or another ecommerce plugin?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20stripe%20account%3F\"><h3>Do I need a Stripe account?<\/h3><\/dt>\n<dd><p>Yes. This plugin is a shopfront for Stripe; Stripe takes the money.<\/p><\/dd>\n<dt id=\"which%20currencies%20can%20i%20charge%20in%3F\"><h3>Which currencies can I charge in?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%3F\"><h3>Does it work with page builders?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"can%20i%20sell%20digital%20products%3F\"><h3>Can I sell digital products?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20the%20webhook%3F\"><h3>Does it work without the webhook?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"where%20are%20my%20orders%3F\"><h3>Where are my orders?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"does%20my%20customer%20get%20a%20receipt%3F\"><h3>Does my customer get a receipt?<\/h3><\/dt>\n<dd><p>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 <em>Plugin receipt<\/em> under Invoice \/ receipt document on the Emails tab. A fresh install has this set to <em>None<\/em>, so pick one if you want a document sent.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20products%2C%20not%20stripe%27s%3F\"><h3>Can I use my own products, not Stripe's?<\/h3><\/dt>\n<dd><p>Yes. Products added here are sold and priced normally; they are just not tracked as Stripe products in Stripe's reporting.<\/p><\/dd>\n<dt id=\"can%20customers%20collect%20in%20person%3F\"><h3>Can customers collect in person?<\/h3><\/dt>\n<dd><p>Yes. Switch a zone on and leave its postage prices empty.<\/p><\/dd>\n<dt id=\"is%20it%20translation-ready%3F\"><h3>Is it translation-ready?<\/h3><\/dt>\n<dd><p>The storefront and most of the admin are. A translation template is included in \/languages.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.5.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.4.1<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>The floating corner button's live preview now sits in a framed Preview panel beside its controls, matching the checkout styling preview.<\/li>\n<\/ul>\n\n<h4>3.4.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>The description no longer compares this plugin with other plugins - it just says what this one does.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.3.5<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.3.4<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.3.3<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>A shop that has taken orders in more than one currency is told so rather than shown a total that adds them together.<\/li>\n<li>Recount, beside the figure, rebuilds it from Stripe from scratch - for after a refund, or any time the number deserves checking.<\/li>\n<\/ul>\n\n<h4>3.3.2<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>Those instructions now also explain customer.created, the event Verify connection now uses to prove the connection without taking a payment.<\/li>\n<li>The connection check now says plainly what a missing async_payment event costs a shop, instead of mentioning it in passing.<\/li>\n<li>The Emails tab named a \"Check connection\" button that does not exist - the buttons are Verify connection now and Re-check only.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.3.1<\/h4>\n\n<ul>\n<li>The Documentation button in the admin header is live - it opens the new documentation site at bangplugins.com\/docs\/cart.<\/li>\n<li>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.<\/li>\n<li>The Email colours hint now names the real control, Save changes - there is no \"Save colours\" button.<\/li>\n<li>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.<\/li>\n<li>Housekeeping: seven code comments still said \"Settings tab\" for controls that moved to the Design tab in 3.3.0.<\/li>\n<\/ul>\n\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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).<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.9<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.8<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>The large-order enquiry button now opens the contact page in the same tab, not a new one.<\/li>\n<\/ul>\n\n<h4>3.2.7<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.6<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.5<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.4<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.3<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.2<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.1<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>If you added the old override constant to wp-config.php, it is still honoured.<\/li>\n<\/ul>\n\n<p>Earlier versions: the complete history back to 2.0.0 ships in this plugin's changelog.txt.<\/p>","raw_excerpt":"Sell with Stripe from your own pages: buy buttons anywhere, a fast polished shopping cart, checkout on Stripe&#039;s payment page.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/348522","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=348522"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bangplugins"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=348522"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=348522"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=348522"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=348522"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=348522"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=348522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}