plugin-icon

Eren Labs Retail POS for WooCommerce

投稿者: erenlabs·
Point of sale for WooCommerce: sell in store with a barcode scanner or phone camera. A POS system with receipts, returns and barcode labels.
バージョン
1.0.0
最終更新日時
Aug 13, 2026
Eren Labs Retail POS for WooCommerce

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 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/

無料有料プラン
インストールすることで、WordPress.com の利用規約サードパーティプラグイン利用規約に同意したことになります。
最大テスト回数
WordPress 7.0.4
このプラグインをダウンロードして、 サイトに使用できます。