Title: Dox POS for WooCommerce
Author: David Zoque
Published: <strong>Сентябрь 18, 2026-ж.</strong>
Last modified: Октябрь 13, 2026-ж.

---

Плагиндерди издөө

![](https://ps.w.org/dox-pos/assets/banner-772x250.png?rev=3734815)

![](https://ps.w.org/dox-pos/assets/icon-256x256.png?rev=3701238)

# Dox POS for WooCommerce

 Автору [David Zoque](https://profiles.wordpress.org/davidzoque/)

[Жүктөө](https://downloads.wordpress.org/plugin/dox-pos.0.50.0.zip)

 * [Кенен маалымат](https://ky.wordpress.org/plugins/dox-pos/#description)
 * [Сын-пикирлер](https://ky.wordpress.org/plugins/dox-pos/#reviews)
 *  [Орнотуу](https://ky.wordpress.org/plugins/dox-pos/#installation)
 * [Development](https://ky.wordpress.org/plugins/dox-pos/#developers)

 [Колдоо](https://wordpress.org/support/plugin/dox-pos/)

## Сүрөттөө

Dox POS adds a `/pos` page (`/caja` on a Spanish site) with its own sign-in screen.
From there you search products with their photo and stock, record the sales that
come in through WhatsApp or Instagram (each one is a WooCommerce order, so stock
goes down on its own), put products on layaway while the customer pays, record the
stock that arrives and keep the list of what has to be shipped.

It was born for the shop that sells through chat and ships by courier, where a phone
is enough. If you also have a physical store, turn on the **Counter**: a till screen
for a computer or a tablet with a barcode scanner, cash with the change worked out,
receipts on any printer and opening and closing the till.

It follows the country of the store (WooCommerce > Settings > General): the payment
methods it offers, the carriers it suggests and the default sales channels are the
ones of that country, and where WhatsApp is not the norm (the United States, for
instance) the messages to the customer open as text messages in the phone’s Messages
app instead. Everything can be renamed, turned off or added to in WooCommerce > 
Dox POS > Sales.

#### What it does

 * **Sell and put on layaway.** Channel, customer, city, shipping, discount and 
   payment method. A sale becomes a WooCommerce order, so the stock, the reports
   and the emails are the ones the store already had. A layaway holds the stock 
   and cancels itself if it is not paid within the deadline you set.
 * **Inventory.** Record what arrives with supplier, invoice and cost. It adds to
   the stock and warns you if the same invoice was already recorded from another
   phone.
 * **Orders.** The ones from the register and, if you want, the ones from the website,
   with their status and the WhatsApp message ready. Mark them shipped with a carrier
   and a tracking number, and the customer gets an email with the tracking link,
   using the store’s own email design.
 * **Products.** Create and edit products from the phone: photos (iPhone HEIC included,
   stored as WebP), sizes, colors, units per size, weight and size for shipping,
   and an automatic SKU that follows the one the store already uses.
 * **Shipping costs.** Set what shipping costs without opening wp-admin: a fixed
   price, by weight, free from an amount or store pickup, for the whole country 
   or for some of its regions. They are saved as WooCommerce shipping zones, so 
   the web checkout and the register charge the same.
 * **History.** Sales, the daily cash, the stock ledger and, with costs on, what
   each product leaves. Everything downloads as a real Excel file.
 * **Costs and profit.** A cost per unit for each product, stored in the WooCommerce
   cost field. Every purchase recalculates the weighted average cost, and every 
   sale freezes the cost in the order, so raising a cost later does not rewrite 
   past sales.
 * **The Counter, for a physical store.** Scan barcodes with any USB or Bluetooth
   scanner, or with the phone camera. Quick buttons for products without a barcode,
   keyboard shortcuts, sales on hold, a discount, and cash with suggested bills 
   and the change in large type, card or several payment methods in one sale.
 * **Till and receipts.** Open the till with its float and close it counting the
   drawer: the register tells you whether it matches. Every sale has a receipt for
   58 or 80 mm paper, printed from the browser on any printer, with a barcode that
   opens its return. Returns put the pieces back in stock.
 * **Roles for the store.** A Cashier role that sells and never sees the WordPress
   dashboard, and a Counter cashier role that only reaches the Counter. Discounts
   can be capped for them, and they close the till blind.
 * **No signal, no problem.** A sale recorded with the screen open and no connection
   is kept on the phone and goes in on its own when the connection is back, without
   duplicating.

The business assistant (today’s pending work, a store review, a chat, a forecast
and a daily summary by email) and the extras for a busy store (cashiers with a PIN,
several tills, a Stripe card reader, a customer screen, direct printing to Star 
and Epson receipt printers with the cash drawer, and a fuller receipt editor) live
in a separate add-on, Dox POS Pro. The register works fully without it.

#### Third-party libraries

The Counter’s camera scanner uses **ZXing** (zxing-js/library 0.21.3, Apache License
2.0) on browsers that cannot read barcodes on their own, such as Safari on the iPhone.
It is bundled in `assets/vendor/zxing` with its license, loaded only when someone
taps Camera, and never loaded from outside the site. Source code: https://github.
com/zxing-js/library

#### External services

The register can load its two fonts from **Google Fonts** (fonts.googleapis.com 
and fonts.gstatic.com). This is off by default: a fresh install uses the fonts of
the phone or the computer and the plugin does not connect to any outside service.

If you turn on the “Load the fonts from Google Fonts” switch in WooCommerce > Dox
POS > Brand, the browser of whoever opens the register requests those fonts from
Google, which receives their IP address and the usual data of a web request. With
the switch on, the settings page loads the fonts the same way while you pick one,
and when you type a font name the plugin asks Google whether a font by that name
exists. No store, order or customer data is ever sent, and turning the switch off
stops every request.

Google terms: https://policies.google.com/terms
 Google privacy: https://policies.
google.com/privacy

## Скриншоттор

[⌊Recording a sale: search on the left, the order on the right, with the channel
it came in through, the customer and how they pay.⌉⌊Recording a sale: search on 
the left, the order on the right, with the channel it came in through, the customer
and how they pay.⌉[

Recording a sale: search on the left, the order on the right, with the channel it
came in through, the customer and how they pay.

[⌊Inventory, with the supplier, the invoice and the cost of each unit.⌉⌊Inventory,
with the supplier, the invoice and the cost of each unit.⌉[

Inventory, with the supplier, the invoice and the cost of each unit.

[⌊Orders from the register and from the website, with their status and the WhatsApp
message ready.⌉⌊Orders from the register and from the website, with their status
and the WhatsApp message ready.⌉[

Orders from the register and from the website, with their status and the WhatsApp
message ready.

[⌊Creating a product from the phone: photos, sizes, colors and units.⌉⌊Creating 
a product from the phone: photos, sizes, colors and units.⌉[

Creating a product from the phone: photos, sizes, colors and units.

[⌊History: sales, daily cash and the stock ledger, with the profit of each sale.⌉⌊
History: sales, daily cash and the stock ledger, with the profit of each sale.⌉[

History: sales, daily cash and the stock ledger, with the profit of each sale.

[⌊The settings, with a live preview of the register.⌉⌊The settings, with a live 
preview of the register.⌉[

The settings, with a live preview of the register.

[⌊The Counter for a physical store: scan a barcode and the product goes into the
sale.⌉⌊The Counter for a physical store: scan a barcode and the product goes into
the sale.⌉[

The Counter for a physical store: scan a barcode and the product goes into the sale.

[⌊Charging cash at the Counter, with suggested bills and the change in large type.⌉⌊
Charging cash at the Counter, with suggested bills and the change in large type.⌉[

Charging cash at the Counter, with suggested bills and the change in large type.

[⌊The receipt editor, with its live preview.⌉⌊The receipt editor, with its live 
preview.⌉[

The receipt editor, with its live preview.

## Орнотуу

 1. Upload the `dox-pos` folder to `/wp-content/plugins/` and activate the plugin.
 2. Open `/pos` (`/caja` on a Spanish site) and sign in with an administrator, a shop
    manager or a user with the “Cashier” role.
 3. Set the brand, the colors, the address of the screen, the sales channels and the
    payment methods in WooCommerce > Dox POS. If you use other Dox Studio plugins, 
    the same page is in their shared menu: Dox Plugins > POS.

## FAQ.KG

### Do I need a barcode scanner or a receipt printer?

No. For selling through chat a phone is enough: you search the product by name or
SKU, record the sale and the order is in WooCommerce. In a physical store, the Counter
works with any USB or Bluetooth barcode scanner (it types like a keyboard) or with
the camera, and prints receipts from the browser on any printer.

### Does it change my stock twice?

No. The plugin never touches stock directly for a sale: it creates the WooCommerce
order and WooCommerce discounts the stock, exactly as it does with an order from
the website. Only stock entries add units, and voiding one takes them back.

### Can two people use it at the same time?

Yes. When a sale is recorded, the order reserves its units with the same mechanism
the WooCommerce checkout uses, so the last unit cannot be sold twice.

### Who can see the costs and the profit?

Administrators and shop managers. Someone with only the Cashier role sells and records
stock without seeing any cost. Costs can be turned off entirely in WooCommerce >
Dox POS > Products.

### Where does the cost of a product live?

In the WooCommerce cost field (“Cost of Goods Sold”), so it also shows in the WooCommerce
product editor and other plugins can read it. The plugin turns that feature on when
you save the settings with the costs switch on.

### How do I charge shipping by weight?

Open the register, tap the gear at the top and choose Shipping costs. Add a cost“
By weight” and write the ranges (“up to 1 lb, 6”, “up to 5 lb, 10”) and what a heavier
order pays. It is a regular WooCommerce shipping method, so the web checkout charges
the same, with no table rate plugin. Each product gets its weight and its size in
the Products tab of the register; a product with no weight counts as zero.

### I am not in Colombia. Does it fit my shop?

Yes. The register reads the store country from WooCommerce. A Colombian store gets
Nequi, the local carriers (Coordinadora, Servientrega, Interrapidísimo, TCC…) and
WhatsApp; a US store gets Zelle and Venmo, USPS, UPS, FedEx and DHL, and text messages
instead of WhatsApp; Mexico, Spain, Argentina, Chile, Peru and Ecuador have their
own carriers, and any other country starts with DHL, UPS and FedEx. Card, cash, 
bank transfer and cash on delivery are there everywhere, and you can rename, turn
off or add payment methods, carriers and channels in WooCommerce > Dox POS > Sales.

### Does it work with the block checkout and with HPOS?

Yes. Orders are created through the WooCommerce API, and the plugin declares compatibility
with High-Performance Order Storage and with the cart and checkout blocks.

## Сын-пикирлер

There are no reviews for this plugin.

## Contributors & Developers

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

Мүчөлөрү

 *   [ David Zoque ](https://profiles.wordpress.org/davidzoque/)

“Dox POS for WooCommerce” has been translated into 5 locales. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/dox-pos/contributors)
for their contributions.

[Translate “Dox POS for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/dox-pos)

### Interested in development?

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

## Өзгөртүүлөр

#### 0.50.0

 * New: store credit. Money a customer leaves with the shop to use later, kept under
   their phone number. Take a deposit in Sell (Without a product, Deposit to store
   credit), for example 50% of a made-to-order piece: it counts as a sale on the
   day the money comes in, with its payment method.
 * New: pay with store credit in Sell and at the Counter, all of it or part, together
   with another payment method or a split payment. That part does not count as a
   sale again, because it already counted when the money came in. The tax is still
   charged in full.
 * New: return pieces to store credit instead of giving money back, from the order
   detail (Orders) or at the Counter (Return, To store credit). The pieces go back
   to stock and the shop can keep an exchange fee (Settings, Sales, Store credit;
   0% by default, it can be changed on each return).
 * New: Reports, Store credit: what the shop owes in store credit, each customer’s
   balance and the history of every amount (where it came from and where it was 
   used), adjustments with a reason and “Load a balance” for balances kept in a 
   spreadsheet. The customer gets the balance by WhatsApp or text message, and the
   receipt shows the credit used and what is left.
 * New: sell something that is not in the catalog (Sell, Without a product): a made-
   to-order piece or a repair, with its own price. It does not touch the stock.
 * Fix: money given back at the Counter now comes off Sales, Daily cash and the 
   Dashboard (it only came off the till closing). Returned units no longer count
   as sold, and their cost no longer counts in the profit.

#### 0.49.1

 * Fix: Edit this product did not save a product whose sizes have different prices.
   With the Price field empty (which leaves the price of each size as it is), the
   register sent a price of 0 and the store answered “The price has to be greater
   than zero”, so nothing was saved. An empty Price goes again as “do not touch 
   the prices”; creating a product still asks for a price.
 * Fix: in that same case, the line under the cost said “The price is missing” (
   or “Enter a price and a cost”), as if a price had to be typed, and typing one
   replaces the price of every size. It now says that the sizes have different prices,
   from the lowest to the highest.

#### 0.49.0

 * Improved: in the product form (Edit this product, also when creating), the menu
   of each size says “Not offered” when the size does not share units and has none
   of its own, and “Own units” when it has some. Choosing “Not offered” on a size
   that shares takes it out of the group: it shows as sold out in the register and
   in the store, and the other sizes keep the units.
 * New: under each group of sizes that share units, “Actual size” chooses the size
   on the label of the piece (the `_dox_pos_real_size` meta of 0.46.0), for products
   with one color and for colors with their own shared units. A group that already
   had several actual sizes keeps them until you pick one, and a size that stops
   sharing keeps its mark (it only shows while it shares). Saving from the Pro chat
   does not touch it.
 * Fix: taking a size out of a group of shared units and putting another one in,
   in the same save, could copy the group’s units to the size that left. The group
   now only syncs the sizes that are still in it.
 * Fix: changing the number of shared units in the same save where a size joins 
   the group now writes its row in the stock movements (it was left out).
 * Fix: after saving a product opened from Inventory or Sell, the list showed it
   as it was before saving until you searched again.

#### 0.48.1

 * Fix: on the phone, tapping a product further down the Inventory or Sell list 
   opened it but sent the list back to the top (Safari on iPhone), so you had to
   scroll down again to find it. Now it opens in place and the list stays where 
   it was, also when you add a size.

#### 0.48.0

 * New: the Counter, for a physical store. Turn it on in WooCommerce > Dox POS >
   Sales and the register gets a Counter tab: scan barcodes with a USB or Bluetooth
   scanner or with the camera (ZXing on Safari), quick buttons for products without
   a barcode, keyboard shortcuts (F2 to F9), sales on hold and a discount.
 * New: charge cash with suggested bills and the change in large type, by card, 
   or split between several payment methods. Each sale is a WooCommerce order handed
   over at the counter, with the tax worked out from the store address.
 * New: open the till with its float and close it counting the drawer. The closing
   shows the sales by payment method and whether the cash matches, is short or is
   over.
 * New: receipts for 58 or 80 mm paper printed from the browser on any printer, 
   with a basic editor in Settings > Sales (top, bottom, logo, what it shows) and
   a barcode that opens the return of that sale.
 * New: returns at the Counter: scan the receipt, choose the pieces and give the
   money back in cash or by the same method. The pieces go back into stock.
 * New: a Counter cashier role that only reaches the Counter, a maximum discount
   for whoever does not manage the shop (Settings > Sales > Discounts, 0% turns 
   discounts off) and a blind till closing for them.

Full changelog: https://help.doxstudio.com/dox-pos-changelog/

## Мета

 *  Нуска **0.50.0**
 *  Акыркы жаңыртуу **8 саат мурун**
 *  Активдүү орнотуулар **Fewer than 10**
 *  WordPress нускасы ** 6.5 же андан жогору **
 *  Tested up to **7.1.3**
 *  PHP нускасы ** 8.0 же андан жогору **
 *  Тилдер
 * [English (US)](https://wordpress.org/plugins/dox-pos/), [Spanish (Argentina)](https://es-ar.wordpress.org/plugins/dox-pos/),
   [Spanish (Chile)](https://cl.wordpress.org/plugins/dox-pos/), [Spanish (Colombia)](https://es-co.wordpress.org/plugins/dox-pos/),
   [Spanish (Mexico)](https://es-mx.wordpress.org/plugins/dox-pos/) жана [Spanish (Spain)](https://es.wordpress.org/plugins/dox-pos/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/dox-pos)
 * Тег:
 * [barcode scanner](https://ky.wordpress.org/plugins/tags/barcode-scanner/)[inventory](https://ky.wordpress.org/plugins/tags/inventory/)
   [point-of-sale](https://ky.wordpress.org/plugins/tags/point-of-sale/)[pos](https://ky.wordpress.org/plugins/tags/pos/)
   [woocommerce](https://ky.wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://ky.wordpress.org/plugins/dox-pos/advanced/)

## Рейтинг

Азырынча эч кандай сын-пикир жок.

[Your review](https://wordpress.org/support/plugin/dox-pos/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/dox-pos/reviews/)

## Мүчөлөрү

 *   [ David Zoque ](https://profiles.wordpress.org/davidzoque/)

## Колдоо

Комментарийлер барбы? Жардам керекпи?

 [Колдоо форумун көрүү](https://wordpress.org/support/plugin/dox-pos/)