Point of sale, inside WooCommerce

Sell over the counter —
without a second system.

Scan with a barcode gun or your phone camera, take the payment, print the receipt. The sale is a WooCommerce order, on your products, your prices, your tax rules — and the stock has already moved. Nothing to sync at closing time.

  • No account, no card, no trial clock
  • The free version calls no external service
  • HPOS compatible
yourstore.com/wp-admin · Retail POS › Sell
The sale terminal in wp-admin: a scan box at the top, cart lines with quantities and prices, the customer phone field, a discount box, and payment-method buttons beside the total.
The sale terminal — scan, cart, customer, discount, payment.
Two systems, one shop

The website says one thing.
The counter says another.

If you sell in store as well as online, you are probably running WooCommerce for the website and something else — a terminal, a notebook, a spreadsheet — for the shop. Every evening the two disagree, and someone has to decide which one is lying.

Two stock figures

The shelf sold three this morning and the website never heard about it. Retail POS takes counter stock down through WooCommerce itself, so there is only ever one number.

Double entry at closing

Counter sales land in your normal WooCommerce order list, under your normal tax rules, in your normal reports. There is no end-of-day transcription because there is no second ledger.

A separate catalogue to maintain

No import, no mapping table, no nightly sync. The POS rings up the products, prices, variations, customers and tax classes that are already in your store.

One system, one stock figure, one set of books.

What the free version does

A complete counter, at no cost

Everything below is in the free plugin from WordPress.org — no signup, no key, no time limit.

Scan, tap, done

A scanner gun, your phone camera, or a photo

Beep — the line drops into the cart. Beep. Beep. Tap Cash. The receipt prints, the order is real, stock is already down, and the cursor is back in the scan box before the cashier has looked up.

  • Any HID scanner, nothing to configure. USB or Bluetooth guns that type into a text field just work — the box fires by itself at four characters or more, and on Enter too, so you never have to program a suffix.
  • The cursor always comes home. The scan box takes focus when a POS screen opens, and clicking empty space sends focus straight back to it.
  • Your phone is the second scanner — no app. A camera button opens a live viewfinder; browsers with a built-in BarcodeDetector decode natively, and where there is none the bundled ZXing library decodes instead. Code 128, EAN-13, EAN-8, UPC-A, UPC-E, Code 39, ITF and QR.
  • “Read from photo”, for the label that will not read. Creased or faded? Take a still and it is retried at three sizes and four rotations — twelve attempts — before it gives up.
  • No barcode? Search by name. Two characters or more; a scan matches the barcode field, then WooCommerce’s GTIN, then the SKU — and a variation always wins over its parent.
The sale screen with the scan box in focus, several cart lines with quantity controls, and payment buttons under the gross total.
Sell — the scan box, the cart, the total the customer hands over.
Money that adds up

The counter quotes gross, WooCommerce does the tax

Cart lines, the subtotal and the Complete sale button all show the tax-inclusive amount the customer actually hands over — whichever way your shop displays prices elsewhere.

  • Tax is WooCommerce’s job. Items ring up at the product’s own price and the order’s tax is calculated by WooCommerce, so your rates, classes and rules apply unchanged.
  • Discounts that do not break VAT. A percentage or fixed discount scales every line total down proportionally instead of dropping in a negative fee, so tax recomputes correctly even in a mixed-rate basket. Both are re-capped on the server.
  • Your tenders, your words. Payment methods are a free-text list in Settings — Cash, Card and Bank transfer to start with. Rename, add, delete; renaming keeps the key, so last month’s orders stay attached to the same tender.
  • Quantity three ways, and no quiet overselling. Minus, plus, or type the number; stock-managed lines are capped at the stock on hand, with a warning.
  • Quick edit, mid-sale. The pencil on a cart line opens price, sale price, stock and cost and writes straight back to the product — optionally copying price, sale price and cost to every sibling variation. Save a line unchanged and the price stays exactly where it was.

In the free version a sale is settled by exactly one payment method covering the full total. Splitting a sale across tenders is a Pro feature.

The sale-complete screen showing the new order number, the total paid, a remaining-stock list for the items just sold, and buttons to print the receipt or start a new sale.
Sale complete — order number, total, what is left on the shelf, receipt.
Returns at the counter

Blind returns — no original order needed

Scan what comes back over the counter, hand over the money, done. The payout is documented as a refunded POS order, and stock is restored automatically when stock reduction is on.

  • No receipt, no order number, no hunting through the order list.
  • Deliberately no stock cap on the returns cart — a customer can bring back three of something you currently hold none of, exactly as a real counter has to allow.
  • Returns and partial refunds are netted out of the dashboard, so the day’s figure is what actually stayed in the till.
  • Camera scanning works on the returns screen too.
The return terminal: a scan box, returned items listed with quantities and refund amounts, and a button to complete the refund.
Returns — scan what comes back, refund and restock.
Paper the shop needs

Receipts and your own barcode labels

Hit print and a narrow monospace window opens, sized for a roll of thermal paper: store name, address and phone, every line, the subtotal, the discount if there was one, the total, the payment method, and the customer’s name and phone. Any past POS sale can be reprinted from the order list.

  • Receipt amounts are the pre-discount figures, so the paper adds up the way a customer checks it: items total to Subtotal, minus Discount equals TOTAL.
  • Print price labels from the counter. Scan or search products into a queue, set how many copies of each, and print.
  • EAN-13 and EAN-8 are auto-detected, with a Code 128 fallback, for any product that already has a SKU or barcode.
  • Label width and height in millimetres, and what goes on the sticker — store name, product name, variant, price, the barcode and its digits — are all settings.
The barcode labels screen: a queue of products with copy counts on the left and a preview sheet of printable price labels with barcodes on the right.
Labels — print price labels straight from the counter.
After the sale

Your POS day, in the order list and on a dashboard

POS sales are ordinary WooCommerce orders tagged as counter sales — they take the status you configure (Completed by default) and appear in your reports and integrations like any other order.

  • POS order list with filters for type, status and date, and search by order number, phone, or customer name and e-mail.
  • Safe editing only — customer name, phone, e-mail and city, payment method, order status and a note. Line and price changes stay on WooCommerce’s own order screen, where they belong.
  • Sales dashboard: today, last 7 days, last 30 days and the calendar month to date, a daily revenue chart, a payment-method breakdown, average basket and best sellers — all net of returns.
  • Quiet by design. POS sales do not send the customer the usual WooCommerce order e-mails, and the admin new-order, no-stock and backorder notifications are suppressed for POS orders too. Orders from your website are untouched and mail as they always did.
The sales dashboard: cards for today, this month and the last 7 and 30 days, a daily revenue chart, a payment-method breakdown and a best-sellers list.
Dashboard — today, this month, 7 and 30 days, best sellers, payment mix.
Set up once

Settings a shop owner can actually answer

Six working screens — Sell, Dashboard, Orders, Returns, Labels and Settings — plus a built-in Help & support page. The settings page is a single short form.

  • Your payment methods, the store name, address and phone printed on receipts, and the label size in millimetres.
  • Whether a POS sale reduces stock, and which order status POS sales get, are both settings.
  • Optionally keep a product’s barcode in step with its SKU on save, and set a default country calling code for phone numbers.
  • A language switcher on the POS screens lets each cashier read the terminal in a language of their own, separately from the rest of wp-admin, using the language packs WordPress has installed. Right-to-left languages get an RTL layout.
The settings screen: the editable list of payment methods, store name, address and phone for receipts, and the barcode label size and content options.
Settings — tenders, label size, store details on receipts.
The POS orders table listing counter sales and returns with date, order number, customer, payment method, status and total, above filter and search controls.
Orders — every POS sale and return in one sortable table.

From install to first sale

There is no setup project and no data migration. It sells the store you already have.

1

Install & activate

Install from WordPress.org like any plugin. WooCommerce must be installed and active; WordPress 6.2+ and PHP 7.4+.

2

Check two settings

Open Retail POS → Settings: confirm your payment methods and the store name, address and phone that print on the receipt.

3

Scan and take payment

Open Retail POS → Sell. Scan or search, adjust quantities, add a discount if you want one, tap the tender that covers the total.

4

It is already a WooCommerce order

Print the receipt, glance at the remaining-stock snapshot, and the next scan is already in the box. Nothing to reconcile later.

Staff need the WooCommerce manager capability (manage_woocommerce) to open the POS screens — the Shop manager role and administrators have it, so nobody needs a full admin account to work the counter. Full setup notes are in the documentation.

When one counter becomes a shop

What Pro adds

Free is a complete single register: scanning, the sale, returns, receipts, labels and the dashboard, with no time limit and no sale caps. Pro is the money-control layer a full retail day needs — credit, the drawer, and the numbers behind the revenue.

Split payments PRO

Settle one sale with several tenders — half cash, half card — each recorded separately, so the drawer and the card slip both reconcile.

Partial payment & customer credit PRO

Take what the customer has now and book the remainder to their account. A debtor list with aging, collections, printable statements and WhatsApp reminders keeps it from being forgotten.

Cash register & end of day PRO

Opening float, cash-ins and expenses on record, then an expected-versus-counted close with carryover — the till either balances or shows exactly where it did not.

Exchange terminal PRO

Scan what comes back and what goes out in one flow; the tax-correct difference is collected or refunded.

In-store (POS) pricing PRO

Ring items up at a counter price distinct from the website price. Set it per product, or generate it across the catalogue in bulk — site price ± a percentage, with optional rounding to 0.10/0.50/1/5 or charm endings.

Campaign scenarios PRO

Preset one-tap chips instead of mental arithmetic: “buy 3 pay 2”, “2nd item −50%”, and percentage or fixed presets your staff can apply without a calculator.

Profit reports PRO

Revenue, cost, margin, stock turnover, attribute breakdowns and discount usage. Free records a unit cost when you quick-edit a line, but shows no margin figures anywhere.

Store activity feed PRO

Every sale, return, exchange and credit of the day in one chronological stream — what happened at the counter while you were in the back.

Priority support PRO

Free users get help on the WordPress.org support forum. Pro customers reach the people who built the plugin directly.

Free and Pro, side by side
FeatureFreePro
Sale terminal — scan, cart, receiptIncludedIncluded
Barcode scanner & phone-camera scanningIncludedIncluded
Product search & variant pickerIncludedIncluded
Manual discountspercentage or fixed amountIncludedIncluded
Configurable payment methodsone method settles a sale in FreeIncludedIncluded
Blind (receiptless) returnsIncludedIncluded
Barcode label printingIncludedIncluded
POS order list with safe editIncludedIncluded
Sales dashboardtoday · 7 · 30 days · month to dateIncludedIncluded
Split paymentsseveral tenders on one saleNot includedIncluded
Partial payment & customer credit ledgerNot includedIncluded
Debtor aging, statements & remindersNot includedIncluded
Cash register & end-of-day closeNot includedIncluded
Exchange terminalNot includedIncluded
In-store (counter) pricingNot includedIncluded
Campaign scenario presetsNot includedIncluded
Profit & margin reportsNot includedIncluded
Store activity feedNot includedIncluded
Priority supportNot includedIncluded

Pro is a separate download from erenlabs.net, not from WordPress.org. It is the same plugin with the Pro screens unlocked — no re-install of your data, no migration. If a licence lapses, the free features keep selling and the Pro screens lock again; nothing in your database is deleted.

Pricing

The free version is genuinely free and complete for one counter — no trial, no card. Pro is one flat annual price per licence, whatever the shop’s turnover.

Free

A complete single register, forever.
$0
from WordPress.org
  • Sale terminal, scanner gun & camera scanning
  • One payment method per sale, your own tender names
  • Receipts, blind returns, barcode labels
  • POS order list and sales dashboard
  • No account, no licence check, no telemetry
Download free
★ Most shops start here

Pro · 1 site

One shop, one counter, everything unlocked.
$99 /year
annual licence, renews yearly
  • Everything in Free, plus:
  • Split & partial payments, customer credit ledger
  • Cash register & end of day
  • Exchange terminal & campaign scenarios
  • In-store pricing, profit reports, activity feed
  • Automatic updates & priority support
Get Pro — 1 site

Pro · 5 sites

A few branches, or an agency’s clients.
$299 /year
annual licence · 39% off five single licences
  • Every Pro feature, on up to 5 sites
  • One licence key, one renewal date
  • $59.80 per site per year
  • Automatic updates & priority support
Get Pro — 5 sites

More than five counters?

A 20-site licence is $699 a year — 64% off twenty single licences. Pick a licence size and the checkout link follows.

$699 per year, 20 sites

Continue to checkout

Every paid plan is an annual licence that renews yearly, and you can switch renewal off at any time. Checkout, invoicing and licence management are handled by Freemius. Refunds follow our refund policy, summarised below. The free version stays free either way: it is not a trial and it has no sale caps.

14-day refund window. If Pro does not work as described and we cannot put it right for you, tell us within 14 days of your first licence purchase and we refund it in full. That is the ground the refund covers, and the exact terms are in our refund policy. If you are unsure whether Pro suits your counter, start with the free version instead — it is the same plugin, and it costs nothing to find out.

Questions, answered

The things a shop owner asks before putting a plugin on the till.

Any scanner gun that types into a text field — the usual USB or Bluetooth HID kind — works, and you do not have to program an Enter suffix into it. The scan box fires by itself once four or more characters land (and on Enter as well), and it takes focus back after every action, so the next scan always lands in the right place. The Labels screen auto-fires at six characters or more.

Yes, with no app to install. A camera button on the scan box opens a live viewfinder: browsers with a built-in BarcodeDetector (typically Android Chrome) decode natively, and where there is none (typically iOS Safari) the bundled ZXing decoder takes over. If a damaged or dense label will not read live, “Read from photo” takes a still and retries it twelve ways. Camera scanning is on the Sell and Returns screens. Browsers only release the camera on a secure connection, so the site has to be served over HTTPS.

No. This is a WordPress admin screen and it needs a live connection to your site — every scan, search and sale is a request to WordPress. If the internet drops at the counter, the terminal stops with it. There is no third-party POS cloud in between, so the terminal is as fast as your own site.

Your theme is not involved. The POS lives entirely in wp-admin — nothing is added to the storefront, no template is overridden, no shortcode or block is needed. What it does need is WooCommerce active, WordPress 6.2 or newer and PHP 7.4 or newer. It is HPOS (High-Performance Order Storage) compatible and works on classic post storage too.

Yes. They are ordinary WooCommerce orders tagged as POS sales, they take the status you configure (Completed by default), and they show up in your reports and integrations like any other order. Stock reduction goes through WooCommerce core, so lookup tables and integrations stay correct — and whether a POS sale reduces stock at all is a setting.

No. Search by product name or SKU and pick from the results; a variable parent opens a variant picker showing each variation with its price, remaining stock and barcode. When you do want barcodes, the Labels screen prints scannable labels for any product that already has a SKU or barcode, and the plugin can keep a product’s barcode in step with its SKU on save.

Yes. Anyone who can manage WooCommerce — the Shop manager role, plus administrators — can open the POS screens, so nobody needs a full administrator account to work the counter. Developers can point the rpsw_capability filter at a different capability.

The free version contacts no external service at all. Sales, customers, orders, settings and reports live only in your own WordPress database, and the free package ships no licensing, analytics or telemetry code of any kind. Every JavaScript library it uses is bundled inside the plugin, so nothing loads from a CDN.

The separately distributed Pro version uses the Freemius SDK for licence validation and updates. On first activation it shows an explicit opt-in screen: nothing is sent unless you click “Allow & Continue”, and “Skip” keeps the plugin fully functional. If you opt in, Freemius receives basic site data — site URL, WordPress and PHP versions, plugin version, admin e-mail. Your sales, customers, credit ledger and reports are never sent.

Not in the free version: one sale is settled with one payment method covering the full total. Split payments, partial payment and the customer credit ledger are Pro features. You can still define as many tender types as you like in the free version — Cash, Card, Bank transfer, or whatever your shop calls them — you just pick one per sale.

Nothing is deleted. The sale terminal keeps selling, and every ledger entry, register day and report stays in your database — the Pro screens simply lock until a licence is active again. The licence renews yearly by default because that is what keeps updates and priority support coming, and you can switch renewal off at any time.

Yes — returns are blind. Scan what the customer brings back, refund it, and stock is restored automatically when stock reduction is on; the payout is recorded as a refunded POS order so the day’s figures stay honest. There is no stock cap on the returns cart, so you can take back more than the shop currently holds.

The plugin removes its own options and scheduled events and stops there. Your products, stock, customers and orders stay exactly as they are — including the POS ones, because they are ordinary WooCommerce orders and always were.

Sell one item and see

Install it on the till, ring up a single product, and you will know inside a minute whether the counter likes it. Nothing is held back behind a signup.

Free forever for one counter · Pro from $99/year · 14-day refund window