{"id":351260,"date":"2026-08-14T15:04:18","date_gmt":"2026-08-14T15:04:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/print-app-product-options-for-woocommerce\/"},"modified":"2026-08-14T17:50:11","modified_gmt":"2026-08-14T17:50:11","slug":"print-app-product-options-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/print-app-product-options-for-woocommerce\/","author":20912014,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.1","stable_tag":"0.4.1","tested":"7.0.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Print.App Product Options for WooCommerce","header_author":"Print.App","header_description":"Print product configurator for WooCommerce \u2014 options, live pricing, artwork upload. Prices are always re-verified server-side.","assets_banners_color":"ddfbfe","last_updated":"2026-08-14 17:50:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/options.print.app","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":33,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.4.0":{"tag":"0.4.0","author":"printapp","date":"2026-08-14 15:03:43"},"0.4.1":{"tag":"0.4.1","author":"printapp","date":"2026-08-14 17:50:11"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3647598,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3647598,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3647598,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3647598,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.4.0","0.4.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3647598,"resolution":"1","location":"assets","locale":"","width":1600,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3647598,"resolution":"2","location":"assets","locale":"","width":1600,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3647598,"resolution":"3","location":"assets","locale":"","width":1600,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3647598,"resolution":"4","location":"assets","locale":"","width":1600,"height":900}},"screenshots":{"1":"The configurator on a product page: options, live pricing, and the verified total.","2":"The visual builder \u2014 outline, editor and a live preview of the storefront widget.","3":"Ready-made print templates: business cards, flyers, stickers, thesis binding and more.","4":"Every price is recomputed and signed on the server before it can reach the cart."}},"plugin_section":[],"plugin_tags":[15432,890,155785,24228,286],"plugin_category":[45],"plugin_contributors":[271287],"plugin_business_model":[],"class_list":["post-351260","plugin","type-plugin","status-publish","hentry","plugin_tags-price-calculator","plugin_tags-printing","plugin_tags-product-options","plugin_tags-web-to-print","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-printapp","plugin_committers-printapp"],"banners":{"banner":"https:\/\/ps.w.org\/print-app-product-options-for-woocommerce\/assets\/banner-772x250.png?rev=3647598","banner_2x":"https:\/\/ps.w.org\/print-app-product-options-for-woocommerce\/assets\/banner-1544x500.png?rev=3647598","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/print-app-product-options-for-woocommerce\/assets\/icon-128x128.png?rev=3647598","icon_2x":"https:\/\/ps.w.org\/print-app-product-options-for-woocommerce\/assets\/icon-256x256.png?rev=3647598","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/print-app-product-options-for-woocommerce\/assets\/screenshot-1.png?rev=3647598","caption":"The configurator on a product page: options, live pricing, and the verified total."},{"src":"https:\/\/ps.w.org\/print-app-product-options-for-woocommerce\/assets\/screenshot-2.png?rev=3647598","caption":"The visual builder \u2014 outline, editor and a live preview of the storefront widget."},{"src":"https:\/\/ps.w.org\/print-app-product-options-for-woocommerce\/assets\/screenshot-3.png?rev=3647598","caption":"Ready-made print templates: business cards, flyers, stickers, thesis binding and more."},{"src":"https:\/\/ps.w.org\/print-app-product-options-for-woocommerce\/assets\/screenshot-4.png?rev=3647598","caption":"Every price is recomputed and signed on the server before it can reach the cart."}],"raw_content":"<!--section=description-->\n<p>Print Options renders a fast, accessible configurator on your product pages:<\/p>\n\n<ul>\n<li>Visual builder with print-ready templates (business cards, stickers with\narea pricing, t-shirt size \u00d7 color matrices, posters, \u2026) \u2014 right inside\nyour WordPress admin, no JSON anywhere<\/li>\n<li>Live price preview: per-unit, per-page, per-area, quantity breaks\n(flat or graduated), setup fees, minimum orders<\/li>\n<li>Conditional options, multi-select finishes, and artwork upload<\/li>\n<li>Prices are ALWAYS re-verified server-side before an item enters the cart \u2014\nthe browser price is never trusted.<\/li>\n<\/ul>\n\n<p>Create your option sets on the Print Options page, then open any product and\npick a set from its Print Options tab \u2014 next to Attributes and Variations.\nEditing a set later updates every product that uses it.<\/p>\n\n<p>Requires WooCommerce.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the Print.App options service to do its job. No\ncustomer account is required and no personal data is sold or shared.<\/p>\n\n<p><strong>api.print.app<\/strong> (Print.App API)<\/p>\n\n<ul>\n<li><em>Price verification<\/em> \u2014 when a customer adds a configured product to the\ncart, the selected options and the product's option set are sent\nserver-to-server so the price can be recomputed independently of the\nbrowser. No customer names, emails or addresses are transmitted.<\/li>\n<li><em>Artwork upload<\/em> \u2014 when a customer uploads a file, the browser requests a\none-time upload authorization. The file itself goes directly to storage\nand is automatically deleted after 30 days.<\/li>\n<li><em>Option set management<\/em> \u2014 when a shop manager saves or assigns option\nsets, the set definition is stored under an anonymous store identifier\n(a random ID generated at activation; your site URL host is recorded as\nmetadata only).<\/li>\n<\/ul>\n\n<p><strong>options.print.app<\/strong> (Print.App CDN)<\/p>\n\n<ul>\n<li>Published option sets are served from this domain to your product pages\nvia your server (cached locally for 60 seconds). The visual builder itself\nis not loaded from here \u2014 it ships with the plugin and runs on your site.<\/li>\n<\/ul>\n\n<p>These services are operated by Print.App ApS: https:\/\/print.app\/\nPrivacy policy: https:\/\/print.app\/company\/privacy\nTerms of service: https:\/\/print.app\/company\/terms<\/p>\n\n<p><strong>cdn.filecheck.io<\/strong> (Filecheck artwork preflight \u2014 optional)<\/p>\n\n<p>Only used if you enter a Filecheck publishable key in the plugin settings.\nLeave that field empty and this service is never contacted.<\/p>\n\n<ul>\n<li><em>When it loads<\/em> \u2014 with a key configured, the product page loads the\nFilecheck upload element from this domain for any option set that has an\nartwork-check step.<\/li>\n<li><em>What is sent<\/em> \u2014 the artwork file the customer chooses, and the check\nsettings for that option set (such as the required size, bleed and page\ncount). The check result \u2014 page count, artwork dimensions and any\nwarnings \u2014 comes back to the page and is stored with the order line so\nyou can see what was checked. No customer names, emails or addresses are\ntransmitted.<\/li>\n<\/ul>\n\n<p>This service is operated by Filecheck (Print.App ApS): https:\/\/filecheck.io\/\nPrivacy policy: https:\/\/filecheck.io\/company\/privacy\nTerms of service: https:\/\/filecheck.io\/company\/terms<\/p>\n\n<h3>Source Code<\/h3>\n\n<p>Two files in assets\/ are compiled from TypeScript and Vue sources:<\/p>\n\n<ul>\n<li>assets\/print-configurator.js \u2014 the storefront configurator<\/li>\n<li>assets\/builder.js and assets\/builder.css \u2014 the option-set builder used on\nthe plugin's own admin page<\/li>\n<\/ul>\n\n<p>The full, human-readable source and the build tooling are available at:<\/p>\n\n<p>https:\/\/github.com\/PrintApp\/print-options-wordpress<\/p>\n\n<p>Run <code>npm install<\/code>, then <code>npm run build<\/code> in the core-ui package for the\nconfigurator and in the admin package for the builder; the outputs are the\nfiles bundled here unchanged.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload and activate the plugin.<\/li>\n<li>Open Print Options \u2192 Option Sets in your admin sidebar and create an option\nset from a template.<\/li>\n<li>Edit a product, open its Print Options tab, and pick the set from the\ndropdown. Done \u2014 the product page now shows the configurator.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20build%20the%20options%3F\"><h3>Where do I build the options?<\/h3><\/dt>\n<dd><p>Print Options \u2192 Option Sets, inside your own admin. Start from a template and\nadjust the choices and prices to match what you sell.<\/p><\/dd>\n<dt id=\"can%20several%20products%20share%20the%20same%20options%3F\"><h3>Can several products share the same options?<\/h3><\/dt>\n<dd><p>Yes \u2014 assign the same set on each product's Print Options tab. Saving the set\nonce updates all of them.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20account%20or%20api%20keys%3F\"><h3>Do I need an account or API keys?<\/h3><\/dt>\n<dd><p>No. The plugin creates its own anonymous identity when you activate it, and\ntalks to the service on your server's behalf.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20verification%20endpoint%20is%20down%3F\"><h3>What happens if the verification endpoint is down?<\/h3><\/dt>\n<dd><p>Adding to cart is refused with a friendly error. The plugin never falls back\nto a browser-computed price.<\/p><\/dd>\n<dt id=\"is%20it%20really%20free%3F\"><h3>Is it really free?<\/h3><\/dt>\n<dd><p>Yes, with no product or option limits.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Fix: option sets with quantity tiers on individual choices (for example\nsize-dependent price breaks) could not be saved \u2014 the values were being\ntruncated before they reached the server and the save was refused<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>The visual builder now ships with the plugin and runs on its own admin page\ninstead of being embedded from options.print.app<\/li>\n<li>All classes, constants, options, transients, post meta and hooks carry a\nPAPO_\/papo_ prefix; existing store identity and product assignments are\nmigrated automatically on update<\/li>\n<li>Configuration submitted with add-to-cart is sanitized value by value<\/li>\n<li>Filecheck artwork preflight documented under External Services<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Print Options tab on the product edit page \u2014 assign a named option set from\na dropdown, no JSON pasting<\/li>\n<li>Embedded visual builder (Print Options \u2192 Option Sets) to create and manage\noption sets<\/li>\n<li>Option sets are served from the CDN and shared across products; editing a\nset updates every product that uses it<\/li>\n<li>Anonymous store identity; all management calls are HMAC-signed server-side<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Full add-to-cart bridge with server-side price verification<\/li>\n<li>Settings page, per-product options metabox, order line persistence<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial stub<\/li>\n<\/ul>","raw_excerpt":"Print product options with live pricing and artwork upload for WooCommerce \u2014 built for print shops.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351260","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=351260"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/printapp"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351260"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351260"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351260"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351260"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351260"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}