WooCommerce web store¶
Inventory staff put stock on the retail web store from the POS. The buttons belong to Stock Manager and System Manager. You never build a product in WordPress. You press a button in the POS and the store receives the product it describes.
Before you start¶
- Enable sync must be ticked on WooCommerce Settings. With it off the scheduled work stops: nothing is reconciled or audited. The buttons on the form still push.
- The record needs a price. A gun with no sell price and a model with no selling price are both refused.
- Photos belong on the record before you push. See Photos.
A model, or one specific gun¶
The POS builds three shapes of web product, and the shape decides which form you work from.
| What you are listing | Where you press the button | What the store gets |
|---|---|---|
| Ammunition, optics, parts, anything not a firearm | Item form | One product, SKU is the item code, stock is the quantity on hand |
| A firearm Item with Uniform Pricing ticked | Item form | One product for the model, stock is the number of free guns |
| A firearm Item without Uniform Pricing | Serial No form, one gun at a time | One product per gun, SKU is ITEM::SERIAL, stock is 1 or 0 |
The Item form's Send to WooCommerce works out the shape for you. On a per-serial firearm it pushes every Active serial at once and reports how many went. The Serial No form is the only place to list or delist one physical gun.
The four buttons appear on the Serial No form only for a per-serial firearm. On a uniform-priced firearm or a non-firearm they are hidden on purpose, because a per-gun product would double-count the model's stock.
The four buttons¶
| Button | Where | Shown when | What it does |
|---|---|---|---|
| Send to WooCommerce | Item and Serial No | Item: always. Serial No: status is Active | Creates or updates the product on the retail store |
| Delist from WooCommerce | Item and Serial No | A Woo Product ID is on the record | Asks you to confirm, then sets the product to draft and stock 0 |
| Send to Dealer Portal | Item and Serial No | Item: Publish to Dealer Portal is ticked. Serial No: status is Active | Creates or updates the product on the wholesale store |
| Delist from Dealer Portal | Item and Serial No | A Dealer Woo Product ID is on the record | Asks you to confirm, then drafts the dealer product |
Delisting is not a deletion. The product stays in WordPress as a draft at stock 0, and the POS records the take-down so no automatic job puts it back. Only a person pressing Send to WooCommerce again puts that record back on sale.
The two dealer buttons belong to the wholesale store. Read Dealer portal before using them.
What the store pulls¶
| On the store | Comes from |
|---|---|
| Product title | Item Name. A per-serial gun uses the Serial No's own item name |
| Description | Item description. A per-serial gun uses its own description when it has one |
| Regular price | Selling Price on the Item, or Sell Price on the Serial No |
| Sale price and dates | Sale Price with its from and to dates, retail store only |
| Photos | Gallery rows in order, then the single image field |
| Stock quantity | Calculated by the POS, see below |
| GTIN field | UPC |
| Caliber, Condition, Manufacturer, Model | The matching fields, as store attributes |
| Category | The Item Group |
Photos resolve in one order for a gun: the serial's gallery, then the serial's single image, then the Item's gallery, then the Item's image. Private uploads are made public as part of the push, because the store fetches them anonymously.
Note
After a product has been published once, staff edits made in WordPress to the title, description, images, attributes or categories are protected. Automatic jobs only ever rewrite price, sale price, stock and the product's published or draft state. A change you make to POS content reaches the store when you press Send to WooCommerce by hand.
How stock is kept in step¶
The POS owns the number, and it is not a raw warehouse count.
- Non-firearm: everything in the bins, less anything parked in customer custody, less units already sold on a web order that has not shipped.
- Uniform-priced firearm: Active serials that no web order holds, less any pending web order that owes a unit without naming a gun.
- Per-serial firearm: 1 when the gun is Active and free. 0 when it is reserved by a web order, held by another sales channel, no longer Active, or already archived as sold.
- Drop-shipped stock answers from the distributor feed instead. See Drop-shipping.
Stock is pushed automatically when stock moves. Submitting or cancelling a counter invoice, a stock ledger movement, and a change to a watched field all enqueue an update. A gun that a marketplace has sold is sent to draft as well as stock 0, because it has not been sold on this store and might come back.
When a gun sells¶
A gun sold at the counter or on the web store keeps its product page. The page stays published at stock 0 and gains the store's sold marking, so the URL keeps working and keeps its search ranking. The realized price is written only when the sale came through a web order, which is the one path that carries an exact line total.
Three cases end differently:
- A gun removed for any reason other than a sale is drafted, not archived.
- A gun that somebody already took off the store by hand stays down. The system will not republish it as a sold page.
- The dealer portal never keeps a sold page. Every exit there is a delist.
If the gun comes back, through a return or an undone disposition, the next push clears the sold marking and puts it back on sale.
The reconcile job¶
Every two hours a job compares the store against the POS and repairs what has drifted. It runs per store, and each store is gated on three things: Enable sync ticked, Reconcile frequency not set to Disabled, and enough time elapsed since the last run. The frequency choices are Every 2 Hours, Daily, Weekly and Disabled.
The job walks four passes.
- Item-level products. Compares stock, regular price and the sale price with its dates, and pushes what differs. A product with no price is drafted.
- Per-serial products on Active guns. Compares the stock figure, which is always 1 or 0.
- Listed guns that are no longer Active, plus guns held by another channel, consigned out or held as a customer transfer. These are taken down.
- Dealer store only. Catches items and guns still listed for dealers whose Item no longer has Publish to Dealer Portal ticked.
Every push this job makes is limited to the POS-owned fields, so it can never overwrite content curated in WordPress.
Checking the connection¶
The Status tab on WooCommerce Settings tells you whether the connection is working: when the POS last pushed, when the reconcile last completed, and what the last failure said in the store's own words. Test Connection on the toolbar reads one product back and changes nothing. See Integration settings for the whole form.
Troubleshooting¶
| Message you see | What it means | Fix |
|---|---|---|
| Not sent to WooCommerce: no sell price is set | The record would have listed at $0 | Set the price, then send it again. Any product already live is drafted at once |
| Not sent to WooCommerce: this product was taken off the store by hand | Somebody delisted this record deliberately | Open the Serial No and press Send to WooCommerce there |
| Not sent to WooCommerce: this is a customer's firearm held for an FFL transfer | The gun is not store property | Nothing to fix. It cannot be listed |
| Not sent to WooCommerce: this Item uses Uniform Pricing | You pressed the button on one serial of a model-level listing | List it from the Item form instead |
| Some guns were not sent | An Item-level push hit a guard on some serials | The message lists each serial and its reason. Fix those and send again |
| Not sent to WooCommerce (channel_reserved) | Another sales channel already sold this gun | Check GunBroker. The gun is spoken for |
For web orders arriving from the store, see Web orders.

