Title: STM Smart Checkout for WooCommerce
Author: Tatjana von Storetown-Media
Published: <strong>September 1, 2026</strong>
Last modified: September 2, 2026

---

Search plugins

![](https://ps.w.org/stm-smart-checkout/assets/banner-772x250.png?rev=3676155)

![](https://ps.w.org/stm-smart-checkout/assets/icon-256x256.png?rev=3675888)

# STM Smart Checkout for WooCommerce

 By [Tatjana von Storetown-Media](https://profiles.wordpress.org/jobhunter99/)

[Download](https://downloads.wordpress.org/plugin/stm-smart-checkout.0.1.45.zip)

 * [Details](https://wordpress.org/plugins/stm-smart-checkout/#description)
 * [Reviews](https://wordpress.org/plugins/stm-smart-checkout/#reviews)
 * [Development](https://wordpress.org/plugins/stm-smart-checkout/#developers)

 [Support](https://wordpress.org/support/plugin/stm-smart-checkout/)

## Description

STM Smart Checkout turns the standard WooCommerce checkout into a focused, trustworthy
buying experience — without replacing your payment gateways, your legal plugins 
or the WooCommerce checkout itself.

**The core plugin, completely free:**

 * Distraction-free checkout layouts — three columns, two columns or a single column,
   with a progress indicator through cart, checkout and confirmation
 * A trust header band that replaces the theme header on cart and checkout: your
   logo, three short trust claims with their icons, and an “Already a customer?”
   login pill that opens the login form WooCommerce prints anyway
 * Card-based design driven by design tokens: accent colour, hover colour, heading
   colour, the step and label blues, font size and corner radius — all from the 
   settings screen, no `!important` battles with your theme
 * Field manager with real-time validation, tidied field pairs (first and last name,
   postcode and city), state corrections and the correct touch keyboard on phones
 * Postcode autofill for Germany, Austria and Switzerland — type the postcode, the
   city fills itself. The databases ship inside the plugin: no external service,
   no customer address leaves your server
 * Legal texts (terms, cancellation policy) open in an overlay without leaving the
   checkout, and a server-side safety net checks every required consent box again
   after submit
 * Trust badges with a curated icon set, and a reassurance note between the consent
   boxes and the buy button
 * Optional control over the coupon notice and the “Additional information” order
   notes field — two of the most common reasons customers leave a checkout to go
   looking for something
 * Delivery time under every product in cart and checkout, resolved from the most
   specific source that knows one
 * A legal footer row under the checkout, filled from pages you pick, from a menu,
   or automatically from the legal pages your site already registers
 * Preview mode: try the whole thing on your live site while customers keep seeing
   the standard checkout
 * HPOS (High-Performance Order Storage) supported, no external fonts, no tracking,
   no remote requests

**Built for stores selling under EU and German law (DACH-ready)**

If no legal plugin is present, the checkout supplies the mandatory pieces itself—
each one only when no other plugin is actually rendering it, so nothing ever appears
twice:

 * The consent box for terms and cancellation policy, with the exact wording the
   customer saw written onto the order
 * A buy button label that states the obligation to pay, as § 312j BGB requires —
   WooCommerce’s own “Place order” does not
 * The VAT statement in the order summary
 * Delivery time per line item
 * The short mandatory notice directly above the buy button, where the essential
   order details have to be readable

It works **with** WooCommerce Germanized and German Market rather than against them:
the plugin asks the rendered checkout whether a legal plugin is actually printing
a checkbox — not whether one happens to be installed — and stands down where it 
is. Unit prices (PAngV) and sending the cancellation policy with the order mail 
stay with a dedicated legal plugin, and the settings screen says so in plain language
instead of leaving you to find out later.

**What it deliberately leaves alone**

Your gateways keep rendering their own express buttons. Your legal plugin keeps 
owning its legal texts. Your theme keeps its typography. This plugin arranges what
is already there into a checkout that converts — deactivate it and you get the standard
WooCommerce checkout back, unchanged.

It styles the classic (shortcode) cart and checkout in full. On the Cart and Checkout
blocks it delivers the shell around the form, the design tokens inside it, a required
consent box that WooCommerce validates on the server, the mandatory notice and the
links to the legal texts above the button, the § 312j button label and the delivery
time under each item; the column layouts, the field manager and the trust row are
classic-only for now, and the settings screen says which is which. A reversible 
one-click switch to the classic pages remains — the plugin never changes your pages
on its own.

**STM Smart Checkout Pro**

The free plugin above is complete in itself and stays that way. A separate paid 
add-on adds seven things, in order of how often shops ask for them:

 * **Online withdrawal form** — the withdrawal function required across the EU since
   19 June 2026 (directive 2023/2673): a public form on its own page, reachable 
   for guests, pre-filled for logged-in customers with their most recent order, 
   with merchant notification and customer receipt
 * **Withdrawals management screen** under WooCommerce with a status workflow, its
   own table and a counter badge — plus a “Withdraw this order” button in My Account
   for a period you choose
 * **Express zone** — one defined band above the checkout form for wallet buttons,
   instead of PayPal under the payment methods and another button somewhere else.
   The buttons are steered into place through the providers’ own filters, never 
   rebuilt or moved in the DOM
 * **Payment-dependent required fields** — a matrix that makes “required” depend
   on the chosen payment method, so invoice purchase can ask for a phone number 
   while prepayment does not. Checked again on the server
 * **Method customizer** — your own name, a note, a symbol and a sort position per
   payment method, all through documented WooCommerce filters, with 33 bundled symbols
 * **Safe mode** — a fatal error while the checkout renders no longer costs the 
   shop its orders: the Smart Checkout stands down from the next request on and 
   WooCommerce’s standard checkout takes over, visibly and reversibly
 * **Mobile sticky order bar** and an **ultra-compact layout** for dense checkouts
   on small screens

Pro requires this free plugin and is sold here: [STM Smart Checkout Pro for WooCommerce](https://en.storetown-media.de/produkt/stm-smart-checkout-pro-woocommerce/).
This plugin has a page of its own as well: [STM Smart Checkout for WooCommerce](https://en.storetown-media.de/produkt/stm-smart-checkout-woocommerce/)

**Auf Deutsch: rechtssichere WooCommerce-Kasse für Shops in Deutschland, Österreich
und der Schweiz**

STM Smart Checkout macht aus der Standard-Kasse von WooCommerce eine fokussierte,
vertrauenswürdige Kaufstrecke — ohne Ihre Zahlungsarten, Ihr Rechts-Plugin oder 
die WooCommerce-Kasse selbst zu ersetzen.

**Kasse gestalten und Kaufabbrüche vermeiden**

 * Ablenkungsfreier Checkout: Theme-Kopf, Menü, Siegel und Brotkrumen verschwinden
   auf Warenkorb und Kasse — als Ein-, Zwei- oder Dreispalter mit Fortschrittsanzeige
   über Warenkorb, Kasse und Bestätigung
 * Trust-Kopfband mit Ihrem Logo, drei kurzen Vertrauens-Aussagen mit Symbolen und
   einer „Bereits Kunde?”-Anmelde-Pille
 * Kartenbasiertes Design über Design-Tokens: Akzentfarbe, Überschriftenfarbe, Schriftgröße
   und Eckenradius aus dem Backend — ohne `!important`-Kämpfe mit dem Theme
 * Vertrauenselemente und Trust-Badges mit kuratiertem Symbolsatz, dazu ein Beruhigungshinweis
   direkt über dem Kaufknopf
 * Gutschein-Hinweis und das Bemerkungsfeld „Zusätzliche Informationen” abschaltbar—
   zwei der häufigsten Gründe, warum Kunden die Kasse verlassen
 * Vorschau-Modus: alles auf der Live-Site ausprobieren, während Kunden weiter die
   Standard-Kasse sehen

**Formularfelder und Adresseingabe**

 * Feldverwaltung mit Sofortprüfung, aufgeräumten Feldpaaren (Vor-/Nachname, PLZ/
   Ort) und den richtigen Tastaturen auf dem Handy
 * PLZ-Autovervollständigung für Deutschland, Österreich und die Schweiz — Postleitzahl
   eintippen, der Ort füllt sich selbst. Die Datenbanken liegen im Plugin: kein 
   externer Dienst, keine Kundenadresse verlässt Ihren Server (DSGVO-konform)

**Pflichtangaben nach deutschem und EU-Recht — auch ganz ohne Rechts-Plugin**

Ist kein Rechts-Plugin vorhanden, liefert die Kasse die Pflichtangaben selbst. Jede
davon nur dann, wenn kein anderes Plugin sie bereits ausgibt — nichts erscheint 
doppelt:

 * Einwilligung zu AGB und Widerrufsbelehrung als Pflicht-Häkchen, mit dem exakten
   Wortlaut auf der Bestellung
 * Button-Lösung nach § 312j BGB: eine Beschriftung des Kaufknopfes, die die Zahlungspflicht
   ausspricht — WooCommerce’ „Bestellung abschicken” tut das nicht
 * MwSt.-Ausweisung in der Bestellübersicht
 * Lieferzeit je Artikel in Warenkorb und Kasse
 * Der kurze Pflichthinweis unmittelbar über dem Kaufknopf, wo die wesentlichen 
   Angaben lesbar sein müssen
 * AGB und Widerrufsbelehrung im Overlay lesbar, ohne die Kasse zu verlassen — plus
   serverseitige Absicherung, die die Pflichthäkchen nach dem Absenden erneut prüft
 * Rechtszeile unter der Kasse mit Impressum, Datenschutz und AGB, aus gewählten
   Seiten, einem Menü oder automatisch aus den bereits hinterlegten Rechtsseiten

**Arbeitet mit Germanized und German Market zusammen, nicht gegen sie.** Das Plugin
fragt die gerenderte Kasse, ob ein Rechts-Plugin tatsächlich ein Kästchen druckt—
nicht, ob eines installiert ist — und zieht sich dort zurück. Grundpreise (PAngV)
und der Versand der Widerrufsbelehrung mit der Bestellmail bleiben beim Rechts-Plugin;
der Einstellungsbildschirm sagt das klar, statt es Sie später herausfinden zu lassen.

**Grundsatz:** Ihre Zahlungsarten rendern weiter ihre eigenen Express-Knöpfe, Ihr
Rechts-Plugin behält seine Rechtstexte, Ihr Theme behält seine Typografie. Dieses
Plugin ordnet alles zu einer Kasse, die verkauft. Deaktivieren Sie es, steht die
Standard-Kasse unverändert wieder da.

**STM Smart Checkout Pro**

Alles oben Beschriebene ist im kostenlosen Plugin und bleibt dort. Das kostenpflichtige
Zusatzmodul ergänzt sieben Dinge:

 * **Online-Widerrufsformular** — die seit dem 19. Juni 2026 EU-weit vorgeschriebene
   Widerrufsfunktion (Richtlinie 2023/2673): öffentliches Formular auf eigener Seite,
   auch für Gäste erreichbar, für angemeldete Kunden mit der letzten Bestellung 
   vorbefüllt, mit Händler-Benachrichtigung und Kundenbeleg
 * **Widerrufs-Verwaltung** unter WooCommerce mit Status-Workflow, eigener Tabelle
   und Zähler-Badge — dazu ein „Diese Bestellung widerrufen”-Knopf im Kundenkonto
   für einen von Ihnen gewählten Zeitraum
 * **Express-Zone** — ein definiertes Band über dem Kassenformular für PayPal, Apple
   Pay und Google Pay, statt eines Knopfes unter den Zahlarten und eines zweiten
   irgendwo sonst. Die Knöpfe werden über die Filter der Anbieter dorthin gesteuert,
   nie nachgebaut und nie im DOM verschoben
 * **Zahlartabhängige Pflichtfelder** — eine Matrix, die „Pflicht” von der gewählten
   Zahlart abhängig macht: Kauf auf Rechnung darf nach der Telefonnummer fragen,
   Vorkasse nicht. Serverseitig nachgeprüft
 * **Methoden-Customizer** — eigener Name, Zusatztext, Symbol und Reihenfolge je
   Zahlart, alles über dokumentierte WooCommerce-Filter, mit 33 mitgelieferten Symbolen
 * **Safe-Mode** — ein Fatal Error beim Rendern der Kasse kostet den Shop keine 
   Bestellungen mehr: der Smart Checkout zieht sich ab der nächsten Anfrage zurück,
   die Standard-Kasse übernimmt, sichtbar und umkehrbar
 * **Mobile Sticky-Bestellleiste** und ein **ultra-kompaktes Layout** für dichte
   Kassen auf kleinen Bildschirmen

Pro setzt dieses kostenlose Plugin voraus: [STM Smart Checkout Pro für WooCommerce](https://www.storetown-media.de/produkt/stm-smart-checkout-pro-woocommerce/).
Auch das kostenlose Plugin hat eine eigene Seite: [STM Smart Checkout für WooCommerce](https://www.storetown-media.de/produkt/stm-smart-checkout-woocommerce/)

### Credits

The bundled postcode databases for Germany, Austria and Switzerland are derived 
from the free geographical database [GeoNames](https://www.geonames.org/), used 
under the [Creative Commons Attribution 4.0 licence](https://creativecommons.org/licenses/by/4.0/).

They ship as plain JSON inside the plugin and are read locally. Nothing is fetched
at runtime, and no address a customer types is sent anywhere.

## Screenshots

[⌊The three-column checkout: trust header band with progress, express payment area,
and address, payment and order summary side by side.⌉⌊The three-column checkout:
trust header band with progress, express payment area, and address, payment and 
order summary side by side.⌉[

The three-column checkout: trust header band with progress, express payment area,
and address, payment and order summary side by side.

[⌊The buy zone in reading order — totals, required consent, reassurance note, buy
button, trust row.⌉⌊The buy zone in reading order — totals, required consent, reassurance
note, buy button, trust row.⌉[

The buy zone in reading order — totals, required consent, reassurance note, buy 
button, trust row.

[⌊Terms and cancellation policy open in an overlay, without leaving the checkout.⌉⌊
Terms and cancellation policy open in an overlay, without leaving the checkout.⌉[

Terms and cancellation policy open in an overlay, without leaving the checkout.

[⌊The same checkout on a phone: one column, reachable targets, express buttons kept.⌉⌊
The same checkout on a phone: one column, reachable targets, express buttons kept
.⌉[

The same checkout on a phone: one column, reachable targets, express buttons kept.

[⌊The design tab — layout, the two blues, font size in pixels, every setting with
its own plain-language help bubble.⌉⌊The design tab — layout, the two blues, font
size in pixels, every setting with its own plain-language help bubble.⌉[

The design tab — layout, the two blues, font size in pixels, every setting with 
its own plain-language help bubble.

[⌊The legal tab with "detected at the checkout": what the automatic detection last
found, and which required statements the plugin is standing down from because another
plugin delivers them.⌉⌊The legal tab with "detected at the checkout": what the automatic
detection last found, and which required statements the plugin is standing down 
from because another plugin delivers them.⌉[

The legal tab with “detected at the checkout”: what the automatic detection last
found, and which required statements the plugin is standing down from because another
plugin delivers them.

## FAQ

### Does this work with the block-based checkout?

In part, and the plugin says exactly which part. Everything around the form works
on the Cart and Checkout blocks: the full-page template, the trust header band, 
the step indicator, the legal footer line and the design tokens on the button, the
fields and the order summary. Inside the form, the pieces that matter under German
law are there as well: a required consent box for terms and cancellation policy 
that WooCommerce validates on the server — a request without the tick is refused—
and writes onto the order together with the exact wording; the mandatory notice 
from your settings and the links to both texts one line above the buy button, the
links opening in the same overlay as on the classic checkout; the buy button label
from your settings; and the delivery time under each line item, in the cart block
and in the order summary, resolved from the same sources as on the classic checkout.
Not yet on the blocks: the column layouts, the field manager with its postcode autofill,
the trust row under the button, the reassurance note, and the coupon and order-note
controls. The settings screen lists this, and the one-click switch to the classic
cart and checkout remains for shops that want all of it today — the block markup
is kept, so the way back is one click as well.

### Does it work with WooCommerce Germanized / German Market?

Yes — coexistence with both is a core design goal. The plugin respects their legal
checkboxes, button texts and tax displays.

### Is there a paid version, and what does it add?

Yes. STM Smart Checkout Pro is a separate add-on that requires this free plugin.
It adds the online withdrawal form and its management screen, the express zone for
wallet buttons, payment-dependent required fields, the payment method customizer,
safe mode, a mobile sticky order bar and an ultra-compact layout. Everything described
in the description above is part of this free plugin and stays that way — Pro adds,
it does not unlock. Details and pricing: [STM Smart Checkout Pro for WooCommerce](https://en.storetown-media.de/produkt/stm-smart-checkout-pro-woocommerce/)

### Does the free plugin include the online withdrawal form required since June 2026?

No — that one is in Pro. EU directive 2023/2673 requires an online withdrawal function
for distance contracts from 19 June 2026, and it is more than a form: a public page
reachable for guests, pre-filling for logged-in customers, order matching that never
turns a consumer away, notification and receipt mails, and a management screen with
a status workflow. What the free plugin does cover is the checkout side of German
and EU law — consent, the § 312j BGB button label, VAT statement, delivery time 
and the mandatory notice above the buy button.

### Do I need a legal plugin for a German shop?

No. If none is present, the checkout supplies the mandatory pieces itself: the consent
box for terms and cancellation policy, the § 312j BGB button label, the VAT statement
in the order summary, and the delivery time under each product. Each of these is
decided by asking whether another plugin is actually rendering it — not by asking
whether one is installed — so nothing ever appears twice.

### What does it deliberately not cover?

Unit prices (PAngV) and sending the cancellation policy with the order confirmation
mail stay with a dedicated legal plugin. The settings screen states this in plain
language rather than leaving you to find out later, and it shows what the automatic
detection last found on your checkout.

### Can I try it without switching my live checkout over?

Yes. Leave the plugin switched off and open the checkout with `?stmc_preview=1` 
as a shop manager — you see the Smart Checkout, customers keep seeing the standard
one. `?stmc_preview=off` ends the preview again, and the settings screen tells you
while it is running, with the link that ends it.

### What happens to my checkout if I deactivate the plugin?

You get the standard WooCommerce checkout back, unchanged. The plugin arranges and
supplements the existing checkout; it does not replace the template, the gateways
or the order process, and it stores nothing your shop would miss.

### Does it work with my theme?

It is built to. Themes with a server-side adapter (The7, Storefront) use their native
distraction-free path; every other theme gets the plugin’s own minimal full-page
template, so the theme’s header, menus and footer are never built while styles, 
analytics, consent tools and chat widgets keep working. Layout rules place the checkout
anchors themselves, whatever markup a theme template wraps them in.

### Is it compatible with HPOS?

Yes, HPOS (High-Performance Order Storage) is fully supported. Compatibility with
the cart/checkout blocks is declared in the sense that this plugin does not interfere
with them — it does not style them either; see the block-checkout question above.

### Does it load external fonts or call external services?

No. No remote fonts, no tracking, no external requests. The postcode databases for
DE/AT/CH ship with the plugin.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“STM Smart Checkout for WooCommerce” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ Tatjana von Storetown-Media ](https://profiles.wordpress.org/jobhunter99/)

[Translate “STM Smart Checkout for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/stm-smart-checkout)

### Interested in development?

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

## Changelog

#### 0.1.45

 * The legal core works on the Cart and Checkout blocks. A required consent box 
   for terms and cancellation policy is registered through WooCommerce’s additional
   checkout fields, so the Store API validates it on the server — a checkout request
   without the tick, or with it set to false, is refused before an order exists —
   and the order carries the moment of consent and the exact sentence agreed to,
   as it does on the classic checkout. The links to both texts stand one line above
   the buy button, in the place WooCommerce reserved for legal text, and open in
   the plugin’s overlay. The buy button carries the label from your settings; the
   blocks never read the classic filter, and what looked compliant on German shops
   so far was WooCommerce’s translation of “Place order” and nothing more.
 * The design tokens reach into the block form: the buy button, the fields, the 
   section titles and the order summary wear the same accent, radius and type scale
   as the shell around them. The shell itself — full-page template, trust band, 
   step indicator, legal footer — has worked on the blocks all along; it hangs on
   page hooks, not on the classic checkout’s rendering hooks, which is more than
   the previous FAQ answer allowed for.
 * The mandatory notice and the delivery time follow. The notice from your settings—
   the essential order details the courts want readable right before the decision—
   shares the line above the buy button with the legal links, in body size where
   the links stay quiet. The delivery time under each item rides on WooCommerce’s
   own item data, the mechanism the Store API and both blocks already render under
   a product name: it appears in the cart block and in the checkout’s order summary,
   resolved from the same sources as on the classic checkout (the product’s own 
   value, a legal plugin’s delivery term, the shop-wide default), stands down for
   virtual items and where a legal plugin labels the item, and is printed once even
   on a shop whose cart is classic while its checkout is a block.
 * Not on the blocks yet, and said so on the settings screen: the column layouts,
   the field manager and postcode autofill, the trust row, the reassurance note,
   the coupon and order-note controls. Every piece above stays out on WooCommerce
   older than the additional-fields API; the classic checkout is unaffected there.

#### 0.1.44

 * The logo field no longer promises something the checkout does not do. Its help
   text said an empty field falls back to your site logo; the header band actually
   prints your site title as text, which is what the code has always done. A shop
   owner who left the field empty expecting a logo got a line of text and no explanation.
   Both help texts now describe the behaviour, and say out loud that the site logo
   and this field are different places in WordPress.
 * The German translation follows the WordPress glossary. The German polyglots team
   pointed at the glossary and the style guide when granting editor rights, and 
   four terms did not match it: Knopf is Button, Kästchen is Checkbox, Fußbereich
   is Footer, and Site is Website. 38 places in each of the two German catalogues,
   with the article corrected wherever the gender changed with the word — a Kästchen
   is neuter, a Checkbox is not, and a blind replacement would have left “das Checkbox”
   behind in a dozen sentences. Translations are delivered by WordPress.org and 
   are not part of this package.

#### 0.1.43

 * The links to our own pages sit at the end of the description instead of its second
   line. A shop owner opening a directory page wants to know what the plugin does;
   a link to the vendor’s shop before the first feature reads as an advertisement,
   whatever it points at. Both language sections now describe the plugin in full
   first and name the pages afterwards, where someone who has read that far might
   actually want them. The first link is now halfway down the description rather
   than in its opening. No code changed.

#### 0.1.42

 * The links in the description are links. WordPress.org renders a readme with a
   Markdown subset — bold, lists and headings came through, but a bare URL stays
   plain text, so every address in the description sat there unclickable. They are
   written as proper links now, with the product’s name as the anchor instead of
   the address, which is also what a search engine reads. The two attribution links
   in Credits had the same problem and are fixed with them. No code changed.

#### 0.1.41

 * The description says what the plugin actually does. It listed eight bullets for
   a checkout that has closer to twenty settings worth naming, and it described 
   the paid add-on as “three things” when it has carried seven since the end of 
   August — an understatement is as inaccurate as a promise, and this readme has
   been on the wrong side of that before. Both product pages are linked now, in 
   the language of the section that links them, and the German half spells out the
   legal features under the words a German shop actually searches for: Button-Lösung,§
   312j BGB, Widerrufsformular, AGB-Checkbox, MwSt.-Ausweisung, Lieferzeit. Two 
   questions were added to the FAQ, one of them stating plainly that the online 
   withdrawal form required since 19 June 2026 is in Pro and not in this plugin.
   No code changed.

#### 0.1.40

 * The plugin’s own homepage link no longer leads to the paid version. The Plugin
   URI in the header pointed at a path that redirects to the Pro product page, and
   WordPress.org publishes that header field as this plugin’s homepage — so the 
   free plugin’s link led to a sales page for a different product. It now points
   at this plugin’s own page. Both header URLs are the English ones, because the
   directory listing is written in English; the German product pages are carried
   by the German translation of those fields, which is what translatable header 
   URLs are for.

#### 0.1.39

 * The settings screen loads its stylesheet and its script as files. Both were printed
   into the page as a style and a script block, which renders the same but skips
   everything WordPress does around an asset: a version the caches can see, one 
   place from which a site can dequeue or replace them, and markup that stays out
   of the middle of the form. The distraction-free module’s extra hide rules take
   the same route and hang off the checkout stylesheet now instead of being written
   into the page head — and the child combinator survives their sanitizer, so “header
   > .bar” hides that bar rather than everything below the header.
 * Values written into a style element are stripped of the characters that could
   leave it. The word between the express buttons and the form is translatable, 
   and a translation is a string from outside the code: one carrying a closing style
   tag would have ended the element and turned the rest of the declaration into 
   markup. The colour and size tokens pass the same filter, applied late, where 
   the value is written into the CSS rather than where it was read.
 * Translations come from WordPress rather than from the package. The plugin no 
   longer calls load_plugin_textdomain and no longer ships compiled .mo files: for
   a plugin in the directory, WordPress delivers translations into wp-content/languages/
   plugins/ and loads them on the first translated string without being asked, so
   a bundled copy would only give one language two sources — of which the packaged
   one is always the older. The Domain Path header goes with them, because it pointed
   at a folder the package no longer carries. The German translation stays maintained
   in the source repository and goes to translate.wordpress.org, where anyone who
   finds a better word can correct it.

#### 0.1.38

 * The shipping-address switch speaks in the checkout’s voice. Its label carries
   the text, so a theme’s label rules land there rather than on the heading around
   it — Basel sets 22px and uppercase on `.woocommerce-form__label`, and that one
   line shouted at 66px while the rest of the checkout spoke normally. Font size,
   weight, letter spacing and casing now inherit from the row, stated on the label
   and on the span inside it, because which of the two a theme targets differs.

#### 0.1.37

 * Customers can enter a different shipping address again. The rule that steps the
   theme’s own section headings aside — so the plugin’s numbered titles can take
   their place — also caught the shipping block, and WooCommerce does not put a 
   heading there: it puts the “Ship to a different address?” checkbox inside that
   h3. Hiding it removed the only control that opens the shipping address and left
   an empty card in its place, on every shop that offers shipping. The shipping 
   block is now excluded from that rule and its heading is styled as what it actually
   is: a switch, in the body font, with a 44px tap target. Reported from a live 
   shop; the two test shops had never rendered the section, one forcing shipping
   to the billing address and the other selling a virtual article.

#### 0.1.36

 * The plugin now says it when your cart and checkout are built from blocks. A stock
   WooCommerce install renders both pages from the Cart and Checkout blocks; this
   plugin extends the classic cart and checkout, and none of its hooks fire inside
   the blocks. Until now that combination was silent in every direction: the settings
   screen offered its full set of options, the checkout kept looking exactly as 
   before, and WooCommerce said nothing either — because the plugin declares block
   compatibility, which is true (it breaks nothing) and which switches off Woo’s
   own warning. The settings screen now names the affected pages above the tabs,
   states plainly that nothing below will change what customers see, and offers 
   to switch those pages to the classic cart and checkout in one click. The block
   markup is kept in the page’s meta, so the way back is one click as well and stays
   visible for as long as the switch is in place. The same note appears once on 
   the plugins list, where it can be dismissed.

#### 0.1.35

 * Preview mode can be left again. Once a shop manager had opened the preview, every
   later visit showed the Smart Checkout while the settings screen kept saying “
   off” — which reads like a broken switch. `?stmc_preview=0` (also “off”, “no”)
   clears the cookie and takes effect in the same request, and the settings screen
   now says out loud whenever the cookie is set: preview is on for you, this is 
   why the checkout looks switched on, customers still see the standard checkout—
   with the link that ends it. Customers were never affected.

#### 0.1.34

 * Delivery time per line item — the last piece a shop without a legal plugin was
   missing in its checkout. Shown under every product in cart and checkout, resolved
   from the most specific source that knows one: a value typed onto this product(
   new field in the product’s Shipping tab) wins, then Germanized’s own delivery-
   time term (variation falling back to parent), then the shop-wide default. The`
   stmc_delivery_time` filter has the last word for shops that compute it from stock,
   a supplier feed or the shipping zone. Where a legal plugin already states the
   delivery time for a product, this one stays away — decided per product, not per
   shop.

#### 0.1.33

 * The two blues become settings. The step-heading blue and the field-label blue
   were hardcoded in the token file, which made them the only colors a shop could
   not change; both are colour settings on the Design tab now, with their current
   values as defaults, so nothing shifts visually. They stay deliberately separate
   from “Heading color” — labels are read while filling in, headings while orienting,
   and one colour for both flattens the form into a grey block. The reassurance 
   note moves back between the consent boxes and the buy button, where it comments
   on the consent right above it.

#### 0.1.32

 * The order summary states its VAT. With gross prices WooCommerce prints no tax
   row at all, reasoning that the price already contains it — so on a shop whose
   legal plugin has stopped rendering, the summary charges VAT and says nothing 
   about it. The checkout now states it itself, one row per tax rate beside the 
   other money lines, wherever no legal plugin is doing it. The percentage comes
   from the tax rate, never from its name: shops name their rates freely, and a 
   legal statement must not depend on what someone typed into a settings field.

#### 0.1.31

 * Lite and Pro become two plugins. The withdrawal complex, the mobile sticky order
   bar and the ultra-compact layout move to a separate STM Smart Checkout Pro plugin,
   so the free plugin neither carries nor loads paid code. Lite grows the extension
   points that make an add-on possible instead of a fork: `stmc_settings_fields`,`
   stmc_admin_tab_fields`, `stmc_admin_tab_{slug}`, `stmc_layouts`, `stmc_layout_labels`
   and public row helpers, so both plugins speak one visual language. New `STMC_Settings::
   layout()` resolves the effective layout from the raw option, so a stored layout
   whose provider is momentarily absent degrades to its nearest relative instead
   of silently falling back to the default.

#### 0.1.30

 * The checkout stands on its own legally. For shops with neither Germanized nor
   German Market, the plugin now owns the buy-button label wherever no legal plugin
   sets one (§ 312j BGB) — previously a compliant label arrived only by way of WooCommerce’s
   German translation, which is accidental compliance, not compliance. Priority 
   5, so anything hooking later keeps the last word, and a setting for shops with
   their own wording. Plus a slot for the information that must be readable in the
   same glance as the button, printed inside the place-order row so it travels with
   the button wherever the layout moves it. The settings screen now says plainly
   what the plugin does not cover when no legal plugin is present.

#### 0.1.29

 * Font size in pixels. The type scale had one knob expressed as a percentage of
   rem, which handed the real size to the theme’s root font size — the same setting
   rendered differently on two shops. It is a pixel value now, with every step a
   fixed ratio of it, chosen to reproduce the previous scale exactly at the 15px
   default; the old percentage is migrated rather than reset. Payment rows stay 
   one row: a gateway setting `display:block` inline on its own rows made the block-
   level label start a new line, stranding the radio above it — an inline-flex label
   sits beside the radio there and is blockified back to flex where the row is flex,
   so nothing changes elsewhere. No `!important` involved.

#### 0.1.28

 * The consent box detects the legal plugin itself. The switch becomes a three-way
   choice with Automatic as the default: the box asks the checkout whether a legal
   plugin is actually printing consent boxes, and only steps in when none is. Asked
   by hook, never by “is the plugin installed” — that distinction is the whole feature:
   a legal plugin can sit there active and configured and still render nothing, 
   and a presence check would leave such a checkout with no consent at all. The 
   decision is recorded and shown on the settings screen, because automatic behaviour
   nobody can inspect is how a checkout ends up legally naked without anyone noticing.

#### 0.1.27

 * The checkout can carry its own legal consent — one required checkbox for terms
   and cancellation policy, seated between the grand total and the buy button, rendered
   with WooCommerce’s own terms-wrapper class names so the existing card chrome,
   switch and invalid state apply. Links fill themselves from the pages the shop
   already registered; a placeholder whose page is unknown keeps its plain words
   instead of producing a dead link. Server-side validation reuses the existing 
   required-checkbox path, and the acceptance is written onto the order together
   with the exact wording shown — a stored “yes” pointing at today’s text proves
   nothing about last year’s order. Order notes become a one-line disclosure at 
   the end of the address column, so the field that hardly anyone fills stops costing
   a card and a step number.

#### 0.1.26

 * DHL preferred services join the payment column, right under the methods — the
   integration only re-prioritizes their hook, so everything Shiptastic built (its
   script, refresh behavior, conditions) keeps working untouched. And a new default
   makes the totals block third-party-proof: any unknown row a plugin prints into
   the totals now lands after the grand total automatically — extras can never interrupt
   the money story again.

#### 0.1.25

 * First member of the integrations family: Shiptastic (+ DHL). The pickup-location
   offer (“Not at home?”) no longer interrupts the address fields mid-flow — it 
   closes the address block as a quiet card. DHL’s preferred services (delivery-
   day tiles, drop-off location, neighbor) speak the checkout’s design language 
   now and settle after the grand total, where delivery fine-tuning belongs. The
   adapter is guarded (no-op without Shiptastic) and never forks the plugin’s behavior—
   the pattern every future integration follows.

#### 0.1.24

 * Order-summary thumbnails survive theme lazy-loaders. Basel’s lazy filter swapped
   the image source for its placeholder and lost the original along the way — the
   thumbnail rendered briefly, then stayed empty. The markup is now hand-built from
   the attachment URL, untouched by the attachment-image filter pipeline any lazy
   plugin hooks into; browser-native lazy loading still defers offscreen images,
   variations fall back to the parent image, missing images to the WooCommerce placeholder.

#### 0.1.23

 * The full-page checkout footer configures itself and bends to your will: pick 
   the exact pages in the backend (multi-select), or a whole menu — and without 
   any choice the line now fills itself with the legal pages your site already registered(
   Germanized’s imprint, privacy and withdrawal pages, WooCommerce’s terms page,
   WordPress’ privacy page), published pages only, in reading order.

#### 0.1.22

 * Order summary round from the second-shop review. Product images now render reliably
   in the summary regardless of the legal plugin (when Germanized already provides
   one, no second image is added). Quantity steppers beside each product let customers
   fix amounts right at the checkout — changes run through WooCommerce’s own refresh
   with all totals, stock limits and sold-individually respected; a setting turns
   them off. The coupon prompt is owner-switchable too: shops that never issue codes
   can retire the field that sends customers code-hunting.

#### 0.1.21

 * Distraction-free works on every theme now: on themes without a built-in adapter,
   cart and checkout render through the plugin’s own minimal full page (template_include)—
   the theme’s header, menus and footer are never built at all, while styles, analytics,
   consent tools and chat widgets keep working. A configurable legal-links line 
   under the checkout keeps imprint, privacy and terms reachable (pick your legal
   menu in the backend; the WordPress privacy page is the minimum fallback). Adapter
   themes (The7, Storefront) stay on their native path; owners can force the template
   on or off.

#### 0.1.20

 * Theme-proof layout round, measured on a second shop (Basel theme, Bootstrap checkout
   template). Theme templates that wrap the billing and order anchors in their own
   grid markup (a .col-sm-6 gave the billing column 50% of its 50%) become layout-
   transparent — the checkout grid now always places the anchors themselves, whatever
   the template wraps them in. The default template’s “Product / Subtotal” table
   head is retired (our column title already labels the area; as a re-flowed line
   its two cells overlapped). Gateway description boxes with intrinsically sized
   badges (Klarna) can no longer push past the card edge. Themes without a server-
   side adapter get a narrow distraction-free CSS fallback: the page-title hero 
   banner and the breadcrumb step aside while the screen-reader heading keeps the
   page named.

#### 0.1.19

 * Context translations restored: the rebuilt language files had silently lost every
   msgctxt entry (the page slug and the state-field labels fell back to English)—
   found on the first install on a second shop, where the withdrawal page appeared
   with a German title but an English slug. The build tool now writes GNU context
   keys correctly, and the page self-heal treats title and slug independently, so
   existing installs fix their slug on the next upgrade (WordPress keeps the old-
   slug redirect).

#### 0.1.18

 * Plugin Check green again: the help-icon markup escapes its id at the exact output
   spot (a pre-escaped variable is invisible to the reviewer’s static analysis),
   and reading WooCommerce’s order-notes switch carries its documented justification.

#### 0.1.17

 * Withdrawal round from the live review. The form pre-fills with the customer’s
   data — logged-in customers get their billing details plus their most recent order
   suggested (number, date, address), everything editable. The address is entered
   as single fields exactly like the checkout (street, postcode, city) instead of
   one big blob. The form speaks the checkout’s design language now: white card,
   label blue, 46px controls, choice cards for the scope, a full-width call-to-action.
   Fixed: German shops got a page literally titled “Withdrawal” — the textdomain
   loaded after the page was created; the priority is corrected and existing untouched
   pages heal themselves (title and slug, WordPress keeps the old-slug redirect).
   The last untranslated strings are gone. New: the order-notes field (“Additional
   information”) can be switched off in the backend.

#### 0.1.16

 * Every setting now explains itself: a “?” icon beside each label opens a plain-
   language help bubble — what the option does, the background, and when to use 
   it. Hover, focus or tap; Escape closes. The help texts live in one map, so the
   short inline hints under the fields stay untouched. Fully translated.

#### 0.1.15

 * The one-column layout is actually one column now. Without its own rules the theme
   decided — The7 turns the checkout form into its own two-column flexbox, so “one
   column” silently rendered like “two columns”. The layout is a centered 760px 
   flex column: express buttons keep their order, then billing, then the order block,
   everything stacked.

#### 0.1.14

 * Compact review round: on shipping-free carts the “Additional information” section(
   order notes) moves under the payment methods instead of dangling as a lone card
   below the address — the numbering follows the story (payment becomes step 2, 
   the notes read as a quiet sub-block). First/last name (and postcode/city) now
   sit on exactly the same line: WooCommerce’s float-era `margin-top` on `.form-
   row-last` tilted the grid pair by 6px.

#### 0.1.13

 * Parity round with the live shop’s proven checkout, plus a new layout. Step numbering
   now follows the form flow (1 billing details, 2 additional information, 3 payment—
   the order summary is the unnumbered constant); step heads grow to the measured
   1.15rem in the title blue with the number in a matching disc. Field and payment-
   method labels speak in the label blue at content size. Consent boxes and “Create
   an account?” become modern switches on individual white cards. In the order column
   the totals table now leads, consents and the buy button follow, and the money
   lines re-order so the grand total closes the column with zebra rhythm on the 
   quiet lines. Payment and order share ONE wide card split by a soft center line(
   three-column stage now starts at 1160px). The express area gets its measured 
   title size and a translated “OR” divider. New: an ultra-compact layout — the 
   three-column stage one type step down with tight cards and fields, modeled on
   the Magento edition; on touch screens density yields to reachability (16px field
   text, full-height targets).

#### 0.1.12

 * Plugin Check housekeeping — the remaining review warnings are resolved: request
   values in the withdrawal form and the postcode lookup are unslashed and sanitized
   before use, withdrawal table queries use the %i identifier placeholder (WordPress
   6.2+), and the deliberate direct calls to the plugin’s own table carry documented
   justifications. No functional change.

#### 0.1.11

 * One typographic system across all three checkout columns. Section titles now 
   run in the body font instead of the theme display face (a checkout is one surface,
   not three widgets), payment method names drop from the theme reading size to 
   content size so the middle column stops shouting, brand icons follow the type
   down, and the scale is down to five deliberate steps driven by tokens: fine print,
   secondary, content, controls, emphasis. Adds a –stmc-fs-xs token and raises content
   size to 15px.

#### 0.1.10

 * Consistent typography in the order summary. WooCommerce wraps every amount in
   its own price elements and themes style those wrappers directly, bypassing the
   cell — on The7 that meant a 13px tax label beside an 18px amount, three different
   blues in one column, and a grand total rendered in a completely different font
   family. The price wrappers now inherit from their cell, so each amount matches
   its label in family, size and color, with weight alone marking the value and 
   the grand total as the only emphasized line.

#### 0.1.9

 * Payment method rows are flex rows: a gateway with a wide brand icon strip (credit
   card) no longer pushes its label onto a second line, stranding the radio button
   above it — an inline-flex label is atomic and cannot break, so it dropped as 
   a whole. Radio buttons now match the consent checkboxes at 18px. Order summary:
   rows get horizontal padding so labels and amounts no longer touch the card edge,
   the theme’s grey table background is dropped in favor of the card surface, and
   row separators are drawn on the row instead of the cells (as flex items the cells
   were split by the column gap, breaking each line into two segments).

#### 0.1.8

 * Design round on the three-column layout: fixed column numbering 1 address / 2
   payment / 3 order (the CSS counter told the story backwards because WooCommerce
   renders the order markup before the payment markup); the address and additional-
   information titles were accidentally hidden by our own heading rule. Consent 
   boxes: consecutive cards merge into one quiet group, text flows as a normal block
   with hanging indent (WooCommerce core’s inline label + line-height 2 tore it 
   apart). Order summary: rows rebuilt as label-left/amount-right lines against 
   The7’s stacked block cells, product names wrap instead of truncating, tidy 44px
   thumbnails; Germanized’s relocated duplicate “Your order” heading hidden.

#### 0.1.7

 * Legal round: server-side safety net for required consent boxes (an order without
   a required tick is rejected even when the browser check was bypassed — and stays
   silent when WooCommerce or Germanized already reported the same box, extendable
   via the `stmc_required_checkboxes` filter). Optional reassurance note under the
   consent boxes. “Create an account?” info tooltip whose wording is derived from
   your own registration settings.

#### 0.1.6

 * Postcode autofill for DE/AT/CH from bundled databases (no external service) —
   the city fills in automatically, multiple matches feed a native suggestion list.
   Mobile sticky order bar: total + buy button pinned while the real button is out
   of view; the proxy click runs every native validation.

#### 0.1.5

 * Three-column checkout layout (billing / payment / order) — the most compact arrangement,
   selectable under Design. Express area polish: WooPayments’ English separator 
   hidden, gateway description rhythm, theme content padding removed on checkout
   surfaces.

#### 0.1.4

 * Consumer rights: online withdrawal form (EU withdrawal function) — auto-created
   form page for guests and customers, automatic menu placement from the backend,“
   Withdraw this order” in My Account, soft order matching that never blocks a submission,
   merchant notification + customer receipt emails, and a management screen with
   status workflow under WooCommerce  Withdrawals.

#### 0.1.3

 * Legal module: terms and withdrawal texts open in an accessible overlay without
   leaving the checkout (native link behavior as fallback). Styled legal checkboxes,
   order table refinements, cart page round: tidy table columns, checkout button
   before wallet buttons, quiet update button.

#### 0.1.2

 * Design round on live The7 + Germanized shop: express payment areas stack tidily
   above the columns, theme percentage-width traps neutralized in the grid, field
   pair raster (name, postcode/city), payment method rows with contained brand icons,
   empty section shells lose their card chrome.

#### 0.1.1

 * Core checkout modules: header band with progress and login toggle, distraction-
   free mode with theme adapters, numbered section titles, two-column layout, field
   improvements (state handling, mobile input attributes), trust elements. German(
   formal and informal) translations.

#### 0.1.0

 * Initial foundation: settings framework, design token system, checkout context
   detection, module registry, HPOS and cart/checkout blocks compatibility declarations.

## Meta

 *  Version **0.1.45**
 *  Last updated **2 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [checkout](https://wordpress.org/plugins/tags/checkout/)[conversion](https://wordpress.org/plugins/tags/conversion/)
   [germanized](https://wordpress.org/plugins/tags/germanized/)[one page checkout](https://wordpress.org/plugins/tags/one-page-checkout/)
   [WooCommerce checkout](https://wordpress.org/plugins/tags/woocommerce-checkout/)
 *  [Advanced View](https://wordpress.org/plugins/stm-smart-checkout/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/stm-smart-checkout/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/stm-smart-checkout/reviews/)

## Contributors

 *   [ Tatjana von Storetown-Media ](https://profiles.wordpress.org/jobhunter99/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/stm-smart-checkout/)