=== Printcart Canvas – Canvas Print Designer & Edge-Wrap Preview for WooCommerce ===
Contributors: printcart
Tags: product designer, product customizer, web to print, print on demand, wall art
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 4.8.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Canvas print designer for WooCommerce: photo upload, 4 edge styles, live edge-wrap preview, print-quality check and a print-ready PDF per order.

== Description ==

Printcart Canvas – Canvas Print Designer & Edge-Wrap Preview for WooCommerce

**Printcart Canvas is a canvas print designer for WooCommerce** that lets customers upload photos, choose a size, layout and edge style, and preview the gallery wrap before they buy. Every photo gets an automatic print-quality check, prices are calculated on the server, and paid orders reach production with every canvas detail attached.

**Live demo:** try it as a customer on our demo store —

* [Classic Photo Canvas](https://wordpress.printcart.com/product/classic-photo-canvas/)
* [Portrait Canvas Print](https://wordpress.printcart.com/product/portrait-canvas-print/)
* [Square Canvas Print](https://wordpress.printcart.com/product/square-canvas-print/)
* [Panoramic Canvas Print](https://wordpress.printcart.com/product/panoramic-canvas-print/)
* [Deluxe Gallery Canvas](https://wordpress.printcart.com/product/deluxe-gallery-canvas/)

**Turn your WooCommerce store into an online canvas print shop.**

* Live edge-wrap preview in 4 edge styles: Image Wrap, Mirror Wrap, Blur Wrap and Solid Colour
* Colour, Black & White or Sepia, applied to the print file
* Optional extras: photo retouching, hanging hardware and back finish, priced per product
* 34 photo layouts, from one photo to six on a single canvas
* Starter photo: the designer opens with a sample photo the customer keeps or replaces
* Template Library: import a ready-made canvas product with sizes, depths and prices in one step
* Print-ready CMYK PDF for every order line, with trim, bleed and cut line
* Sizes grouped by shape, plus a custom size field
* Automatic print-quality (DPI) check before checkout
* Secure server-side pricing
* Print sheet calculated for every size and depth, with no template per size
* Artwork review queue with a quality verdict for every file
* Paid orders sent to Printcart automatically, with retry
* Guided product setup with one readiness verdict per product

= What is Printcart Canvas? =

Printcart Canvas is a WooCommerce plugin from Printcart built only for canvas and wall-art products. It adds a canvas designer to your product page, where customers upload photos, pick a size, layout and edge style, and see how the picture wraps around the frame. Unlike a general product designer, every part of it is built around canvas: frame depth, edge wrap, image resolution, print sheet and printer roll width.

= Perfect for selling =

* Gallery-wrapped canvas prints
* Photo canvas gifts: family, pets, weddings and travel
* Photo collage canvases with two to six photos
* Square, portrait, landscape and custom-size canvases
* Wall art and art reproductions for artists and galleries

= Who is it for? =

* **Canvas print shops** selling gallery-wrapped canvases online
* **Photo labs and print studios** adding canvas to an existing WooCommerce store
* **Print-on-demand and wall-art brands** that need accurate edge previews at scale
* **Printshops using Printcart** that want a dedicated canvas workflow

= Key features for customers =

* **See the edge before buying.** The canvas updates as the customer changes size or edge style, and Printcart renders an edge-wrap preview image of the finished piece.
* **Four edge styles:** Image Wrap (the photo continues around the sides), Mirror Wrap, Blur Wrap and Solid Colour in any colour, shown in the designer, the edge preview and the print file.
* **Colour, Black & White or Sepia.** The photo changes live, and the same colour is printed.
* **Extras with every canvas.** Hanging hardware (Sawtooth Hanger or Adhesive Hanging System), back finish (Classic Back or Dust Cover) and photo retouching, each priced from your pricing template.
* **34 photo layouts.** One photo or up to six, from full-bleed to hero-and-grid arrangements.
* **Edit from the cart.** Until the order is placed, the customer can reopen the design from the cart and the price updates with the size.
* **Easy photo placement.** Fit, fill or reset each photo, zoom, and replace any photo in its cell.
* **Honest quality feedback.** Every photo is rated on a five-step quality scale against the chosen size, so customers know before ordering whether a phone photo is sharp enough.

= Key features for store owners =

* **Your options, your products.** Sizes, depths and edge styles come from your Printcart printing option, including sizes grouped by shape and a custom size field.
* **DPI Profiles.** Set the minimum quality per product type and decide what happens below it. By default customers are warned, never blocked.
* **Prices you can trust.** Printcart calculates the price on the server and holds it as a single-use, 30-minute reservation, re-priced when the item is added to the cart. A price sent by the browser is never trusted.
* **No blank canvases.** A canvas cannot be added to the cart with an empty face unless you allow it.
* **Print sheets without templates.** The print sheet is calculated from the face size and depth. An optional production profile adds back-wrap and staple allowances and checks every sheet against your printer's roll width.
* **Canvas templates.** Save size, wrap, print sheet, defaults and pricing rules once and apply them to many products.
* **Setup that tells you what to do next.** Product Setup gives each product one readiness verdict and the next action to take.
* **Artwork queue.** Review every customer file with its quality verdict, then approve it or request a replacement.
* **Production-ready orders.** Each order line records size, depth, edge style, layout, preview and design file. Paid orders are sent to Printcart automatically, with a retry on the Orders screen, and sending can be turned off on the Connection screen.
* **Support-friendly.** Diagnostics checks the environment and connection and builds a support bundle with every credential removed. Store credentials never reach the browser.

= How it works =

**Step 1: Set up your canvas products (admin)**

* Install and activate the plugin, then connect your Printcart account under PC Canvas > Connection
* Link a WooCommerce product to its Printcart printing option
* Follow the readiness verdict in Product Setup until the product is ready to sell
* Choose your quality rules under DPI Profiles

**Step 2: The customer designs a canvas**

* The Printcart designer opens over your product page
* The customer uploads photos, picks a layout, a size and an edge style
* The preview and quality rating update as they go
* The customer adds the canvas to the cart and checks out

**Step 3: The order goes to production**

* Every canvas choice is saved on the WooCommerce order line
* The artwork appears in the Artwork queue with its quality verdict
* The paid order is sent to Printcart with its design file and print sheet

= Good to know =

* The preview is a rendered image of the finished canvas, not a rotatable 3D model.
* Multi-panel canvases (one picture split across several frames) are not available yet.
* A Printcart account is required. Preview renders use 1 Printcart token each and quality checks use 2 tokens per check, taken from the store's Printcart wallet, never from the customer. See External services below.

= Part of the Printcart family =

* Each Printcart plugin is a complete solution for one product niche. One store runs one Printcart solution. To run several Printcart solutions on one store, see [Printcart Connect](https://www.printcart.com/solutions#printcart-connect) (integration service, Printcart Advanced plan or above).
* Selling T-shirts, mugs, business cards or stickers as well? [Printcart Store](https://wordpress.org/plugins/printcart-integration/) is our web-to-print product designer for every other product type.
* Need a complete canvas or wall-art store built for you? See [solution.printcart.com](https://solution.printcart.com).

= Need help? =

* Ask on the [support forum](https://wordpress.org/support/plugin/printcart-canvas-print/)
* Email support@printcart.com

== Installation ==

1. Make sure WooCommerce is installed and active.
2. Install the plugin from **Plugins > Add New**, or upload the ZIP through
   **Plugins > Add New > Upload Plugin**, and activate it.
3. Go to **PC Canvas > Connection**. Enter your Printcart Store SID, Secret and
   Unauth Token, and run the connection test.
4. In your Printcart store, create the printing option for your canvas
   products: an edge style, optionally an edge depth, and a size. PC Canvas
   reads it from Printcart, so there is nothing to recreate in WordPress.
5. Open **PC Canvas > Products**, choose a product, and follow **Product
   Setup**: link the Printcart product and side, map the printing option, set
   the size and wrap depth, and bind a canvas template for the price.
6. When the product's readiness verdict says Ready, the button appears on its
   product page.
7. Review incoming designs under **PC Canvas > Orders** and **PC Canvas >
   Artwork**.

== Frequently Asked Questions ==

= Is Printcart Canvas free? =

The plugin is free. It needs a Printcart account, which powers the designer, the edge-wrap preview and the print-quality check. Preview renders use 1 Printcart token each and quality checks use 2 tokens per check, taken from the store's Printcart wallet. Your customers never pay for them.

= Do I need WooCommerce? =

Yes. Canvas prints are sold as WooCommerce products, and every canvas choice is saved on the WooCommerce order.

= Do I need Printcart Store (PC Designer) as well? =

No. Printcart Canvas is a standalone plugin with its own PC Canvas menu. Use [Printcart Store](https://wordpress.org/plugins/printcart-integration/) if you also sell T-shirts, mugs, business cards or other products.

= Which canvas edge styles are supported? =

Four: Image Wrap (the photo continues around the sides), Mirror Wrap, Blur Wrap and Solid Colour in any colour you choose. You decide which ones each product offers through its Printcart printing option.

= Is the preview a real 3D model? =

No. The canvas in the designer updates as the customer changes size or edge style, and Printcart renders an edge-wrap preview image of the finished canvas. It shows the face and the wrapped sides, but it is an image, not a model the customer can rotate.

= How does the print-quality (DPI) check work? =

Each photo is rated on a five-step scale against the canvas size: when it is uploaded, when the size changes, and again at add to cart. Zooming or moving a photo does not trigger a new paid check. On the DPI Profiles screen you set the minimum quality per product type and what happens below it. By default customers are warned but never blocked. If the store's token balance runs out, the rating is still shown as an estimate and no sale is blocked.

= Which sizes and depths can I sell? =

Any size and depth your Printcart printing option offers, including sizes grouped by shape (square, portrait, landscape) and a custom size field. Each side can be from 3 to 120 inches, and frame depth from 0.25 to 3 inches.

= Can customers put several photos on one canvas? =

Yes. Customers choose from 34 photo layouts, from a single photo to six photos on one canvas. You can also choose which of them each product offers, and which one it opens with. Multi-panel canvases, where one picture is split across several frames, are not available yet.

= How are prices calculated? =

Printcart calculates the price on the server from the customer's selection and holds it as a single-use, 30-minute reservation, re-priced when the item is added to the cart. A price sent by the browser is never trusted.

= What does my production team receive? =

Each order line records the size, depth, edge style, layout, preview image and design file. The print sheet is calculated for that size and depth, and the file appears in the Artwork queue with its quality verdict for approval.

= Are orders sent to Printcart automatically? =

Yes. Paid orders are sent to Printcart for production in the background, and any failed send can be retried from the Orders screen. You can turn automatic sending off on the Connection screen.

= What data is sent to Printcart? =

Only what each feature needs, such as the photo and canvas settings for a preview, or the order data and design file for production. Paid orders are sent by Printcart Connect, the library bundled with this plugin: it sends the whole order, including the customer's name, email, phone and addresses, so Printcart can produce and ship it. Every service and the data it receives is listed in the External services section.

= Is it compatible with WooCommerce HPOS? =

Yes. Order data is read and written through WooCommerce's HPOS-compatible order APIs.

= What happens if Printcart is unreachable? =

The customer sees a short message with a retry option, and checkout keeps working. If a product is not fully set up, the canvas designer stays hidden from customers and Product Setup shows what is missing.

= Can Printcart build a complete canvas store for me? =

Yes. Printcart also builds complete canvas and wall-art stores. See [solution.printcart.com](https://solution.printcart.com).

= How do I get support? =

Ask on the [support forum](https://wordpress.org/support/plugin/printcart-canvas-print/) or email support@printcart.com. The Diagnostics screen can build a support bundle with every credential removed, so you can share it safely.

== Screenshots ==

1. Four edge styles on the same photo: Image Wrap, Mirror Wrap, Blur Wrap and Solid Colour.
2. The canvas designer: Blur Wrap, Black & White, Sawtooth Hanger and Dust Cover chosen on a 20 x 16 in Deluxe canvas.
3. Starter photo: the designer opens with a sample photo and a live print-quality rating; the customer keeps it or uploads their own.
4. A canvas product page with the Design your canvas button.
5. After Process, the product page shows the saved design with its size, depth and edge style.
6. The cart lists every canvas choice, including image colour, hanging and back finish, with an Edit your design link.
7. On a phone: the same designer with a bottom tab bar and option sheets.
8. PC Canvas > Templates: import a ready-made canvas product from the Printcart template library.
9. Product Setup: every readiness check for a canvas product on one overview.
10. PC Canvas > Orders: canvas order lines with artwork, preview and print file status, and Download PDF.
11. Order detail: the artwork, the 3D preview, the selected canvas options and the print-ready PDF.
12. How the print sheet is built for a 20 x 16 in canvas with a 1.5 in frame: face, sides, back wrap, staple margin, trim and bleed.

== External services ==

This plugin connects your WooCommerce store to **Printcart**, a third-party
print-production service. It cannot work without it: the designer, preview,
print-quality check, pricing and order hand-off run on Printcart. Nothing is
sent to Printcart until you enter your Printcart credentials on PC Canvas >
Connection and link a product to Printcart.

Apart from paid orders (see "Automatic order sync" below), the plugin does not
send your customers' names, email addresses, phone numbers, billing addresses
or shipping addresses to Printcart. Like any server-to-server request, each
call also carries your server's IP address and the standard WordPress user
agent, which includes your site address and WordPress version.

**1. Printcart API: https://api.printcart.com/v1**

Called by your server, never by the browser. It is the only host that receives
your SID and Secret. The address can be changed with the "API base URL" field
on the Connection screen.

*In wp-admin, when you act.*

* Connection test: reads your store details and plan (`GET /stores/store-details`, `GET /account/wordpress-plan`) and checks the Unauth Token (`GET /products`).
* Product setup: looks up the Printcart product for a WooCommerce product by its WooCommerce product ID, reads products, sides, side geometry, 3D settings and production readiness, and reads your printing options (`/printing-options/resolve`, `/printing-options/{id}/wordpress`). No customer data.
* When you ask for it: creates a Printcart product from the WooCommerce product name (`POST /products`), writes side sizes (`PUT /sides/{id}`) and saves the 3D profile (edge style and depth).
* Test preview: uploads a test image and renders it, as below, at the same token cost.
* Support export: the same read-only checks plus `GET /integration/woocommerce/sync-health`. The export is shown to you to copy; it is not sent anywhere.

*In the background.* When a product's saved copy of its printing-option
fields is older than 15 minutes, WP-Cron reloads it
(`GET /printing-options/{id}/wordpress`) in its own request. No customer data.

*When a customer asks for a preview* (the designer asks automatically when the
customer changes an option the preview depends on):

* `POST /images`: a PNG snapshot of the design (up to 10 MB) and its file name, so Printcart can host it.
* `POST /3d/edge-preview`: the Printcart product and side IDs, the hosted image address, the edge style and colour, the output size, and the customer's size and depth.
* **Metered: 1 token per render** Printcart performs, from the store owner's wallet, billed to you. A render Printcart serves from its cache is free, but a repeat of the same design is not guaranteed to be served from cache. Refused on Printcart's free plan. Any visitor who opens the designer on an enabled product can trigger renders.

*When a customer's image is checked for print quality* (on upload, on a size
change and before add to cart):

* `POST /customizer/preflight/dpi`: the Printcart product and side IDs, the canvas size in pixels and inches, and each placed image's pixel dimensions (up to 100 images). No image and no image address are sent.
* **Metered: 2 tokens per request** from the store owner's wallet, billed to you. If the wallet is empty the customer keeps the local estimate and the designer stops asking for that session.

*When a customer confirms a design and adds it to the cart:*

* `POST /printing-options/{id}/calculate`: the quantity, canvas size and unit, and the customer's option choices, so Printcart can price the line.

*Automatic order sync, on by default.* The order is sent by Printcart Connect,
the small library bundled in `vendor/printcart-connect/` that every Printcart
plugin shares, so a site that runs more than one Printcart plugin sends each
order once. When an order is paid (WooCommerce status processing or completed)
it is sent in the background with `POST /integration/woocommerce/orders`,
never during checkout, and every later status change of that order is sent
too. Bank-transfer and cheque orders wait until you mark them paid. A failed
send is retried. The first time a store is connected, paid orders of the last
30 days are sent once as well. The library also reports which Printcart
plugins and versions run on the site (`PUT /v1/stores/apps`) and keeps the one
set of store keys for all of them.

* Order: order ID, number, key and status, currency, subtotal, shipping total, tax total, total, payment method and creation and modification dates.
* Customer: customer ID, name, company, email, phone, and the billing and shipping addresses.
* Every order line, designed or not: line ID, WooCommerce product and variation IDs, SKU, name, quantity, subtotal and total, and which Printcart plugin the line belongs to.
* Each canvas line also: the design file and preview addresses, and the canvas details (Printcart product, side and profile IDs, size, geometry, edge style, colour, depth, layout and panel count).
* **Not sent:** payment card or account details, and the customer note.
* Turn it off: set the option `printcart_connect_sync_orders` to `no`, or disconnect the store on Printcart > Connection (that also stops previews and quality checks). The "Send paid orders to Printcart automatically" box on PC Canvas > Connection only controls the plugin's own sender, which is used when the library is switched off. Retry sync on PC Canvas > Orders asks for a resend by hand.

Terms of Service: https://solution.printcart.com/tos/licenses-and-terms
Privacy Policy: https://printcart.com/privacy-policy

**2. Printcart designer: https://customizer.printcart.com**

When a customer clicks "Design your canvas", their browser loads the
Printcart designer in an iframe. Its address carries your shop address, your
store's Unauth Token, the Printcart product and side IDs, the WooCommerce
product and variation IDs, and a short description of the canvas. From then
on the designer is Printcart's application: it loads its own files from
Printcart, and the photos the customer uploads and the design they make go to
Printcart. The address can be changed with the `PC3D_APP_URL` constant.

The Unauth Token is readable by any visitor to an enabled product page, by
design. It cannot change your products' canvas geometry, but it is not a
read-only key: Printcart accepts it for some write requests, such as saving
design templates. It can appear in browser history, server logs and `Referer`
headers. You can rotate it from your Printcart account.

Terms of Service: https://solution.printcart.com/tos/licenses-and-terms
Privacy Policy: https://printcart.com/privacy-policy

**3. Printcart file hosting**

Uploaded design images and rendered previews are stored by Printcart and
served from the address Printcart returns for them. The customer's browser and
your wp-admin load those images from there.

Terms of Service: https://solution.printcart.com/tos/licenses-and-terms
Privacy Policy: https://printcart.com/privacy-policy

**Stored on your own site (not an external service)**

So that "See it on a wall" can open from the cart and the order, the plugin
keeps the customer's finished design picture (JPEG, at most 1200 px) in a
private folder of your own uploads directory (`uploads/pc3d-room-faces/`), under a random
file name. It is not added to the Media Library, has no public page and is not
sent to Printcart. It is deleted 7 days after it was made when no order uses it,
and when the plugin is deleted. A picture kept for an order stays as long as the
order. This only happens for products where the Show room preview setting is on.

API reference: https://docs.printcart.com/rest-api-reference/

== Changelog ==

= 4.8.2 =
* New: "See it on a wall" now also appears on the cart, the order confirmation, My Account > view order and the admin order, so a buyer or a merchant can check the finished canvas on a wall at its real size.
* New: the buyer's picture is kept on your own site for that button (a private folder, never sent to Printcart) and removed 7 days after upload when no order uses it.

= 4.8.1 =
* Improved: once the buyer finishes a design, the product page shows the price of that design. Before that, the price is marked as the price of the default size.
* Improved: each order line records the canvas size and frame depth the buyer chose.

= 4.8.0 =
* New: Printcart Connect. PC Canvas now uses the shared Printcart library for the store connection and for sending orders, so a site that runs more than one Printcart plugin keeps one set of keys and sends each order once. A "Printcart > Connection" screen appears under the PC Canvas menu.
* Changed: paid orders are sent by that library. It sends the whole order, including the customer's name, email, phone and addresses and every line, not only the canvas lines. External services lists exactly what is sent and how to turn it off.
* Changed: pasting a Store SID and secret on PC Canvas > Connection saves them in the shared connection; PC Canvas keeps its own copy too, so rolling back to 4.7.0 keeps working.

= 4.7.0 =
* New: "See it on a wall" on the product page shows the canvas, or the buyer's finished design, on a room wall to scale.

= 4.6.0 =
* New: choose from all 34 photo layouts per product, with a default layout and "See it on a wall" room preview for buyers.

= 4.5.9 =
* New: Image Wrap and Blur Wrap edges, image colour (Colour, Black & White, Sepia), retouching, hanging and back-finish options — priced and shown on every order.

= 4.5.8 =
* New: choose which photo layouts each canvas product offers, and an optional starter photo.

= 4.5.7 =

* New: PC Canvas → Templates. Browse the Printcart template library and import a ready-made canvas product (sizes, frame depths, edge styles and prices) in one click.
* New: Download PDF. Print-ready files for every order line, from PC Canvas → Orders, the order detail page and the WooCommerce order screen.
* New: canvas production profiles (Classic and Deluxe frame depth, back wrap, staple margin, cut line) and print output settings per store and per product.
* New: buyers see their design thumbnail and chosen size, frame depth, edge style and image quality on the product page, cart, checkout, order pages and order e-mails.
* New: buyers can edit a design from the cart; the cart line is updated and repriced automatically. Classic and block-based carts are supported.
* Improved: the 3D edge preview reflects the buyer's chosen size, frame depth and edge style, with a Refresh link on rendered previews.
* Improved: production-readiness checks run automatically in the background.
* Improved: custom sizes are checked against your print-roll limit before add to cart.
* Improved: clearer admin screens, labels and messages throughout.
* Improved: the designer loads from the standard Printcart address, with no extra setup.

= 4.3.6 =

Listing:

* New plugin icon and banner on the WordPress.org listing.
* The listing title, short description, Description and FAQ are rewritten to
  say what the plugin does in plain language: the edge-wrap preview, the 34
  photo layouts, the print-quality check and server-side pricing.
* "Tested up to" is now 7.1.2.

No plugin code changes. Nothing in the shopper or admin workflow is affected.

= 4.3.5 =

Security:

* The admin screen loader validates the request origin before it reads any
  other part of the request: the permission check, then the nonce for the
  screen the request names, then the screen query. A nonce issued for one PC
  Canvas screen can no longer load another.
* Admin actions are gated by one nonce check for both request transports,
  instead of a check chosen by transport.
* Every PC Canvas screen checks the user's permission before it verifies the
  nonce, so a nonce is never the only thing authorising a request.
* The Connection screen routes a submission by the form it names, so its two
  nonce checks cannot overlap.

= 4.3.4 =

Security:

* Admin view query values, including nested values, are sanitised immediately
  after WordPress decodes them and before any screen renders.

= 4.3.3 =

Security:

* Admin actions now verify permission and intent before request values are
  normalised into an explicit payload. Downstream helpers no longer read raw
  request globals.
* Values decoded from JSON are passed through WordPress core sanitizers before
  use, while encoded image URLs remain intact.
* Test artwork uploads now use the WordPress upload handler with PNG-only MIME
  validation and remove the temporary local copy after use.

Fixed:

* Malformed list values in admin actions are rejected safely instead of
  reaching scalar-only functions.

= 4.3.2 =

Fixed:

* The notice shown when WooCommerce is missing appeared on every admin screen
  for every user. It now appears only for someone who can activate plugins, and
  only on the Plugins and Dashboard screens.
* Saving Connection settings could fail with a PHP error if a field arrived as
  a list instead of a value.
* The dimension-unit notice no longer shows a close button that did nothing.
  The "Dismiss" link beside it is unchanged and still remembers.

Security:

* Form and URL values are sanitised where they are read, and data decoded from
  JSON is sanitised before it is used. No behaviour changes for merchants or
  shoppers.

= 4.3.1 =

Fixed:

* The "Send paid orders to Printcart automatically" switch on Connection
  could not be turned off in 4.3.0. It now stays off when you untick it.
* The dimension-unit notice now stays dismissed.
* The notice shown after a Product Setup action is no longer decoded twice.

Security:

* Each visitor is limited to 20 previews a minute (360 an hour) and 12 quality
  checks a minute (240 an hour), so the Printcart tokens they spend cannot be
  drained. Developers can change the limits with the `pc3d_buyer_rate_limits`
  filter.
* Database queries are fully prepared, and form values are sanitised as they
  are read.

Added:

* Compatibility with WooCommerce High-Performance Order Storage and the cart
  and checkout blocks.
* The product-page button's "Opening PC Canvas…" and "Try again" labels can be
  translated.

Changed:

* WordPress 6.5 or later is required.
* The External services section now lists the token cost of previews and
  quality checks, every field order sync sends, and how to turn it off.

Upgrading:

* If you turned automatic order sync off on 4.3.0, it stayed on. After
  updating, check the switch on PC Canvas > Connection.

= 4.3.0 =

Added:

* Paid canvas orders are sent to Printcart on their own, in the background
  and never during checkout. An order is sent once WooCommerce counts it as
  paid (processing or completed); a bank-transfer or cheque order waits until
  you mark it paid. A failed send is retried twice; after that, or at once
  when Printcart refuses the order (for example on a plan without order
  sync), the line shows "Sync failed" with the reason and the order gets a
  note. A line already sent is never sent twice.
* A switch on Connection, "Send paid orders to Printcart automatically". It
  is on by default and works with JavaScript off.
* A warning on Product Setup, Products, the product box and the Dashboard
  where PCDesigner - Web 2 Print Solution is still switched on for a canvas
  product. The product stays on sale through PC Canvas.

Changed:

* "Design Files" is now "Artwork" in the menu, titles, buttons and the
  Dashboard. Page addresses are unchanged.
* Retry sync on Orders and Order Detail runs the same code as the automatic
  send, and a failed retry now shows Printcart's reason.
* PC Canvas now notices PCDesigner - Web 2 Print Solution, only to keep it out
  of the way on canvas products. It never changes PC Designer's settings.

Fixed:

* With PCDesigner - Web 2 Print Solution also active, canvas products set up
  before 4.0.0 could open its old designer. On every product PC Canvas serves,
  PC Designer's "Start Design" button and its after-add-to-cart editor
  redirect are now kept out of the way; other products are unchanged.
* Every order was marked "needs review". The order line now carries the
  preview the plugin rendered for the canvas the buyer ordered.
* The cart showed the canvas price as a sale. A canvas line now shows one
  plain price. The amount charged is unchanged.
* Retry sync could not have reached Printcart. It now sends the whole order
  once.
* The Artwork check now accepts the formats Printcart produces (SVG, PNG, PDF,
  JPG, WEBP). Uploads are still PNG only.
* Order Detail listed optional fields as missing; they now read "Not
  applicable".
* Keyboard focus is now visible on Product Setup's section links and on
  breadcrumbs.

Security:

* Review statuses, the input hash and the product setup status posted by the
  browser at add-to-cart are ignored. A preview address from the browser is
  used only when the server has no matching render, and only if it is an
  https Printcart address.
* The order sent to Printcart carries no customer name, email, phone or
  address.

Upgrading:

* Automatic order sync is on after upgrading. To keep sending orders by hand,
  untick "Send paid orders to Printcart automatically" on PC Canvas >
  Connection.

= 4.2.0 =

* Added: admin screens load and save in place, with a status line; everything
  still works with JavaScript off.
* Added: Canvas templates hold a canvas's size, depth, edge, material, finish,
  frame, print sheet and price, and can be applied to products.
* Added: Product Setup in four steps after an Overview, with one next action.
* Added: store dimension unit and roll limit on Connection; Products views with
  counts and reasons.
* Changed: one readiness verdict everywhere; the menu is ordered by task.
* Changed: the Dashboard says "Connected" only after a passing connection test.
* Fixed: saving Product Setup with JavaScript off; the 3D edge template save
  redirect; a refused Price save showing a green notice; an invisible "Skip to
  section" link.
* Security: credentials appear only as their last 4 characters, on Connection
  only.
* Upgrading: pricing and 3D edge templates are merged into Canvas templates the
  first time a store manager opens a screen that reads them. Nothing is
  overwritten.

= 4.1.3 =

* Fixed: first-time guest shoppers could not add a designed canvas to the
  cart; they were told the price quote had expired.

= 4.1.2 =

* Fixed: canvas products could stop being orderable about 15 minutes after
  setup. The plugin now keeps a last-known-good copy of each product's
  Printcart field list and refreshes it in the background with WP-Cron.

= 4.1.1 =

* Fixed: on Product Setup > Mapping, "Save Mapping" and the "PC Canvas
  enabled" checkbox did nothing for a product whose Printcart field list had
  not been loaded.

= 4.1.0 =

* Added: automatic print-quality (DPI) checking, and a DPI Profiles screen.
  Each check costs the store owner 2 Printcart tokens; an empty wallet never
  blocks a sale.
* Added: Printing Options setup for a fresh store; mapping of style, material,
  finish, hanging hardware and add-ons; production sheet geometry; the
  print-roll limit; multi-panel canvases (not yet priced as a set).
* Added: a Connection setting, "Artwork", that refuses a blank canvas at
  add-to-cart. On by default.
* Changed: text domain is now `printcart-canvas-print`.
* Fixed: a finished design never reached the cart; every customer preview
  failed with "No artwork received"; uninstall left seven product settings
  behind.

Releases before 4.1.0 are not repeated here. 4.0.0 made PC Canvas a
standalone plugin with its own product-page button and designer overlay.

== Upgrade Notice ==

= 4.8.2 =
Adds the wall preview to the cart and the order. The buyer's finished picture is stored on your own site for it (not in the Media Library) and cleaned up automatically. No settings change; it follows Show room preview.

= 4.8.1 =
The product page now shows the price of the buyer's finished design. No settings change.

= 4.8.0 =
Orders are now sent by the shared Printcart Connect library, which sends the whole order including customer name, email, phone and addresses. Your keys carry over and nothing needs to be re-entered. Read External services before updating if that matters for your shop.

= 4.7.0 =
Adds a "See it on a wall" button to canvas product pages. It follows the Show room preview setting; nothing changes for products where it is off.

= 4.6.0 =
Product Setup now lists all 34 photo layouts with a default layout, and adds the room preview setting. Existing products keep their current layouts.

= 4.5.9 =
Adds the new edge and option choices to the designer and the order screens. Import the updated UK template to get them on a product; existing products are unchanged.

= 4.5.7 =
Adds the Template Library, one-click print-ready PDF downloads, design thumbnails across cart and orders, and editing designs from the cart. Recommended for all stores.

= 4.3.6 =

Listing only: new icon, banner and rewritten Description and FAQ. No code changes, nothing to do after updating.

= 4.3.5 =

Security hardening for the WordPress.org review: the admin screen loader checks permission and nonce before it reads a request, and every PC Canvas screen checks permission before nonce. No shopper workflow changes.

= 4.3.4 =

Security hardening for admin view queries. Encoded input is sanitised after decoding and before any PC Canvas screen renders.

= 4.3.3 =

Security hardening for WordPress.org review: request data is verified and sanitised at explicit boundaries, and test artwork uses the WordPress upload handler. No shopper workflow changes.

= 4.3.2 =

Housekeeping release. The "WooCommerce is missing" notice no longer shows on every admin screen to every user, saving Connection settings cannot fail with a PHP error, and input is sanitised where it is read. Nothing changes for shoppers or for how your orders reach Printcart.

= 4.3.1 =

Update now: the automatic order sync switch could not be turned off in 4.3.0. After updating, check "Send paid orders to Printcart automatically" on PC Canvas > Connection. Also limits how many token-spending previews and checks one visitor can run.

= 4.3.0 =

Paid canvas orders now reach Printcart automatically (switch it off on PC Canvas > Connection). Update if you also run PCDesigner - Web 2 Print Solution: canvas products could open its old designer instead of PC Canvas.

= 4.2.0 =

A rebuilt admin: in-place loading and saving, Canvas templates, and Product Setup in four steps. Your pricing and 3D edge templates are merged into Canvas templates automatically; the old data is kept.

= 4.1.3 =

Update now: first-time guest shoppers could not add a designed canvas to the cart; they were told the price quote had expired.

= 4.1.2 =

Update now: canvas products could stop being orderable about 15 minutes after setup, because the saved Printcart field list expired and customers were offered no sizes.

= 4.1.1 =

Update if you run 4.1.0. On products whose Printcart field list had not been loaded, Product Setup > Mapping could not be saved and PC Canvas could not be enabled there.

= 4.1.0 =

Adds print-quality (DPI) checking, multi-panel canvases, production sheet geometry and Printing Options setup for new stores. A blank canvas is now refused at add-to-cart; turn that off under PC Canvas > Connection > Artwork.
