Skip to content

Run a global academy with Learnomy

Your buyers are not sitting behind a US credit card. Some pay from Germany or France by bank debit, some from Brazil or Mexico with a cash voucher, some from the UK or Australia with an ordinary card, and some read the checkout page in their own language before they trust it enough to pay. A single “enter your card number” form quietly turns away every buyer whose bank does not offer one, and a catalog only in English does the same to a browser set to German. None of this needs Learnomy Pro: delayed payment methods, a stored billing address, a flat tax rate, translation-ready UI strings, and per-course SEO overrides are all in Free.

Feature Free or Pro Reference
Stripe checkout, including delayed bank methods Free Payment Gateways
WooCommerce checkout (alternative route) Free Payment Gateways
Billing address on account, frozen per order Free Checkout and Purchase Flow
Flat tax rate Free Tax (Flat Rate)
Transactions and clearance states Free Transactions
Translation-ready plugin strings Free WordPress Settings > General > Site Language
Per-course SEO Free Course SEO and Sharing

Go to LMS Settings > Payments. Learnomy offers four gateways, and more than one can be enabled at once:

Your options here:

  • Test - a synchronous in-memory gateway for building and QA. No real money, no setup. Turn it off before you launch.
  • Stripe - on-page checkout with Stripe’s Payment Element. Alongside cards, Stripe supports a set of delayed bank and voucher methods per region: SEPA Direct Debit and Bacs for European and UK bank accounts, BECS for Australia, boleto for Brazil, OXXO for Mexico, and Konbini for Japan. You enable the methods you want directly in your Stripe Dashboard; nothing to configure in Learnomy beyond the webhook.
  • PayPal - a second real-money option, on-page button, no delayed methods.
  • WooCommerce - routes the purchase through the WooCommerce cart and checkout instead of Learnomy’s own. WooCommerce’s own extensions add region-specific tax rules (EU VAT with reverse charge, US nexus tax, and so on) that Learnomy’s flat rate does not attempt.

For a global academy specifically, the choice is Stripe direct against WooCommerce, and it comes down to what you need most:

  • Stripe direct is the pick when the thing standing between you and a sale is the payment method itself. A buyer without a card, or unwilling to type one into an unfamiliar site, can still pay with a bank debit or a voucher, and you get there with one webhook and no separate store to run.
  • WooCommerce is the pick when the thing you actually need is tax compliance and a store you already operate – EU VAT with the reverse charge for B2B buyers, region-aware rates, and a full order and reporting system, at the cost of the delayed-method roster above (WooCommerce brings its own payment methods through its own extensions, not Stripe’s).

Most global academies start with Stripe direct: it solves the more common failure mode (a buyer who can’t pay at all) with almost no setup, and Learnomy’s flat tax rate covers basic compliance until a WooCommerce-routed storefront is worth the extra moving parts.

Stripe settings card, enabled, with the webhook URL and required events

Phase 2 - Collect a billing address and set your tax rate

Section titled “Phase 2 - Collect a billing address and set your tax rate”

Whichever gateway you use, the checkout page collects a billing address above the payment method: first and last name, company, country, two address lines, city, state, postcode, email, phone, and a tax registration number (one field covers a VAT ID or a GSTIN). Six fields are required – first name, last name, country, address line 1, city, postcode – the rest are optional.

The address belongs to the buyer, not to the order. It saves to their account, so it comes back pre-filled on their next purchase, and every order also keeps its own frozen copy taken at the moment of purchase – editing the profile later never rewrites an old receipt. The example below is Chloe Jones checking out from Amsterdam; her address is already on file from an earlier purchase, so the form arrives filled in rather than blank.

Checkout billing details form, pre-filled with a Netherlands address, tax line shown

While you’re on LMS Settings > Payments, open the Tax card and turn on Collect tax. Set a Tax rate and a Tax label (Tax, VAT, GST – whatever your region calls it). This is one flat percentage applied to every paid Stripe or PayPal purchase; it is not a per-country VAT table. If your buyers span enough jurisdictions that a single rate stops being defensible, that is the signal to route through WooCommerce instead, which brings its own tax engine. See Tax (Flat Rate).

Phase 3 - Understand what happens between checkout and clearance

Section titled “Phase 3 - Understand what happens between checkout and clearance”

A card payment (or PayPal, or the test gateway) settles the moment the buyer submits, and Learnomy enrolls them immediately. A delayed method does not: a bank debit or a cash voucher tells Stripe “accepted” right away, but the money can take days to actually arrive. Learnomy tracks three states on the transaction row:

Status What it means What the buyer has
Pending Payment initiated, not yet confirmed by the gateway Nothing yet – no enrollment
Completed The gateway confirmed the funds cleared Full access, enrolled at the moment of clearance
Failed The gateway reported the payment did not go through Nothing – no paid-looking order is left behind

The buyer is not enrolled at checkout for a delayed method. They land on the thank-you page in a pending state that explains their enrollment is being set up, and the page keeps checking until the webhook resolves it one way or the other. You don’t configure this; it’s how Stripe’s asynchronous methods work, and the one requirement on your side is that the webhook events checkout.session.async_payment_succeeded and checkout.session.async_payment_failed stay subscribed in your Stripe Dashboard. Without them, a buyer who pays by SEPA is charged and never enrolled. The “Required events” hint printed next to the webhook URL on LMS Settings > Payments does not currently list these two events, so add them in the Stripe Dashboard anyway rather than relying on the on-screen list, or the same delayed-method buyers – SEPA, boleto, OXXO, and the rest – are charged and never enrolled.

Below is transaction cs_seed_ga_sepa_fr_pending on the model site: Ben Ito paid €63.25 for “Test-Driven Development with Vitest” by SEPA Direct Debit. The gateway metadata shows "awaiting_clearance": true, and there is no enrollment for Ben on this course yet.

Pending transaction detail, status Pending, gateway metadata showing awaiting_clearance true

Compare that with cs_seed_ga_sepa_de, also a SEPA debit, from Amara Hall in Berlin. Its status is Completed, the address is frozen exactly as she typed it (Torstraße 45, Berlin), the tax is broken out, and – because this transaction did clear – a commission split now exists for the platform and the instructor.

Cleared SEPA transaction detail, frozen German billing address, tax and commission split shown

Go to Settings > General > Site Language in wp-admin. Learnomy ships nine translated locales in the plugin itself, ready to use the moment you pick one: German (de_DE), Spanish (es_ES), French (fr_FR), Italian (it_IT), Dutch (nl_NL), Polish (pl_PL), Brazilian Portuguese (pt_BR), Russian (ru_RU), and Swedish (sv_SE). Setting Site Language switches every plugin string – course labels, checkout, account pages, admin screens – to that language for everyone who visits the site, admin bar included.

Your options here:

  • One Site Language for the whole install - the simplest setup. Every visitor sees the same language regardless of their own browser or account settings. This is what most single-region academies want, and it’s the option demonstrated below.
  • A separate install per region (a de. subdomain or a second site) - each with its own Site Language, its own currency default, and often its own course catalog if the content itself needs translating, not just the interface chrome. Reach for this when the academy sells materially different content per market, not just the same catalog in a different language.

Learnomy does not ship a per-visitor language switcher of its own – a visitor picks a language by which site or subdomain they land on, not from a dropdown on the page. A multilingual plugin can add that switcher on top; Learnomy’s .mo files work with WordPress’s standard translation loading either way.

The screenshot below is the model site with Site Language set to German, viewed as a logged-in student with no admin access. “Buy Now” reads Jetzt kaufen, “Add to wishlist” reads Zur Wunschliste hinzufügen, and the curriculum labels (“Bereich” for section, “Lektionen” for lessons) are all plugin strings, not page content – the course title and description stay in whatever language you wrote them in, since Learnomy translates its own UI, not your course content.

Course page rendered in German for a logged-in student, Jetzt kaufen button visible

Open a course for editing and expand Search & Sharing. Five fields – Search title, Search description, Share image URL, Share image (media ID), and Search visibility – default to values built from the course itself, and stay that way until you type something. This matters for a catalog serving several markets or a course whose status has changed since it was written: the example below rewrites the search snippet for a superseded course so buyers stop landing on the old version through search, without touching the course title students already bookmarked.

Search & Sharing section, Search title and Search description overridden for a superseded course

See Course SEO and Sharing for the full field reference, including how these interact with Yoast or Rank Math if you also run one.

  1. Open LMS Commerce > Transactions, search cs_seed_ga_sepa_fr_pending, and open the result. Confirm Status reads Pending and the gateway metadata block shows "awaiting_clearance": true. No enrollment exists yet for this buyer on this course.
  2. Search cs_seed_ga_sepa_de and open that result. Confirm Status reads Completed, the billing address is frozen to the buyer’s German details, and the commission split now shows two rows (Platform, Instructor).
  3. Compare timestamps: the transaction’s Date field reads July 31, 2026, 4:59 am – when the SEPA debit was initiated at checkout. Open Learnomy > Students, find Amara Hall, and check her enrollment on “JavaScript Fundamentals for Web Developers”: it reads August 4, 2026, 12:29 am, almost four days later. The enrollment date is the clearance date, not the checkout date, which is exactly the delayed-method behavior this guide describes: nothing was granted until the money actually landed.

The model site’s global-academy vignette runs on Aurora Academy’s web development catalog, with eight student accounts carrying billing addresses in Germany, France, the Netherlands, Brazil, Mexico, Japan, the UK, and Australia, and five transactions recorded with real gateway references:

Transaction Buyer Course Amount Method Status
cs_seed_ga_sepa_de Amara Hall (DE) JavaScript Fundamentals for Web Developers €56.35 SEPA Direct Debit Completed
cs_seed_ga_bacs_gb Gabriel Nakamura (GB) TypeScript for JavaScript Developers £67.85 Bacs Completed
cs_seed_ga_boleto_br David Kim (BR) Deploy Web Apps with Docker and GitHub Actions R$102.35 boleto Completed
cs_seed_ga_oxxo_mx Elena Lee (MX) Web Performance Optimisation in Practice $79.35 MXN OXXO Completed
cs_seed_ga_sepa_fr_pending Ben Ito (FR) Test-Driven Development with Vitest €63.25 SEPA Direct Debit Pending

A Konbini (Japan) transaction and full locale coverage in the buyer’s own language are not seeded on the model site; the Payment Gateways and Site Language mechanisms both work identically for those, so demo them live against your own Stripe test keys if you need to see one.

Three courses in this catalog also carry SEO overrides: “JavaScript Fundamentals for Web Developers” and “Build a REST API with Node.js and Express” have custom search titles and descriptions written for search results, and “Deploy Web Apps with Docker and GitHub Actions” carries a “Legacy Edition” override marking it as superseded by a newer course.

  • Pending transaction: cs_seed_ga_sepa_fr_pending at LMS Commerce > Transactions, search for the reference.
  • Cleared transaction: cs_seed_ga_sepa_de, same screen, frozen German billing address and a two-row commission split.
  • Billing students: log in as ?autologin=aurora_s_0 through ?autologin=aurora_s_7 (Amara Hall through Hannah Obi) to see each buyer’s stored billing address at checkout for any paid course they haven’t yet bought.
  • SEO overrides: “JavaScript Fundamentals for Web Developers” (/courses/aurora-javascript-fundamentals-web/) and “Deploy Web Apps with Docker and GitHub Actions” on the course editor’s Search & Sharing section.