Product Sync
Brother POS provides two-way product synchronization with WooCommerce. Products created or updated in your WooCommerce store are pulled into Brother POS, and products from Brother POS appear in your online store.
- Plugin push / pull (recommended, default): the Brother POS plugin pulls the catalog out of Brother POS and writes each product into WooCommerce locally. This is the firewall-proof path — see Catalog Pull below.
- Legacy pull: Brother POS reaches into WooCommerce over the REST API to read products during the initial import. The rest of this page describes both.
How Product Sync Works
Product sync operates in two distinct phases:
1. Initial Import
The first sync after connecting WooCommerce performs a full import of your entire catalog:
- All WooCommerce product categories are synced first.
- Every published product is imported with its full details.
- Variable products and their variations are imported as parent-child relationships.
- Cannabis attributes are extracted from product metadata.
- Images are downloaded and associated with each product.
The initial import is automatically marked as complete once products have been successfully created. After that, Brother POS switches to incremental sync.
2. Incremental Sync
After the initial import, Brother POS performs periodic sync at the interval you configured (default: every 15 minutes):
- New products added to WooCommerce are created in Brother POS.
- Updated products have their cannabis attributes refreshed.
- Stock levels are updated for products with managed stock.
- A change detection system identifies discrepancies and an auto-corrector resolves them.
What Gets Synced
Product Fields
| WooCommerce Field | Brother POS Field | Notes |
|---|---|---|
| Name | Name | Only updated during initial import for existing products |
| SKU | SKU / Barcode | SKU is used for barcode scanning. Auto-generated as WOO-{id} if blank. |
| Regular / Sale Price | Price | Sale price takes priority if set |
| Description | Description | HTML tags are stripped automatically |
| Status (publish/draft) | Active | Published = Active, Draft = Inactive |
| Stock Quantity | Current Stock | Only when "Manage Stock" is enabled in WooCommerce |
| Weight | Weight Value | Converted to grams based on your configured weight unit |
| Images | Primary Image / Gallery | First image becomes primary; all images stored as gallery |
| Categories | Categories | Multi-category support with primary category detection |
Cannabis-Specific Fields
Brother POS extracts cannabis data from WooCommerce product metadata and attributes:
| Data Source | Fields Extracted |
|---|---|
| Product metadata | THC content and unit |
| Product metadata | CBD content and unit |
| Product metadata | Strain type (Indica, Sativa, Hybrid) |
| Product metadata | Brand name |
| Product metadata | Effects profile |
| Product metadata | Flavour profile |
| Product attributes | Fallback extraction from WooCommerce attributes (THC %, CBD %, Strain Type) |
| Product metadata | Terpene associations |
| Product metadata | Flavor associations |
| Product metadata | Medical benefit associations |
Brother POS checks product meta first (more reliable), then falls back to product attributes. If your WooCommerce store uses a cannabis plugin that stores data in custom meta fields, Brother POS will pick it up automatically.
Category Sync
Categories are synced before products to ensure proper categorization:
- WooCommerce categories are matched to Brother POS categories by name.
- If a matching category does not exist in Brother POS, it is created automatically.
- Parent-child category hierarchies are preserved.
- Products can belong to multiple categories (many-to-many relationship).
- Brother POS selects the most specific (deepest) non-marketing category as the primary category.
Marketing categories like "Staff Picks", "ON SALE", and "Mix & Match" are recognized and deprioritized when selecting the primary category.
Product Format Mapping
Brother POS automatically maps your WooCommerce category names to product formats:
| Category Name Contains | Product Format |
|---|---|
| flower, bud, strain | flower |
| pre-roll, joint | pre_roll |
| edible, gummy, chocolate | edible |
| oil, extract, concentrate | oil |
| vape, cartridge | vape |
| topical, cream, balm | topical |
| accessory, tool, pipe | accessory |
Variable Products and Variations
WooCommerce variable products are fully supported:
- The parent product is imported first with its base attributes.
- Each variation is imported as a child product linked to the parent.
- Variation names are built from their attributes (e.g., "3.5g - Premium").
- If a variation has no SKU in WooCommerce, Brother POS auto-generates one as
WOO-{parent_id}-{variation_id}. - Variations inherit their parent's categories automatically.
- Variations without their own images inherit the parent product's images.
Stock for Variable Products
- Individual variation stock levels are synced from WooCommerce.
- The parent product's stock is calculated as the sum of all variation stock levels.
- If the parent has no price set, Brother POS calculates a weighted average price from in-stock variations.
Tiered and Quantity Pricing
Brother POS supports two types of advanced pricing from WooCommerce:
Weight-Based Tiered Pricing
For weight-based products (typically cannabis flower), tiered pricing data is extracted from the weight_pricing metadata:
- Pricing template assignment (AA, AAA, AAAA, AAAA+)
- Price-per-gram tiers
- Tiered pricing matrices
Unit-Based Quantity Pricing
For unit-based products, quantity pricing is extracted from the _quantity_pricing_data meta field. Brother POS validates the pricing structure to ensure all quantities and prices are positive numbers.
Catalog Pull (Plugin Mode)
In the recommended plugin push / pull mode, Brother POS is the source of truth and the plugin writes your catalog into WooCommerce. This is how products reach your website without any REST API keys or firewall exceptions.
- Paginated and incremental. The first full import pulls the catalog in batches of 100. After that, only products changed since the last pull are sent, so large catalogs stay fast.
- Matched by SKU. Products are found or created by SKU. Re-running a sync never creates duplicates, and a timed-out import can be safely resumed by clicking Sync all products now again.
- Publish vs. draft is automatic. Active products publish; inactive products become drafts. If you turn on Hide out-of-stock from WooCommerce, an out-of-stock product is drafted so it drops off the storefront, then re-publishes on its own once restocked.
Category Icons
Category icons in Brother POS are carried through and set as the WooCommerce product category image. Only the handful of shared icons are imported (once each), so there is no bulk-import timeout, and the native term image renders on both classic and block themes.
Weight Presets and $0 Tiers
For weight-priced flower, Brother POS sends the exact weight buttons to show (for example 1g, 3.5g, 7g, 14g, 28g). This prevents WooCommerce from falling back to a default that shows phantom 56g/112g options.
Any weight priced at $0 in your pricing matrix — a placeholder or a tier you don't actually offer — is dropped before syncing. Left in, the smallest $0 tier would drag your storefront's price range down to "$0.00 – $X". A weight-priced product with no flat price also falls back to its smallest priced tier so the listing never shows $0.00.
Per-Category Sync Control
You can stop an entire category from reaching your website. Categories have a Sync to WooCommerce flag; products whose categories are all sync-disabled (for example mushrooms or nicotine lines) are excluded from the catalog. Products in at least one enabled category — and uncategorized products — still sync.
Image Handling: Upload vs. Link
The plugin offers two ways to handle product images, chosen with the Image handling setting:
| Mode | Behavior | Best for |
|---|---|---|
| Upload (default) | The image is downloaded into your WordPress media library once, if the product has no image yet. | Sites with plenty of resources and no image-import trouble. |
| Link to URLs | The plugin stores the Brother POS image URLs and renders them directly — no download, no thumbnail resizing. | Weaker hosts where a full catalog would otherwise time out importing images. |
On budget hosts, side-loading hundreds of images can stall the import. Switch to Link to URLs so the whole catalog imports in one pass. Images update automatically whenever a URL changes in Brother POS.
Only absolute, public image URLs are sent — broken relative paths and inline data: values are filtered out so they never surface as import failures.
Pushing Products to WooCommerce
In legacy pull mode, Brother POS can push individual products to WooCommerce over the REST API:
- Navigate to Admin > Products and open a product.
- If the product has a WooCommerce product ID, changes can be pushed.
- The WooCommerce Product Push job handles sending updates.
- Fields pushed include name, price, description, stock, and status.
In plugin push / pull mode, the plugin pulls the catalog itself, so the separate REST push (and REST inventory push) is switched off. This also avoids mass failures after a WordPress site rebuild, where the old WooCommerce product IDs no longer exist.
Some Hosts Block Product Updates and Deletes
A few hosts and firewalls block the HTTP PUT and DELETE methods at the server level, so legacy REST updates and deletes come back 403 even with a valid Read/Write key (while creates still succeed). When Brother POS sees a 403 on a PUT or DELETE, it automatically retries the request tunneled through a POST with an X-HTTP-Method-Override header, which WordPress accepts. This is silent and only kicks in on hosts that block those methods.
Force-Deleting Products
When Brother POS removes a product from WooCommerce, it force-deletes it rather than moving it to the trash, so the SKU is freed immediately and a later re-sync can recreate it cleanly.
Some fields are only synced in one direction. Cannabis attributes (THC, CBD, strain type, terpenes, effects) always sync from WooCommerce to Brother POS during a legacy import. In plugin mode, Brother POS is the source of truth and sends these attributes out to your website instead.
Change Detection and Auto-Correction
Brother POS includes a built-in change detection system that:
- Detects discrepancies between WooCommerce and Brother POS product data.
- Logs detected changes for review.
- Auto-corrects certain discrepancies based on your configuration.
This ensures data consistency over time, even if manual edits are made on either side.
Monitoring Sync Status
Every product imported from WooCommerce has a sync status:
| Status | Meaning |
|---|---|
synced | Product is up to date |
pending | Product has changes waiting to sync |
error | Last sync attempt failed |
You can view sync status and recent sync logs on the Health Monitor page.
Common Questions
What happens if I delete a product in WooCommerce?
The product is not automatically deleted in Brother POS. A separate Product Deletion Job handles cleanup based on your configuration. By default, deleted WooCommerce products are deactivated (not deleted) in Brother POS to preserve sales history.
Can I edit synced products in Brother POS?
Yes. After the initial import, Brother POS does not overwrite product names, prices, or SKUs during regular sync. Cannabis attributes (THC, CBD, strain type) continue to sync from WooCommerce.
What if a product has no SKU in WooCommerce?
Brother POS generates a unique SKU using the pattern WOO-{woocommerce_id}. For variations without SKUs, the pattern is WOO-{parent_id}-{variation_id}.
Why are some products missing after import?
Check the Health Monitor for failed records. Common causes include validation errors (missing required fields), duplicate SKUs, or products without categories.
What's Next?
- Plugin Sync (Firewall-Proof) -- How the plugin pulls your catalog without API keys.
- Order Sync -- Learn how WooCommerce orders are imported for fulfillment.
- Inventory Sync -- Understand how stock pushes keep your online store accurate.
- Freebie Sync -- Sync freebie campaigns to your WooCommerce store.
- Health Monitor -- Monitor sync health and troubleshoot errors.