{"id":277045,"date":"2026-01-31T07:53:59","date_gmt":"2026-01-31T07:53:59","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/product-design-upload-for-ecommerce\/"},"modified":"2026-01-31T12:15:15","modified_gmt":"2026-01-31T12:15:15","slug":"danhthong-print-design-upload","status":"publish","type":"plugin","link":"https:\/\/ca.wordpress.org\/plugins\/danhthong-print-design-upload\/","author":14380033,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.1","stable_tag":"1.0.1","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"DanhThong Print Design Upload","header_author":"Thong Dang","header_description":"Allow customers to upload design files when purchasing products.","assets_banners_color":"f3e4d7","last_updated":"2026-01-31 12:15:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpdu.danhthong.com","header_author_uri":"https:\/\/danhthong.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":136,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"danhthong","date":"2026-01-31 07:53:22"},"1.0.1":{"tag":"1.0.1","author":"danhthong","date":"2026-01-31 12:15:15"}},"upgrade_notice":{"1.0.1":"<p>Adds clip mask support to restrict customer design areas and improve print accuracy.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3450876,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3450876,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3450876,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3450876,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3450876,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3450876,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3450876,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"Customize button on the product page.","2":"Customizer modal with canvas and uploaded image layer.","3":"Design area restricted using a clip mask (v1.0.1).","4":"Admin order screen showing uploaded design files per line item.","5":"Product Design Upload Settings."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[254984,282,254985,66524,185062],"plugin_category":[45],"plugin_contributors":[211961],"plugin_business_model":[],"class_list":["post-277045","plugin","type-plugin","status-publish","hentry","plugin_tags-design-upload","plugin_tags-ecommerce","plugin_tags-fabricjs","plugin_tags-product-customizer","plugin_tags-product-personalization","plugin_category-ecommerce","plugin_contributors-danhthong","plugin_committers-danhthong"],"banners":{"banner":"https:\/\/ps.w.org\/danhthong-print-design-upload\/assets\/banner-772x250.png?rev=3450876","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/danhthong-print-design-upload\/assets\/icon-128x128.png?rev=3450876","icon_2x":"https:\/\/ps.w.org\/danhthong-print-design-upload\/assets\/icon-256x256.png?rev=3450876","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/danhthong-print-design-upload\/assets\/screenshot-1.png?rev=3450876","caption":"Customize button on the product page."},{"src":"https:\/\/ps.w.org\/danhthong-print-design-upload\/assets\/screenshot-2.png?rev=3450876","caption":"Customizer modal with canvas and uploaded image layer."},{"src":"https:\/\/ps.w.org\/danhthong-print-design-upload\/assets\/screenshot-3.png?rev=3450876","caption":"Design area restricted using a clip mask (v1.0.1)."},{"src":"https:\/\/ps.w.org\/danhthong-print-design-upload\/assets\/screenshot-4.png?rev=3450876","caption":"Admin order screen showing uploaded design files per line item."}],"raw_content":"<!--section=description-->\n<p>DanhThong Print Design Upload adds a simple product customizer to WooCommerce products.<\/p>\n\n<p>Features:\n* Enable\/disable design upload per product.\n* Customer uploads an image on the product page.\n* The uploaded image is added as a movable\/resizable layer on a canvas (Fabric.js).\n* The product image can be used as the canvas background.\n* <strong>NEW (v1.0.1): Clip mask support to restrict the editable design area.<\/strong>\n* Visual overlay frame to clearly indicate the allowed design region.\n* The final merged design is exported as PNG and stored with the cart item.\n* Design files can be displayed in the admin order screen (per order item).\n* Lightweight lightbox support for viewing uploaded images.<\/p>\n\n<p>This plugin is designed for stores that sell personalized products (e.g., t-shirts, mugs, phone cases, posters).<\/p>\n\n<h3>Clip Mask (New in v1.0.1)<\/h3>\n\n<p>Starting from version <strong>1.0.1<\/strong>, you can optionally upload a <strong>clipping mask image<\/strong> per product to limit where customers can place and preview their designs.<\/p>\n\n<ul>\n<li>Recommended format: <strong>PNG<\/strong><\/li>\n<li>Transparent area = allowed design region<\/li>\n<li>Opaque area = hidden \/ restricted region<\/li>\n<li>The canvas preview and exported PNG respect the defined clipping boundaries<\/li>\n<\/ul>\n\n<p>This helps ensure designs stay within printable areas and improves print accuracy.<\/p>\n\n<h4>Third-party libraries<\/h4>\n\n<p>This plugin bundles Fabric.js for the canvas editor functionality.\nFabric.js is licensed under the MIT License. The Fabric.js license file is included in the plugin package.<\/p>\n\n<h3>Usage<\/h3>\n\n<ol>\n<li>Go to WooCommerce \u2192 Product Design Upload Settings (<code>wp-admin\/admin.php?page=wcpdu-settings<\/code>) and enable the option to allow customers to upload designs.<\/li>\n<li>Go to Products \u2192 Edit product.<\/li>\n<li>Enable the design upload option for that product.<\/li>\n<li>(Optional) Upload a <strong>Clipping Mask Image<\/strong> to restrict the editable area.<\/li>\n<li>On the product page, click the \"Customize\" button.<\/li>\n<li>Upload an image, move\/scale it within the allowed area, then click \"Apply\".<\/li>\n<li>Add to cart. The merged PNG is saved and attached to the cart item and order item meta.<\/li>\n<\/ol>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/danhthong-print-design-upload\/<\/code>, or install the ZIP via Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Make sure WooCommerce is installed and active.<\/li>\n<li>Edit a product and enable the customizer (see \"Usage\").<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20woocommerce%3F\"><h3>Does this plugin require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce must be installed and active.<\/p><\/dd>\n<dt id=\"what%20is%20a%20clip%20mask%3F\"><h3>What is a clip mask?<\/h3><\/dt>\n<dd><p>A clip mask is a PNG image that defines where customers are allowed to design. Transparent areas allow design, while opaque areas hide content outside the printable region.<\/p><\/dd>\n<dt id=\"does%20the%20clip%20mask%20affect%20the%20exported%20image%3F\"><h3>Does the clip mask affect the exported image?<\/h3><\/dt>\n<dd><p>Yes. The exported PNG is clipped to the defined mask, ensuring only the allowed area is included.<\/p><\/dd>\n<dt id=\"where%20are%20uploaded%2Fgenerated%20files%20stored%3F\"><h3>Where are uploaded\/generated files stored?<\/h3><\/dt>\n<dd><p>Files are stored under the WordPress uploads directory. The plugin uses a dedicated subfolder for design assets.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20product%20zoom%2Flightbox%3F\"><h3>Does this work with product zoom\/lightbox?<\/h3><\/dt>\n<dd><p>Yes. The plugin updates the product gallery image and attempts to refresh zoom overlays (including <code>.zoomImg<\/code> used by some themes\/plugins).<\/p><\/dd>\n<dt id=\"can%20i%20allow%20multiple%20uploaded%20layers%3F\"><h3>Can I allow multiple uploaded layers?<\/h3><\/dt>\n<dd><p>Currently the customizer is intended for a single uploaded image layer. You can extend it to allow multiple layers if needed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added clip mask support to restrict editable design areas.<\/li>\n<li>Added product-level clipping mask upload field.<\/li>\n<li>Improved canvas rendering with visual overlay frame.<\/li>\n<li>Ensured exported images respect clipping boundaries.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Let customers upload an image, position it on a product canvas, and save the final design with the cart\/order.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/277045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=277045"}],"author":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/danhthong"}],"wp:attachment":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=277045"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=277045"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=277045"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=277045"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=277045"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=277045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}