{"id":370492,"date":"2026-09-24T09:12:49","date_gmt":"2026-09-24T09:12:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/printcart-canvas-print\/"},"modified":"2026-09-24T09:12:41","modified_gmt":"2026-09-24T09:12:41","slug":"printcart-canvas-print","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/printcart-canvas-print\/","author":20452992,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"4.3.5","stable_tag":"4.3.5","tested":"7.1.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Printcart Canvas Print","header_author":"Printcart","header_description":"Canvas-print designer for WooCommerce. Adds a \"Customize with PC Canvas\" button to the product page that opens the Printcart-hosted designer with an edge-wrap preview. Requires a Printcart account.","assets_banners_color":"427393","last_updated":"2026-09-24 09:12:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/printcart.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"4.3.5":{"tag":"4.3.5","author":"printcart","date":"2026-09-24 09:12:41","revision":3710939}},"upgrade_notice":{"4.3.5":"<p>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.<\/p>","4.3.4":"<p>Security hardening for admin view queries. Encoded input is sanitised after decoding and before any PC Canvas screen renders.<\/p>","4.3.3":"<p>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.<\/p>","4.3.2":"<p>Housekeeping release. The &quot;WooCommerce is missing&quot; 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.<\/p>","4.3.1":"<p>Update now: the automatic order sync switch could not be turned off in 4.3.0. After updating, check &quot;Send paid orders to Printcart automatically&quot; on PC Canvas &gt; Connection. Also limits how many token-spending previews and checks one visitor can run.<\/p>","4.3.0":"<p>Paid canvas orders now reach Printcart automatically (switch it off on PC Canvas &gt; Connection). Update if you also run PCDesigner - Web 2 Print Solution: canvas products could open its old designer instead of PC Canvas.<\/p>","4.2.0":"<p>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.<\/p>","4.1.3":"<p>Update now: first-time guest shoppers could not add a designed canvas to the cart; they were told the price quote had expired.<\/p>","4.1.2":"<p>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.<\/p>","4.1.1":"<p>Update if you run 4.1.0. On products whose Printcart field list had not been loaded, Product Setup &gt; Mapping could not be saved and PC Canvas could not be enabled there.<\/p>","4.1.0":"<p>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 &gt; Connection &gt; Artwork.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3710939,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3710939,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3710939,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3710939,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3710939,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["4.3.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3710939,"resolution":"1","location":"assets","locale":"","width":1200,"height":1290},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3710939,"resolution":"2","location":"assets","locale":"","width":1200,"height":850},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3710939,"resolution":"3","location":"assets","locale":"","width":1200,"height":1290},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3710939,"resolution":"4","location":"assets","locale":"","width":1200,"height":1785},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3710939,"resolution":"5","location":"assets","locale":"","width":1200,"height":1125},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3710939,"resolution":"6","location":"assets","locale":"","width":1200,"height":800}},"screenshots":{"1":"Dashboard: connection status, store readiness and the issues that need attention.","2":"Products: every canvas product with its readiness verdict and next action.","3":"Product Setup: the overview and setup steps for one canvas product.","4":"Artwork: the design files customers produced, with their file checks.","5":"Connection: Printcart credentials, the connection test and the \"Send paid orders to Printcart automatically\" switch.","6":"The customer's view: the Printcart designer in a full-screen overlay on the product page."}},"plugin_section":[],"plugin_tags":[282455,13075,45085,24228,286],"plugin_category":[45],"plugin_contributors":[238596],"plugin_business_model":[],"class_list":["post-370492","plugin","type-plugin","status-publish","hentry","plugin_tags-canvas-print","plugin_tags-print-on-demand","plugin_tags-product-designer","plugin_tags-web-to-print","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-printcart","plugin_committers-printcart"],"banners":{"banner":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/banner-772x250.png?rev=3710939","banner_2x":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/banner-1544x500.png?rev=3710939","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/icon.svg?rev=3710939","icon":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/icon.svg?rev=3710939","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/screenshot-1.png?rev=3710939","caption":"Dashboard: connection status, store readiness and the issues that need attention."},{"src":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/screenshot-2.png?rev=3710939","caption":"Products: every canvas product with its readiness verdict and next action."},{"src":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/screenshot-3.png?rev=3710939","caption":"Product Setup: the overview and setup steps for one canvas product."},{"src":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/screenshot-4.png?rev=3710939","caption":"Artwork: the design files customers produced, with their file checks."},{"src":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/screenshot-5.png?rev=3710939","caption":"Connection: Printcart credentials, the connection test and the \"Send paid orders to Printcart automatically\" switch."},{"src":"https:\/\/ps.w.org\/printcart-canvas-print\/assets\/screenshot-6.png?rev=3710939","caption":"The customer's view: the Printcart designer in a full-screen overlay on the product page."}],"raw_content":"<!--section=description-->\n<p>Printcart Canvas Print adds a <strong>Customize with PC Canvas<\/strong> button to the\nWooCommerce add-to-cart form of the products you enable. The button opens the\nPrintcart-hosted designer in a full-screen overlay. There the customer picks a\nsize, an edge style and a depth, designs the canvas, and sees an edge-wrap\npreview rendered by Printcart before adding it to the cart.<\/p>\n\n<p>The plugin is the WooCommerce side of the Printcart service. The designer, the\npreview renderer, the print-quality check, the pricing and the order hand-off\nall run on Printcart, so a Printcart account is required. \"External services\"\nbelow lists exactly what is sent and when.<\/p>\n\n<p><strong>What \"3D preview\" means here<\/strong><\/p>\n\n<p>Printcart returns a flat preview <strong>image<\/strong> of the wrapped canvas, a lit and\nangled mockup. It is not an interactive or rotatable 3D model.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>A \"Customize with PC Canvas\" button in the WooCommerce add-to-cart form, for\nclassic templates and the add-to-cart form block. It is shown only on\nproducts that are enabled and linked to a Printcart product and side. Other\nproducts get no PC Canvas markup at all.<\/li>\n<li>A full-screen overlay hosting the Printcart designer, with an origin-checked\nmessage bridge. The launch configuration is fetched only after the customer\nclicks.<\/li>\n<li>Five edge styles: image wrap, mirror, blur, blurred mirror and solid colour.<\/li>\n<li>Edge style, depth and size come from your own Printcart printing option,\nincluding its conditional fields, and are saved on the WooCommerce order.<\/li>\n<li>Cart prices are calculated by Printcart on the server and held as a\nsingle-use reservation. A price sent by the browser is never trusted.<\/li>\n<li>Print-quality (DPI) checking of the customer's image for the chosen size,\nwith a DPI Profiles screen to set the minimum quality and what happens below\nit.<\/li>\n<li>Paid canvas orders are sent to Printcart in the background. You can turn\nthis off on PC Canvas &gt; Connection.<\/li>\n<li>A PC Canvas admin menu: Dashboard, Products, Product Setup, Printing Options,\nCanvas Templates, DPI Profiles, Orders, Artwork, Connection and Diagnostics.\nEvery screen works with JavaScript turned off.<\/li>\n<li>Product Setup owns the canvas geometry and shows one readiness verdict, with\nthe next action, for each product.<\/li>\n<\/ul>\n\n<p><strong>Requirements<\/strong><\/p>\n\n<ul>\n<li>WooCommerce, installed and active.<\/li>\n<li>A Printcart account, with its Store SID and Secret (used by your server) and\nits Unauth Token (used to load the designer), entered on PC Canvas &gt;\nConnection.<\/li>\n<li>A paid Printcart plan for previews and order sync. On Printcart's free plan\nPrintcart refuses the preview render and the order sync with \"Upgrade your\naccount\". Print-quality checks and previews spend tokens from the store\nowner's Printcart wallet; see \"External services\".<\/li>\n<\/ul>\n\n<p><strong>PC Designer<\/strong><\/p>\n\n<p>PC Canvas does not need PCDesigner - Web 2 Print Solution or any other\ndesigner plugin. If PC Designer is also active, PC Canvas reads only whether it\nis switched on for a canvas product, so that it can keep PC Designer's \"Start\nDesign\" button and editor redirect out of the way on that product and warn you.\nIt never changes PC Designer's settings or data.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects your WooCommerce store to <strong>Printcart<\/strong>, a third-party\nprint-production service. It cannot work without it: the designer, preview,\nprint-quality check, pricing and order hand-off run on Printcart. Nothing is\nsent to Printcart until you enter your Printcart credentials on PC Canvas &gt;\nConnection and link a product to Printcart.<\/p>\n\n<p>The plugin never sends your customers' names, email addresses, phone numbers,\nbilling addresses or shipping addresses to Printcart. Like any server-to-server\nrequest, each call also carries your server's IP address and the standard\nWordPress user agent, which includes your site address and WordPress version.<\/p>\n\n<p><strong>1. Printcart API: https:\/\/api.printcart.com\/v1<\/strong><\/p>\n\n<p>Called by your server, never by the browser. It is the only host that receives\nyour SID and Secret. The address can be changed with the \"API base URL\" field\non the Connection screen.<\/p>\n\n<p><em>In wp-admin, when you act.<\/em><\/p>\n\n<ul>\n<li>Connection test: reads your store details and plan (<code>GET \/stores\/store-details<\/code>, <code>GET \/account\/wordpress-plan<\/code>) and checks the Unauth Token (<code>GET \/products<\/code>).<\/li>\n<li>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 (<code>\/printing-options\/resolve<\/code>, <code>\/printing-options\/{id}\/wordpress<\/code>). No customer data.<\/li>\n<li>When you ask for it: creates a Printcart product from the WooCommerce product name (<code>POST \/products<\/code>), writes side sizes (<code>PUT \/sides\/{id}<\/code>) and saves the 3D profile (edge style and depth).<\/li>\n<li>Test preview: uploads a test image and renders it, as below, at the same token cost.<\/li>\n<li>Support export: the same read-only checks plus <code>GET \/integration\/woocommerce\/sync-health<\/code>. The export is shown to you to copy; it is not sent anywhere.<\/li>\n<\/ul>\n\n<p><em>In the background.<\/em> When a product's saved copy of its printing-option\nfields is older than 15 minutes, WP-Cron reloads it\n(<code>GET \/printing-options\/{id}\/wordpress<\/code>) in its own request. No customer data.<\/p>\n\n<p><em>When a customer asks for a preview<\/em> (the designer asks automatically when the\ncustomer changes an option the preview depends on):<\/p>\n\n<ul>\n<li><code>POST \/images<\/code>: a PNG snapshot of the design (up to 10 MB) and its file name, so Printcart can host it.<\/li>\n<li><code>POST \/3d\/edge-preview<\/code>: 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.<\/li>\n<li><strong>Metered: 1 token per render<\/strong> 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.<\/li>\n<\/ul>\n\n<p><em>When a customer's image is checked for print quality<\/em> (on upload, on a size\nchange and before add to cart):<\/p>\n\n<ul>\n<li><code>POST \/customizer\/preflight\/dpi<\/code>: 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.<\/li>\n<li><strong>Metered: 2 tokens per request<\/strong> 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.<\/li>\n<\/ul>\n\n<p><em>When a customer confirms a design and adds it to the cart:<\/em><\/p>\n\n<ul>\n<li><code>POST \/printing-options\/{id}\/calculate<\/code>: the quantity, canvas size and unit, and the customer's option choices, so Printcart can price the line.<\/li>\n<\/ul>\n\n<p><em>Automatic order sync, on by default.<\/em> When an order that contains a designed\ncanvas line is paid (WooCommerce status processing or completed), the order is\nsent in the background with <code>POST \/integration\/woocommerce\/orders<\/code>, never\nduring checkout. Bank-transfer and cheque orders wait until you mark them\npaid. A failed send is retried twice.<\/p>\n\n<ul>\n<li>Order: order ID and number, status, currency, total, subtotal, shipping total, tax total and creation date.<\/li>\n<li>Each canvas line: line ID, WooCommerce product and variation IDs, product name, quantity, 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).<\/li>\n<li><strong>Not sent:<\/strong> customer name, email, phone, billing or shipping address, customer ID, payment details, order key and customer note.<\/li>\n<li>Turn it off: untick \"Send paid orders to Printcart automatically\" on PC Canvas &gt; Connection. Retry sync on PC Canvas &gt; Orders still sends a line by hand.<\/li>\n<\/ul>\n\n<p>Terms of Service: https:\/\/solution.printcart.com\/tos\/licenses-and-terms\nPrivacy Policy: https:\/\/printcart.com\/privacy-policy<\/p>\n\n<p><strong>2. Printcart designer: https:\/\/customizer.printcart.com<\/strong><\/p>\n\n<p>When a customer clicks \"Customize with PC Canvas\", their browser loads the\nPrintcart designer in an iframe. Its address carries your shop address, your\nstore's Unauth Token, the Printcart product and side IDs, the WooCommerce\nproduct and variation IDs, and a short description of the canvas. From then\non the designer is Printcart's application: it loads its own files from\nPrintcart, and the photos the customer uploads and the design they make go to\nPrintcart. The address can be changed with the <code>PC3D_APP_URL<\/code> constant.<\/p>\n\n<p>The Unauth Token is readable by any visitor to an enabled product page, by\ndesign. It cannot change your products' canvas geometry, but it is not a\nread-only key: Printcart accepts it for some write requests, such as saving\ndesign templates. It can appear in browser history, server logs and <code>Referer<\/code>\nheaders. You can rotate it from your Printcart account.<\/p>\n\n<p>Terms of Service: https:\/\/solution.printcart.com\/tos\/licenses-and-terms\nPrivacy Policy: https:\/\/printcart.com\/privacy-policy<\/p>\n\n<p><strong>3. Printcart file hosting<\/strong><\/p>\n\n<p>Uploaded design images and rendered previews are stored by Printcart and\nserved from the address Printcart returns for them. The customer's browser and\nyour wp-admin load those images from there.<\/p>\n\n<p>Terms of Service: https:\/\/solution.printcart.com\/tos\/licenses-and-terms\nPrivacy Policy: https:\/\/printcart.com\/privacy-policy<\/p>\n\n<p>API reference: https:\/\/docs.printcart.com\/rest-api-reference\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Make sure WooCommerce is installed and active.<\/li>\n<li>Install the plugin from <strong>Plugins &gt; Add New<\/strong>, or upload the ZIP through\n<strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>, and activate it.<\/li>\n<li>Go to <strong>PC Canvas &gt; Connection<\/strong>. Enter your Printcart Store SID, Secret and\nUnauth Token, and run the connection test.<\/li>\n<li>In your Printcart store, create the printing option for your canvas\nproducts: an edge style, optionally an edge depth, and a size. PC Canvas\nreads it from Printcart, so there is nothing to recreate in WordPress.<\/li>\n<li>Open <strong>PC Canvas &gt; Products<\/strong>, choose a product, and follow <strong>Product\nSetup<\/strong>: link the Printcart product and side, map the printing option, set\nthe size and wrap depth, and bind a canvas template for the price.<\/li>\n<li>When the product's readiness verdict says Ready, the button appears on its\nproduct page.<\/li>\n<li>Review incoming designs under <strong>PC Canvas &gt; Orders<\/strong> and <strong>PC Canvas &gt;\nArtwork<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20the%20printcart%20account%20for%3F\"><h3>What is the Printcart account for?<\/h3><\/dt>\n<dd><p>Printcart is the service this plugin connects your store to. It hosts the\ndesigner your customers use, renders the edge-wrap preview, checks print\nquality, calculates the price and receives the orders for production. Without\nan account the plugin has nothing to connect to. Your Printcart account's plan\nand wallet are managed at Printcart, not in WordPress.<\/p><\/dd>\n<dt id=\"what%20does%20it%20cost%20to%20run%3F\"><h3>What does it cost to run?<\/h3><\/dt>\n<dd><p>The plugin is free. Printcart charges for its service:<\/p>\n\n<ul>\n<li>Each preview render costs 1 token from the store owner's Printcart wallet\n(a render Printcart serves from its cache is free). That includes previews\nyour customers make and the test preview on Product Setup. Previews are\nrefused on the free Printcart plan.<\/li>\n<li>Each print-quality (DPI) check costs 2 tokens from the store owner's wallet,\nwhatever the number of images in it. The customer triggers it by uploading,\nchanging the size or adding to cart.<\/li>\n<li>Order sync is refused on the free Printcart plan.<\/li>\n<\/ul>\n\n<p>Costs are billed to you, the merchant, never to the customer. When the wallet\nis empty the customer is not blocked: they keep the local quality estimate,\nand PC Canvas shows you a notice.<\/p><\/dd>\n<dt id=\"how%20do%20i%20stop%20orders%20being%20sent%20to%20printcart%20automatically%3F\"><h3>How do I stop orders being sent to Printcart automatically?<\/h3><\/dt>\n<dd><p>Untick <strong>Send paid orders to Printcart automatically<\/strong> on <strong>PC Canvas &gt;\nConnection<\/strong> and save. You can still send any canvas line by hand with <strong>Retry\nsync<\/strong> on <strong>PC Canvas &gt; Orders<\/strong>. Developers can also use the\n    pc3d_auto_order_sync_enabled filter.<\/p><\/dd>\n<dt id=\"does%20it%20work%20alongside%20pcdesigner%20-%20web%202%20print%20solution%3F\"><h3>Does it work alongside PCDesigner - Web 2 Print Solution?<\/h3><\/dt>\n<dd><p>Yes. PC Canvas does not need it. On products PC Canvas serves, PC Canvas keeps\nPC Designer's \"Start Design\" button, its shop-list \"Start Design\" link and its\nafter-add-to-cart editor redirect out of the way, and warns you on Product\nSetup, Products and the Dashboard where PC Designer is still switched on. Turn\nPC Designer off on those products to remove the warning. PC Canvas never\nchanges PC Designer's settings or data, and PC Designer keeps working on every\nother product.<\/p><\/dd>\n<dt id=\"does%20this%20show%20a%20rotatable%203d%20model%20of%20the%20canvas%3F\"><h3>Does this show a rotatable 3D model of the canvas?<\/h3><\/dt>\n<dd><p>No. Printcart returns a flat preview image of the wrapped canvas.<\/p><\/dd>\n<dt id=\"are%20my%20printcart%20credentials%20exposed%20to%20the%20browser%3F\"><h3>Are my Printcart credentials exposed to the browser?<\/h3><\/dt>\n<dd><p>The SID and Secret are not. They are stored and used on your server only, and\nare removed from the designer's launch address even if another plugin tries to\nadd them.<\/p>\n\n<p>The Unauth Token is, on purpose: it is the key that loads the Printcart\ndesigner, so any visitor to an enabled product page can read it. It is not a\nread-only key. See \"External services\" for what that means.<\/p><\/dd>\n<dt id=\"why%20does%20the%20button%20not%20appear%20on%20my%20product%3F\"><h3>Why does the button not appear on my product?<\/h3><\/dt>\n<dd><p>The button is shown only when the product is enabled for PC Canvas and linked\nto a Printcart product and side. Open the product on <strong>PC Canvas &gt; Products<\/strong>:\nits readiness verdict names what is missing. <strong>PC Canvas &gt; Diagnostics<\/strong>\ncovers connection problems.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20modify%20woocommerce%3F\"><h3>Does the plugin modify WooCommerce?<\/h3><\/dt>\n<dd><p>No. It uses WordPress and WooCommerce hooks only and changes no WooCommerce\nfile.<\/p><\/dd>\n<dt id=\"can%20the%20customer%20change%20the%20edge%20depth%20per%20order%3F\"><h3>Can the customer change the edge depth per order?<\/h3><\/dt>\n<dd><p>Yes, by mapping an \"Edge Depth\" field in your printing option. The choice is\nsaved on the order. Printcart currently renders the preview at the depth set in\nProduct Setup, not the customer's choice.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data when I delete the plugin?<\/h3><\/dt>\n<dd><p>Deleting the plugin removes its settings, cache, scheduled tasks and the\n    <em>pc3d<\/em>* settings it saved on your products. The PC Canvas details on your\nWooCommerce order lines are kept, because they are part of your order records.<\/p><\/dd>\n<dt id=\"i%20am%20upgrading%20from%203.x.%20what%20changes%3F\"><h3>I am upgrading from 3.x. What changes?<\/h3><\/dt>\n<dd><p>The PC Canvas button moves from the old designer toolbar to your product page,\nand the preview opens in a full-screen designer overlay. The old in-designer\nbutton is removed with no setting to keep it. Existing orders are not changed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>4.3.5<\/h4>\n\n<p>Security:<\/p>\n\n<ul>\n<li>The admin screen loader validates the request origin before it reads any\nother part of the request: the permission check, then the nonce for the\nscreen the request names, then the screen query. A nonce issued for one PC\nCanvas screen can no longer load another.<\/li>\n<li>Admin actions are gated by one nonce check for both request transports,\ninstead of a check chosen by transport.<\/li>\n<li>Every PC Canvas screen checks the user's permission before it verifies the\nnonce, so a nonce is never the only thing authorising a request.<\/li>\n<li>The Connection screen routes a submission by the form it names, so its two\nnonce checks cannot overlap.<\/li>\n<\/ul>\n\n<h4>4.3.4<\/h4>\n\n<p>Security:<\/p>\n\n<ul>\n<li>Admin view query values, including nested values, are sanitised immediately\nafter WordPress decodes them and before any screen renders.<\/li>\n<\/ul>\n\n<h4>4.3.3<\/h4>\n\n<p>Security:<\/p>\n\n<ul>\n<li>Admin actions now verify permission and intent before request values are\nnormalised into an explicit payload. Downstream helpers no longer read raw\nrequest globals.<\/li>\n<li>Values decoded from JSON are passed through WordPress core sanitizers before\nuse, while encoded image URLs remain intact.<\/li>\n<li>Test artwork uploads now use the WordPress upload handler with PNG-only MIME\nvalidation and remove the temporary local copy after use.<\/li>\n<\/ul>\n\n<p>Fixed:<\/p>\n\n<ul>\n<li>Malformed list values in admin actions are rejected safely instead of\nreaching scalar-only functions.<\/li>\n<\/ul>\n\n<h4>4.3.2<\/h4>\n\n<p>Fixed:<\/p>\n\n<ul>\n<li>The notice shown when WooCommerce is missing appeared on every admin screen\nfor every user. It now appears only for someone who can activate plugins, and\nonly on the Plugins and Dashboard screens.<\/li>\n<li>Saving Connection settings could fail with a PHP error if a field arrived as\na list instead of a value.<\/li>\n<li>The dimension-unit notice no longer shows a close button that did nothing.\nThe \"Dismiss\" link beside it is unchanged and still remembers.<\/li>\n<\/ul>\n\n<p>Security:<\/p>\n\n<ul>\n<li>Form and URL values are sanitised where they are read, and data decoded from\nJSON is sanitised before it is used. No behaviour changes for merchants or\nshoppers.<\/li>\n<\/ul>\n\n<h4>4.3.1<\/h4>\n\n<p>Fixed:<\/p>\n\n<ul>\n<li>The \"Send paid orders to Printcart automatically\" switch on Connection\ncould not be turned off in 4.3.0. It now stays off when you untick it.<\/li>\n<li>The dimension-unit notice now stays dismissed.<\/li>\n<li>The notice shown after a Product Setup action is no longer decoded twice.<\/li>\n<\/ul>\n\n<p>Security:<\/p>\n\n<ul>\n<li>Each visitor is limited to 20 previews a minute (360 an hour) and 12 quality\nchecks a minute (240 an hour), so the Printcart tokens they spend cannot be\ndrained. Developers can change the limits with the <code>pc3d_buyer_rate_limits<\/code>\nfilter.<\/li>\n<li>Database queries are fully prepared, and form values are sanitised as they\nare read.<\/li>\n<\/ul>\n\n<p>Added:<\/p>\n\n<ul>\n<li>Compatibility with WooCommerce High-Performance Order Storage and the cart\nand checkout blocks.<\/li>\n<li>The product-page button's \"Opening PC Canvas\u2026\" and \"Try again\" labels can be\ntranslated.<\/li>\n<\/ul>\n\n<p>Changed:<\/p>\n\n<ul>\n<li>WordPress 6.5 or later is required.<\/li>\n<li>The External services section now lists the token cost of previews and\nquality checks, every field order sync sends, and how to turn it off.<\/li>\n<\/ul>\n\n<p>Upgrading:<\/p>\n\n<ul>\n<li>If you turned automatic order sync off on 4.3.0, it stayed on. After\nupdating, check the switch on PC Canvas &gt; Connection.<\/li>\n<\/ul>\n\n<h4>4.3.0<\/h4>\n\n<p>Added:<\/p>\n\n<ul>\n<li>Paid canvas orders are sent to Printcart on their own, in the background\nand never during checkout. An order is sent once WooCommerce counts it as\npaid (processing or completed); a bank-transfer or cheque order waits until\nyou mark it paid. A failed send is retried twice; after that, or at once\nwhen Printcart refuses the order (for example on a plan without order\nsync), the line shows \"Sync failed\" with the reason and the order gets a\nnote. A line already sent is never sent twice.<\/li>\n<li>A switch on Connection, \"Send paid orders to Printcart automatically\". It\nis on by default and works with JavaScript off.<\/li>\n<li>A warning on Product Setup, Products, the product box and the Dashboard\nwhere PCDesigner - Web 2 Print Solution is still switched on for a canvas\nproduct. The product stays on sale through PC Canvas.<\/li>\n<\/ul>\n\n<p>Changed:<\/p>\n\n<ul>\n<li>\"Design Files\" is now \"Artwork\" in the menu, titles, buttons and the\nDashboard. Page addresses are unchanged.<\/li>\n<li>Retry sync on Orders and Order Detail runs the same code as the automatic\nsend, and a failed retry now shows Printcart's reason.<\/li>\n<li>PC Canvas now notices PCDesigner - Web 2 Print Solution, only to keep it out\nof the way on canvas products. It never changes PC Designer's settings.<\/li>\n<\/ul>\n\n<p>Fixed:<\/p>\n\n<ul>\n<li>With PCDesigner - Web 2 Print Solution also active, canvas products set up\nbefore 4.0.0 could open its old designer. On every product PC Canvas serves,\nPC Designer's \"Start Design\" button and its after-add-to-cart editor\nredirect are now kept out of the way; other products are unchanged.<\/li>\n<li>Every order was marked \"needs review\". The order line now carries the\npreview the plugin rendered for the canvas the buyer ordered.<\/li>\n<li>The cart showed the canvas price as a sale. A canvas line now shows one\nplain price. The amount charged is unchanged.<\/li>\n<li>Retry sync could not have reached Printcart. It now sends the whole order\nonce.<\/li>\n<li>The Artwork check now accepts the formats Printcart produces (SVG, PNG, PDF,\nJPG, WEBP). Uploads are still PNG only.<\/li>\n<li>Order Detail listed optional fields as missing; they now read \"Not\napplicable\".<\/li>\n<li>Keyboard focus is now visible on Product Setup's section links and on\nbreadcrumbs.<\/li>\n<\/ul>\n\n<p>Security:<\/p>\n\n<ul>\n<li>Review statuses, the input hash and the product setup status posted by the\nbrowser at add-to-cart are ignored. A preview address from the browser is\nused only when the server has no matching render, and only if it is an\nhttps Printcart address.<\/li>\n<li>The order sent to Printcart carries no customer name, email, phone or\naddress.<\/li>\n<\/ul>\n\n<p>Upgrading:<\/p>\n\n<ul>\n<li>Automatic order sync is on after upgrading. To keep sending orders by hand,\nuntick \"Send paid orders to Printcart automatically\" on PC Canvas &gt;\nConnection.<\/li>\n<\/ul>\n\n<h4>4.2.0<\/h4>\n\n<ul>\n<li>Added: admin screens load and save in place, with a status line; everything\nstill works with JavaScript off.<\/li>\n<li>Added: Canvas templates hold a canvas's size, depth, edge, material, finish,\nframe, print sheet and price, and can be applied to products.<\/li>\n<li>Added: Product Setup in four steps after an Overview, with one next action.<\/li>\n<li>Added: store dimension unit and roll limit on Connection; Products views with\ncounts and reasons.<\/li>\n<li>Changed: one readiness verdict everywhere; the menu is ordered by task.<\/li>\n<li>Changed: the Dashboard says \"Connected\" only after a passing connection test.<\/li>\n<li>Fixed: saving Product Setup with JavaScript off; the 3D edge template save\nredirect; a refused Price save showing a green notice; an invisible \"Skip to\nsection\" link.<\/li>\n<li>Security: credentials appear only as their last 4 characters, on Connection\nonly.<\/li>\n<li>Upgrading: pricing and 3D edge templates are merged into Canvas templates the\nfirst time a store manager opens a screen that reads them. Nothing is\noverwritten.<\/li>\n<\/ul>\n\n<h4>4.1.3<\/h4>\n\n<ul>\n<li>Fixed: first-time guest shoppers could not add a designed canvas to the\ncart; they were told the price quote had expired.<\/li>\n<\/ul>\n\n<h4>4.1.2<\/h4>\n\n<ul>\n<li>Fixed: canvas products could stop being orderable about 15 minutes after\nsetup. The plugin now keeps a last-known-good copy of each product's\nPrintcart field list and refreshes it in the background with WP-Cron.<\/li>\n<\/ul>\n\n<h4>4.1.1<\/h4>\n\n<ul>\n<li>Fixed: on Product Setup &gt; Mapping, \"Save Mapping\" and the \"PC Canvas\nenabled\" checkbox did nothing for a product whose Printcart field list had\nnot been loaded.<\/li>\n<\/ul>\n\n<h4>4.1.0<\/h4>\n\n<ul>\n<li>Added: automatic print-quality (DPI) checking, and a DPI Profiles screen.\nEach check costs the store owner 2 Printcart tokens; an empty wallet never\nblocks a sale.<\/li>\n<li>Added: Printing Options setup for a fresh store; mapping of style, material,\nfinish, hanging hardware and add-ons; production sheet geometry; the\nprint-roll limit; multi-panel canvases (not yet priced as a set).<\/li>\n<li>Added: a Connection setting, \"Artwork\", that refuses a blank canvas at\nadd-to-cart. On by default.<\/li>\n<li>Changed: text domain is now <code>printcart-canvas-print<\/code>.<\/li>\n<li>Fixed: a finished design never reached the cart; every customer preview\nfailed with \"No artwork received\"; uninstall left seven product settings\nbehind.<\/li>\n<\/ul>\n\n<p>Releases before 4.1.0 are not repeated here. 4.0.0 made PC Canvas a\nstandalone plugin with its own product-page button and designer overlay.<\/p>","raw_excerpt":"Customers design a canvas print in the Printcart designer on your WooCommerce product page and see an edge-wrap preview before buying.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370492","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370492"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/printcart"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370492"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370492"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370492"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370492"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370492"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}