Title: Eren Labs Retail POS for WooCommerce
Author: erenlabs
Published: <strong>August 13, 2026</strong>
Last modified: August 13, 2026

---

Search plugins

![](https://ps.w.org/eren-labs-retail-pos-for-woocommerce/assets/banner-772x250.
png?rev=3644979)

![](https://ps.w.org/eren-labs-retail-pos-for-woocommerce/assets/icon-256x256.png?
rev=3644615)

# Eren Labs Retail POS for WooCommerce

 By [erenlabs](https://profiles.wordpress.org/erenlabs/)

[Download](https://downloads.wordpress.org/plugin/eren-labs-retail-pos-for-woocommerce.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/eren-labs-retail-pos-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/eren-labs-retail-pos-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/eren-labs-retail-pos-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/eren-labs-retail-pos-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/eren-labs-retail-pos-for-woocommerce/)

## Description

If you sell over a counter as well as online, you are probably running two systems
and reconciling them by hand: WooCommerce for the website, and a separate POS terminal—
or a notebook, or a spreadsheet — for the shop. Every evening the two disagree, 
and every evening someone has to decide which one is lying.

**Retail POS removes the second system.** It is a complete point of sale that runs
inside the WooCommerce admin you already log into, on the products, prices, stock,
customers, taxes and orders that are already there. A counter sale **is** a WooCommerce
order. Its stock movement **is** a WooCommerce stock movement, made through WooCommerce
core. No second catalogue, no sync step, nothing to reconcile at closing time.

#### What it replaces

 * **The separate POS system.** Sell in store from `wp-admin`, on the machine already
   sitting at the counter: scan, cart, discount, take payment, print the receipt.
 * **The stock spreadsheet.** One stock figure, not two. Counter sales take stock
   down through WooCommerce, returns put it back, the cart will not oversell a stock-
   managed line, and a snapshot after each sale shows what is left of exactly the
   items you just sold — the quickest way to catch a bad count.
 * **Double entry at the end of the day.** POS sales land in your normal order list,
   under your normal tax rules, in your normal reports.
 * **The price-sticker order.** Print your own scannable barcode labels, at the 
   counter, at your label size.

#### What it costs you to try

Nothing, and nothing is held back behind a signup. No account, no API key, no licence
check, no external service: the free plugin talks to your own database and nowhere
else (see **External services** below). Install it on the till, sell one item, and
you will know inside a minute whether the counter likes it. Remove it and it deletes
its own settings and scheduled jobs and stops there — your products, stock and orders
stay exactly as they are, because they were WooCommerce’s all along.

#### Scan, tap, done: barcode scanner, phone camera, or a photo

Beep — the line drops into the cart. Beep. Beep. Tap **Cash**. The receipt prints,
the order is a real WooCommerce order, stock is already down, and the cursor is 
back in the scan box before the cashier has looked up. That loop is the whole plugin,
and it was built behind a real shop counter, not in a spreadsheet.

 * **USB or Bluetooth barcode scanner, with nothing to configure.** Any HID scanner
   gun that types into a text field works, and you do not need to program an Enter
   suffix into it: the scan box fires by itself as soon as four or more characters
   land, and it fires on Enter too.
 * **The cursor always comes home.** The scan box takes focus when a POS screen 
   opens, and clicking any empty space sends focus straight back to it. No hunting
   for the field between customers.
 * **Your phone is the second scanner — no app to install.** Tap the camera button
   on the scan box and a live viewfinder opens. Browsers with a built-in BarcodeDetector(
   typically Android Chrome) decode natively; where there is none (typically iOS
   Safari) the bundled ZXing library decodes instead. Both are set up for 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, faded, printed
   too small? Take a still — or pick one from the gallery — and it is retried at
   three sizes and four rotations, twelve attempts, before it admits defeat.
 * The camera view uses the rear camera at up to 1920×1080, crops the middle band
   of the frame, alternates horizontal and vertical passes, turns on continuous 
   autofocus where the device supports it, and shows zoom and torch (flashlight)
   buttons where the phone exposes them.
 * Camera scanning is available on the Sell and Returns screens. The Labels screen
   takes a hardware scanner or a typed code, auto-firing at six characters or more.

#### What a scan finds, and what to do when there is no barcode

 * A scanned code is matched against the product’s barcode field, then WooCommerce’s
   own **GTIN** field, then the **SKU**, then WooCommerce’s SKU index — and a variation
   always wins over its parent.
 * Only published products and variations ring up. A variable parent is never sellable
   on its own: it opens a **variant picker** listing each variation with its price,
   remaining stock and barcode, so the sizes are on the screen instead of in your
   head.
 * **No barcode? Search by product name.** Type two characters or more and every
   word has to appear in the title; a single-word search additionally matches part
   of a SKU, barcode or GTIN.

#### The quick sale: cart, quick edit and discount

 * **Quantity, three ways.** Minus, plus, or type the number. Stock-managed lines
   are capped at the stock on hand, with a warning, so a busy counter cannot quietly
   oversell.
 * **Quick edit, mid-sale.** The pencil on a cart line opens price, sale price, 
   stock and cost and writes straight back to the WooCommerce product or variation—
   optionally copying the new price, sale price and cost to every sibling variation
   in one go, refreshing the parent’s price range afterwards. Setting a stock number
   switches stock management on for that item and flips its in-stock status to match.
 * **The price you type is the price the shop means.** The server converts your 
   figure back to WooCommerce’s own entry basis before saving, so opening a line
   and saving it unchanged leaves the price exactly where it was.
 * **Manual discount on the whole sale**, as a percentage or as a fixed amount of
   money. It is recomputed and re-capped on the server (percentage clamped to 0–
   100, a fixed amount never above the total), so a fiddled browser cannot invent
   a bigger one.

#### Money that adds up

 * **The counter quotes gross.** Cart lines, the subtotal and the Complete sale 
   button all show the tax-inclusive amount the customer actually hands over — whichever
   way the shop is set to display prices elsewhere.
 * **Tax is WooCommerce’s job.** Items ring up at the product’s own WooCommerce 
   price and the order’s tax is calculated by WooCommerce itself, so your rates,
   classes and rules apply unchanged.
 * **Discounts that do not break VAT.** The discount scales every line total down
   proportionally instead of dropping in a negative fee line, so tax recomputes 
   correctly even when the basket mixes rates.
 * **Your tenders, your words.** Payment methods are a free-text list in Settings—
   Cash, Card and Bank transfer to start with; rename them, add them, delete them,
   and they appear as buttons on the sale screen. Renaming keeps a method’s key,
   so last month’s orders stay attached to the same tender. A sale in the free version
   is settled by exactly one method covering the full total.
 * **Customers by phone.** Type the number: if a WooCommerce customer has it as 
   their billing phone the sale links to them, otherwise the order simply carries
   the name and phone you typed. Nobody is forced to create an account, POS sales
   do not send the customer the usual WooCommerce order e-mails, and the admin new-
   order mail is off by default — one setting if you want it back.

#### Receipt printing

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

#### Returns and refunds at the counter

**Blind (receiptless) returns**: scan what comes back over the counter, hand over
the money, done — no original order needed. The payout is documented as a refunded
POS order and stock is restored automatically when stock reduction is on. The returns
cart deliberately has **no stock cap**: a customer can bring back three of something
you currently hold none of, exactly as a real counter has to allow.

#### Barcode label printing

 * **Print barcode labels** for any product that already has a SKU or barcode: scan
   or search products into a queue, set how many copies of each, and print.
 * Barcode rendering auto-detects **EAN-13** and **EAN-8** and falls back to **Code
   128**.
 * Label width and height in millimetres, and what goes on the label (store name,
   product name, variant, price, the barcode and its digits), are all configurable
   in Settings.

#### POS orders and the sales dashboard

 * **POS order list** with filters for type, status and date, and search by order
   number, phone, or customer name and e-mail. Editing is limited to safe fields—
   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. Returns and partial refunds are netted out, so the figure on the
   screen is what actually stayed in the till.

#### Translations

Every string is translatable and the plugin ships its translation template (`languages/
eren-labs-retail-pos-for-woocommerce.pot`). Translations for the free version are
served as WordPress.org language packs from translate.wordpress.org — nothing is
bundled, so you always get the current community translation. A language switcher
on the POS screens lets each user read the plugin in a language of their own, separately
from the rest of wp-admin, using whatever language packs WordPress has installed;
anything else falls back to English. Right-to-left languages get an RTL layout.

#### Pro

[Retail POS Pro](https://erenlabs.net/) adds what a full-day retail counter needs:

 * **In-store (POS) pricing** — ring items up at a counter price distinct from the
   website price. Set it per product on the product editor, or generate it across
   the whole catalogue in bulk (site price ± a percentage, with optional rounding—
   nearest 0.10/0.50/1/5 or charm .90/.99/9.90).
 * **Split payments** — settle one sale with several tenders (half cash, half card),
   each recorded separately.
 * **Partial payment & customer credit ledger** — take what the customer has now,
   book the remainder to their account; debtor list with aging, collections, printable
   statements, WhatsApp reminders.
 * **Cash register & end of day** — opening float, cash-ins, expenses, expected-
   vs-counted close with carryover.
 * **Exchange terminal** — scan returned + given items; the tax-correct difference
   is collected or refunded.
 * **Campaign scenarios** — preset one-tap chips: “buy 3 pay 2”, “2nd item −50%”,
   percentage/fixed presets.
 * **Profit reports** — revenue, cost, margin, stock turnover, attribute breakdowns,
   discount usage.
 * **Store activity feed** — every sale, return, exchange and credit of the day 
   in one chronological stream.

#### Compatibility

 * HPOS (High-Performance Order Storage) compatible — and works on classic post 
   storage too.
 * Barcode sources: the `_barcode` meta, WooCommerce’s GTIN field (`_global_unique_id`),
   or the SKU (optionally kept in sync with the SKU on save).
 * Quick edit records a unit cost under `_wc_cog_cost` (Cost of Goods) and `_cost`.
   The free version only writes it — there are no margin or profit figures anywhere
   in free; profit reporting is a Pro feature.
 * Whether a POS sale reduces stock, and which order status POS sales get, are both
   settings.

#### Bundled libraries

All JavaScript libraries ship inside the plugin (nothing loads from a CDN):

 * JsBarcode 3.12.3 (MIT) — barcode label rendering
 * ZXing for JS 0.23.0 (Apache-2.0) — camera barcode decoding fallback
 * Chart.js 4.5.1 (MIT) — dashboard charts

### External services

This free version contacts no external service at all. Sales, customers, orders,
settings and reports are stored only in your own WordPress database, and the plugin
ships no licensing, analytics or telemetry code of any kind.

The separately distributed Pro version (obtained from erenlabs.net, not from WordPress.
org) uses the Freemius SDK (https://freemius.com) for licence validation, automatic
updates and optional usage tracking. On first activation Pro shows an explicit opt-
in screen; NOTHING is sent anywhere unless you click “Allow & Continue” — choosing“
Skip” keeps the plugin fully functional with no data leaving your site. If you opt
in, Freemius receives basic site data (site URL, WordPress and PHP versions, plugin
version, admin e-mail address) to provide licence checks, update notifications and
support. Your sales, customers, credit ledger and reports are never sent.
 Freemius
terms: https://freemius.com/terms/ Freemius privacy policy: https://freemius.com/
privacy/

## Screenshots

[⌊The sale terminal — scan, cart, customer, discount and payment in one screen.⌉⌊
The sale terminal — scan, cart, customer, discount and payment in one screen.⌉[

The sale terminal — scan, cart, customer, discount and payment in one screen.

[⌊The dashboard — today, this month, last 7 and 30 days, best sellers and payment
mix.⌉⌊The dashboard — today, this month, last 7 and 30 days, best sellers and payment
mix.⌉[

The dashboard — today, this month, last 7 and 30 days, best sellers and payment 
mix.

[⌊Orders — every POS sale and return in one sortable table.⌉⌊Orders — every POS 
sale and return in one sortable table.⌉[

Orders — every POS sale and return in one sortable table.

[⌊The return terminal — scan what comes back, refund and restock.⌉⌊The return terminal—
scan what comes back, refund and restock.⌉[

The return terminal — scan what comes back, refund and restock.

[⌊Barcode labels — print price labels straight from the counter.⌉⌊Barcode labels—
print price labels straight from the counter.⌉[

Barcode labels — print price labels straight from the counter.

[⌊Settings — tenders, label size and the store details printed on receipts.⌉⌊Settings—
tenders, label size and the store details printed on receipts.⌉[

Settings — tenders, label size and the store details printed on receipts.

[⌊Sale complete — order number, total, remaining stock and the receipt.⌉⌊Sale complete—
order number, total, remaining stock and the receipt.⌉[

Sale complete — order number, total, remaining stock and the receipt.

## Installation

 1. Upload the `eren-labs-retail-pos-for-woocommerce` folder to `/wp-content/plugins/`.
 2. Activate the plugin through the **Plugins** menu in WordPress.
 3. Open **Retail POS  Settings**, check your payment methods and store info, then 
    start selling from **Retail POS  Sell**.

WooCommerce must be installed and active. Staff need the WooCommerce manager capability(`
manage_woocommerce`) to open the POS screens.

## FAQ

### Does it work with my barcode scanner?

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.

### Can I scan barcodes with a phone or tablet camera?

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; 
the Labels screen takes a scanner gun or a typed code. Browsers only release the
camera on a secure connection, so the site has to be served over HTTPS.

### Do I need barcodes on my products?

No. Search by name or SKU and pick from the results. When you do want them, the 
Labels screen prints scannable barcode 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.

### Does a POS sale reduce stock?

Yes, and it is a setting if you would rather it did not. Stock reduction goes through
WooCommerce core, so lookup tables and integrations stay correct. Stock-managed 
lines are capped at the stock on hand while you build the cart, and after the sale
a snapshot shows what is left of everything you just sold.

### Are POS orders normal WooCommerce orders?

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.

### Does the price on the POS screen include tax?

Yes. Every figure the terminal quotes — each cart line, the subtotal and the Complete
sale button — is the gross, tax-inclusive amount the customer hands over, even if
your shop displays prices excluding tax elsewhere. WooCommerce calculates the tax
itself, so your rates and tax classes apply unchanged, and a percentage or fixed
discount scales the line totals proportionally so VAT stays right in a mixed-rate
basket.

### Can I split a payment between cash and card?

Not in the free version: one sale is settled with one payment method covering the
full total. Split payments, partial payment and a customer credit ledger are Pro
features.

### Can I print barcode labels for my products?

Yes. Scan or search products into the Labels queue, choose how many copies of each,
and print. EAN-13 and EAN-8 are auto-detected with a Code 128 fallback, and the 
label size in millimetres and what appears on the sticker are set in Settings.

### Can I print a receipt on a thermal printer?

The receipt opens as a narrow monospace window sized for thermal roll paper and 
prints through your browser’s own print dialog, so any printer your browser can 
print to — including a thermal roll printer — will do. There is no driver-level 
or ESC/POS printer integration in the plugin.

### Can my staff use it without giving them the run of the site?

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

### Can I take a return without the receipt?

Yes — returns are blind. Scan what the customer brings back, refund it, and stock
is restored automatically; 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.

### Does the POS work offline?

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.

### What languages does it come in?

Every string is translatable. The plugin ships its translation template only; translations
are served as WordPress.org language packs, and a switcher on the POS screens lets
each user read the POS in any language WordPress has a pack installed for, independently
of the rest of wp-admin. Anything else falls back to English, and right-to-left 
languages get an RTL layout.

### What happens to my data if I uninstall it?

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.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Eren Labs Retail POS for WooCommerce” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ erenlabs ](https://profiles.wordpress.org/erenlabs/)

[Translate “Eren Labs Retail POS for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/eren-labs-retail-pos-for-woocommerce)

### Interested in development?

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

## Changelog

#### 1.0.0

 * First public release.
 * Sale terminal: barcode scanning (scanner gun + phone camera), product search,
   cart with stock caps and inline quick edit, tax-correct manual discounts, configurable
   payment methods, printable receipt and a post-sale remaining-stock snapshot.
 * Blind (receiptless) returns that refund and restock automatically.
 * POS order list with filters and safe editing; dashboard with a calendar month-
   to-date total, daily revenue, payment breakdown and best sellers, all net of 
   returns.
 * Barcode label printing (JsBarcode) with a configurable label size and content.
 * Fully translatable: the plugin ships its translation template (`languages/eren-
   labs-retail-pos-for-woocommerce.pot`) and no catalogs of its own, so translations
   are served as WordPress.org language packs. A per-user language switcher lets
   each cashier read the POS in a different language from the rest of wp-admin, 
   with English as the fallback.
 * Built-in Help & support page. HPOS-compatible; works on classic order storage
   too.
 * Documents the Pro version’s Freemius licensing under “External services”; the
   free package ships no licensing or telemetry code at all.

## Meta

 *  Version **1.0.0**
 *  Last updated **3 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.0.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [barcode](https://wordpress.org/plugins/tags/barcode/)[point-of-sale](https://wordpress.org/plugins/tags/point-of-sale/)
   [pos](https://wordpress.org/plugins/tags/pos/)[receipt](https://wordpress.org/plugins/tags/receipt/)
   [retail](https://wordpress.org/plugins/tags/retail/)
 *  [Advanced View](https://wordpress.org/plugins/eren-labs-retail-pos-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/eren-labs-retail-pos-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/eren-labs-retail-pos-for-woocommerce/reviews/)

## Contributors

 *   [ erenlabs ](https://profiles.wordpress.org/erenlabs/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/eren-labs-retail-pos-for-woocommerce/)