=== Barcode Man for WooCommerce ===
Contributors: gookit
Tags: barcode, label, woocommerce, product label, address label
Requires at least: 5.8
Tested up to: 7.1
Requires PHP: 7.4
WC requires at least: 5.0
WC tested up to: 11.1
Stable tag: 1.2.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Print product labels, barcode stickers and address labels from your WooCommerce products and orders. Supports EAN, UPC, Code 128, QR and more.

== Description ==

[Website](https://gookit.co/barcodeman/) | [Support](mailto:hi@gookit.co) | [Privacy](https://gookit.co/privacy/)

Barcode Man prints labels from your WooCommerce store. Design a label once, choose the products or orders you want, and get a PDF that fits your label paper.

Use it for price tags, shelf labels, barcode stickers for stock, hang tags and shipping address labels.

https://www.youtube.com/watch?v=s34KIEUG_c4

### Why choose this plugin?

Your labels fill themselves in from WooCommerce. Product names, prices and SKUs come straight from your store, so you never retype them and a price change shows up the next time you print. It works with the printer you already have, from an office printer with Avery sheets to a Zebra or Dymo label printer. Barcode Man never changes your products unless you confirm it, and the plugin adds nothing to your storefront pages.

### Plugin Features

#### Drag-and-drop label designer
Add text, barcodes, QR codes, images and shapes, and put them where you want. Link them to the product's name, description, price, regular price, SKU, weight, variation options or product image. Save your designs and reuse them.

#### Barcodes scanners can read
Print EAN-13, EAN-8, UPC-A, UPC-E, Code 128, Code 39, GS1-128, ISBN and QR codes. The barcode can hold the product's SKU, its product or variation ID, or a value you type.

#### Print many products at once
Choose products and variations, set how many labels each one needs, and print them all in one PDF.

#### Variations included
Each variation can have its own label, SKU and barcode, so sizes and colors are easy to tell apart.

#### Address labels from orders
Pick orders and print their shipping addresses on labels.

#### Scan and Print
Scan a product's barcode to add it to the print list. This is handy for restocking.

#### SKU generator
Create SKUs for products that don't have them, so every product can get a barcode. You see a preview first, and nothing is saved until you confirm.

#### Works with your label paper
Choose Avery, A4 or US Letter sheets, Dymo, Brother, Zebra or Rollo rolls, or enter your own label size.

### How it works

After you install the plugin, go to WooCommerce > Barcode Man, sign in to your Barcode Man account and allow it to access your store. You design and print labels on the Barcode Man website, which opens in a new browser tab.

== Installation ==

1. In your WordPress admin, go to Plugins > Add New, search for "Barcode Man", then install and activate it. You can also upload the `barcodeman-for-woocommerce` folder to `/wp-content/plugins/`.
2. Go to WooCommerce > Barcode Man.
3. Click "Connect this site to Barcode Man". You need to be a site administrator to do this.
4. Sign in to Barcode Man (or create an account), then approve the request on the WooCommerce screen.
5. Check that the account and site are right. After that, the "Open workspace" button takes you to Barcode Man.

If your site uses Plain permalinks, you'll be asked to change them first. An administrator can switch to "Post name" with one click.

== Frequently Asked Questions ==

= Which printers can I use? =

Any printer that can print a PDF. That includes regular printers with label sheets and label printers such as Dymo, Brother, Zebra and Rollo.

= Do I need a Barcode Man account? =

Yes. Your label designs are saved to your account. You'll need to confirm your email address before you connect a store.

= How much does it cost? =

The plugin is free to install and connect. You'll see the paid plans and prices before you subscribe. Plans are billed through Stripe, and you can change or cancel yours in Barcode Man.

= Will Barcode Man change my products? =

Only if you confirm a change in the SKU generator. Printing never changes your products.

= What does the plugin save on my site? =

An ID for your Barcode Man connection and a key that you can cancel at any time. WooCommerce creates the store access key and sends it straight to Barcode Man. The plugin doesn't keep a copy.

= How do I disconnect or remove Barcode Man? =

Click Disconnect on WooCommerce > Barcode Man and cancel any paid plan before you delete the plugin. Deleting the plugin on its own does not stop access or billing. To delete your account or data, email hi@gookit.co.

= Where can I get help? =

Email hi@gookit.co, or use the support form in Barcode Man.

== Screenshots ==

1. Connecting your store from WooCommerce > Barcode Man.
2. The label designer, with a barcode linked to the product SKU.
3. Choosing label paper: a custom roll, a roll with several labels across, or a sheet.
4. Choosing products and variations and setting how many labels to print.
5. Making address labels from orders. The address shown is an example.
6. Scan and Print, and the SKU generator's preview before anything is saved.

== External services ==

Barcode Man is a hosted label service run by Gookit. This WordPress plugin is
only a connector; the label designer runs in a separate browser tab at
https://woocommerce.barcodeman.app, with its API at
https://prod-bcm-api.barcodeman.app. The plugin does not bundle that workspace.
The services below are used by the connector, the hosted workspace or its
backend as described. Browser requests also disclose normal request metadata,
such as IP address and browser information, to the receiving service.

### WordPress connector: Barcode Man / Gookit

* Purpose: connect your WooCommerce store to your Gookit account, check the connection and remove workspace access when you disconnect.
* Data and timing: clicking Connect sends your store URL, connector namespace and distribution channel to the Barcode Man API. Reconnecting also sends the saved Site Account ID and plugin token, if present. Connection completion checks and cancellation send the one-time connection ID and secret. Opening the connector page checks the saved Site Account ID and plugin token; Disconnect sends them to remove access. When you approve WooCommerce's authorization screen, WooCommerce sends its REST API credentials directly to Barcode Man; this plugin does not keep a copy of those credentials.
* [Terms](https://gookit.co/terms/) | [Privacy Policy](https://gookit.co/privacy/)

### Hosted workspace and backend

These services run outside WordPress. Signing in, designing labels, choosing
products or orders, uploading images, generating labels and sending a support
form use the hosted workspace and its backend.

#### Barcode Man / Gookit — store data and labels

* Purpose: show your store data, save designs and produce labels.
* Data and timing: when you use the workspace, Barcode Man receives your signed-in account/session and selected Site Account ID. Depending on your actions, its API reads WooCommerce products, variations and orders, including customer names and billing/shipping addresses for address labels. Template designs, image uploads and label-generation requests are sent when you perform those actions. Product SKUs are written back only when you confirm the SKU operation. The printer setup test label uses sample product details and a sample picture that ship with the workspace; it does not read your products or request the picture from another service.
* [Terms](https://gookit.co/terms/) | [Privacy Policy](https://gookit.co/privacy/)

#### Supabase — account sign-in

* Purpose: create and authenticate your Gookit account and maintain your signed-in session.
* Data and timing: signing up or signing in sends your email address and password to Supabase. Password recovery sends your email address; setting a new password sends the new password. Session validation and refresh send the authentication/session credentials needed to keep you signed in. This applies when the hosted workspace's Supabase identity service is configured.
* [Terms](https://supabase.com/terms) | [Privacy Policy](https://supabase.com/privacy)

#### Google Fonts — label fonts

* Purpose: load fonts for the workspace and label designs.
* Data and timing: opening the workspace requests a stylesheet from fonts.googleapis.com with the font-family names and normal browser request metadata. Font files are requested from Google's font servers as the browser needs them, subject to its cache. Requests begin when the workspace opens, without waiting for you to select a font.
* [Google Terms](https://policies.google.com/terms) | [Google Privacy Policy](https://policies.google.com/privacy)

#### Google Firebase / Cloud Firestore — saved templates

* Purpose: store and retrieve label designs through the Barcode Man backend.
* Data and timing: creating, opening, editing, duplicating or deleting templates causes the backend to write or read template records in Cloud Firestore. Records include the associated store ID, template name, layout elements and design content, such as text and image links that you put in a template.
* [Google Cloud Terms](https://cloud.google.com/terms) | [Google Privacy Policy](https://policies.google.com/privacy) | [Firebase privacy information](https://firebase.google.com/support/privacy)

#### Bytescale — uploaded images

* Purpose: store and deliver images you upload for labels.
* Data and timing: uploading a template image sends the image bytes through Barcode Man to Bytescale, with a storage path containing the platform, Site Account ID and template ID. Displaying an uploaded image requests its Bytescale delivery URL from your browser, including normal request metadata.
* [Terms](https://www.bytescale.com/terms) | [Privacy Policy](https://www.bytescale.com/privacy)

#### DigitalOcean Spaces — generated labels

* Purpose: store generated PDFs and label preview images so you can view or download them.
* Data and timing: after label generation, the backend uploads PDF or PNG bytes with a storage path and metadata identifying the shop and generation job. The file contains whatever your design renders, which can include product details, barcodes, images and customer names/addresses for address labels. Viewing or downloading it requests the storage URL from your browser, including normal request metadata.
* [Terms](https://www.digitalocean.com/legal/terms-of-service-agreement) | [Privacy Policy](https://www.digitalocean.com/legal/privacy-policy)

#### Formspree — support form

* Purpose: deliver your support request to Gookit.
* Data and timing: submitting the workspace support form sends your name, email address, message, any attachments you select (up to five), platform, form version and your site home URL as the store identifier (instanceId) to Formspree. Include only information you want to share with support.
* [Terms](https://formspree.io/legal/terms-of-service/) | [Privacy Policy](https://formspree.io/legal/privacy-policy/)

#### Intercom — support identification

* Purpose: let Gookit support identify your store when you ask for help. No chat launcher is shown.
* Data and timing: when you open the Barcode Man Home screen and your store details have loaded, the workspace loads Intercom's messenger script and sends your site home URL (as the Intercom user ID), store name (falling back to your site hostname), WordPress admin email (as the contact email), platform (woocommerce), plan label and workspace version (v3) to Intercom, with normal browser request metadata.
* [Terms](https://www.intercom.com/legal/terms-and-policies) | [Privacy Policy](https://www.intercom.com/legal/privacy)

#### Sentry — diagnostics and session replay

* Purpose: diagnose errors and understand failures in the hosted workspace and backend.
* Data and timing: when a Sentry endpoint is configured, errors and diagnostic events can send error details, request/device metadata, store identity and interaction breadcrumbs. The hosted browser also requests the optional replay integration from browser.sentry-cdn.com. If that integration loads and replay is enabled, production sessions are sampled at 10% and sessions with errors at 100%. Replay can include visible page text, customer names/addresses and product or label-preview images: text and media are not fully masked. Not every session is recorded. The API and PDF worker also send diagnostics when their own Sentry endpoints are configured.
* [Terms](https://sentry.io/terms/) | [Privacy Policy](https://sentry.io/privacy/)

#### Stripe — WordPress.org subscriptions

* Purpose: manage paid plans for the WordPress.org connector.
* Data and timing: starting a subscription can create a Stripe customer with the Site Account ID as metadata, then sends the customer ID, plan price ID and checkout return URLs. Subscription status checks and cancellation use the customer/subscription identifiers. You enter your payment and billing details directly on Stripe's checkout page.
* [Terms](https://stripe.com/legal/ssa) | [Privacy Policy](https://stripe.com/privacy)

== Upgrade Notice ==

= 1.2.2 =
Cancelling an approved but unconfirmed connection now revokes its WooCommerce REST API key. Fixes connections when WordPress is installed in a subdirectory below the site homepage. If your WordPress Address differs from your Site Address on the same origin, you may need to reconnect once.

= 1.2.1 =
Fixes the SKU generator for variations that have no SKU of their own.

= 1.2.0 =
Maintenance release. No action needed.

= 1.1.0 =
Barcode Man is now under WooCommerce > Barcode Man, and you design and print on the Barcode Man website. Connect your site once after you update.

== Changelog ==

= 1.2.2 =
* Fixed: cancelling an approved but unconfirmed connection revokes only its own WooCommerce REST API key. A failed removal shows manual revocation instructions.
* Fixed: connections use the homepage URL when WordPress is installed in a subdirectory on the same origin. Sites with a separate frontend domain keep using the WordPress installation URL.
* Changed: existing connections on sites whose WordPress Address differs from the Site Address on the same origin may need to reconnect once.

= 1.2.1 =
* Fixed: the SKU generator now works for variations that have no SKU of their own.

= 1.2.0 =
* Maintenance release with no changes for WordPress.org sites.

= 1.1.0 =
* New: Barcode Man is now under WooCommerce > Barcode Man and opens in a new tab.
* New: the connection screen shows the web address where you sign in.
* Tested with WooCommerce 11.1.

= 1.0.2 =
* Fixed: updating from the 2022 version (1.0.1) now keeps the plugin active.

= 1.0.0 =
* New: connect your store with a Barcode Man account and design and print on the Barcode Man website.
* New: one-click fix for sites that use Plain permalinks.
* New: the plugin can be translated.

= 0.0.1 =
* Initial release.
