{"id":321599,"date":"2026-06-29T18:54:54","date_gmt":"2026-06-29T18:54:54","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/upload-files-for-woocommerce\/"},"modified":"2026-07-15T07:21:55","modified_gmt":"2026-07-15T07:21:55","slug":"vanquish-upload-files-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/snd.wordpress.org\/plugins\/vanquish-upload-files-for-woocommerce\/","author":14329766,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.17","stable_tag":"1.0.17","tested":"7.0.2","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"Vanquish Upload Files for WooCommerce","header_author":"Lagudi Domenico","header_description":"Upload any file any size from any WooCommerce page.","assets_banners_color":"e4dbee","last_updated":"2026-07-15 07:21:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":646,"num_ratings":4,"support_threads":3,"support_threads_resolved":3,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.10":{"tag":"1.0.10","author":"vanquish83","date":"2026-07-08 16:57:49"},"1.0.11":{"tag":"1.0.11","author":"vanquish83","date":"2026-07-10 07:37:23"},"1.0.12":{"tag":"1.0.12","author":"vanquish83","date":"2026-07-10 10:33:52"},"1.0.13":{"tag":"1.0.13","author":"vanquish83","date":"2026-07-12 16:34:27"},"1.0.14":{"tag":"1.0.14","author":"vanquish83","date":"2026-07-12 20:30:23"},"1.0.15":{"tag":"1.0.15","author":"vanquish83","date":"2026-07-13 13:45:59"},"1.0.16":{"tag":"1.0.16","author":"vanquish83","date":"2026-07-14 08:20:41"},"1.0.17":{"tag":"1.0.17","author":"vanquish83","date":"2026-07-15 07:21:55"},"1.0.2":{"tag":"1.0.2","author":"vanquish83","date":"2026-06-29 18:54:23"},"1.0.3":{"tag":"1.0.3","author":"vanquish83","date":"2026-07-01 15:53:54"},"1.0.4":{"tag":"1.0.4","author":"vanquish83","date":"2026-07-02 15:49:37"},"1.0.5":{"tag":"1.0.5","author":"vanquish83","date":"2026-07-02 17:00:45"},"1.0.6":{"tag":"1.0.6","author":"vanquish83","date":"2026-07-03 23:04:54"},"1.0.7":{"tag":"1.0.7","author":"vanquish83","date":"2026-07-04 10:48:54"},"1.0.8":{"tag":"1.0.8","author":"vanquish83","date":"2026-07-06 14:54:24"},"1.0.9":{"tag":"1.0.9","author":"vanquish83","date":"2026-07-08 05:48:09"}},"upgrade_notice":{"1.0.17":"<p>Minor improvements.<\/p>","1.0.16":"<p>Minor improvements.<\/p>","1.0.15":"<p>Recommended update for sites on PHP 8: fixes a fatal error on the product\/cart\/checkout\/order pages when the &quot;Totals area&quot; option is empty, and fixes the summary box showing raw HTML.<\/p>","1.0.14":"<p>Recommended update for sites on PHP 8: fixes a fatal error on the product\/cart\/checkout pages when the &quot;Disable standard upload-field management&quot; option is empty.<\/p>","1.0.13":"<p>Recommended update for anyone on WordPress 6.7 or later: fixes product pages breaking on activation due to an early-translation notice.<\/p>","1.0.12":"<p>Recommended update: temporary files left behind by interrupted uploads are now cleaned up, and the cleanup can no longer delete a file a shopper is still working with.<\/p>","1.0.11":"<p>Recommended update for sites migrated from CodeCanyon: the old [wcuf_...] shortcodes work again, and the raw shortcode text is no longer printed on the storefront.<\/p>","1.0.10":"<p>Recommended update: fixes a case where uploaded files were not attached to the order on the classic checkout, plus a PHP 8 fatal error fix.<\/p>","1.0.9":"<p>Internal dependency update for the premium cloud integrations. No functional changes to the free version.<\/p>","1.0.8":"<p>Updated the Freemius SDK. No functional changes.<\/p>","1.0.7":"<p>Internal code cleanup (autoloader, bootstrap). No functional changes.<\/p>","1.0.6":"<p>Fixes the upload area not appearing on the Cart block in the free version.<\/p>","1.0.5":"<p>Fixes the upload area not appearing on the block-based Cart on some themes.<\/p>","1.0.4":"<p>Adds base compatibility with the block-based cart and checkout.<\/p>","1.0.3":"<p>Internal code refactor (namespacing). No functional changes.<\/p>","1.0.2":"<p>First public release on WordPress.org.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":4},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3590511,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3590511,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3592938,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3592938,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3608357,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/?product=custom-product\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Vanquish Upload Files for WooCommerce\"}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"vanquish-upload-files-for-woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installTheme\",\"themeData\":{\"resource\":\"wordpress.org\\\/themes\",\"slug\":\"emoza-woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\n\\\/**\\n * Live Preview seeding for WordPress Playground.\\n *\\n * This is the SOURCE of the runPHP step in blueprint.json (see build-blueprint).\\n * It runs AFTER WooCommerce + the FREE build of the plugin are active, and leaves\\n * the site with: WooCommerce pages, one published demo product (\\\"custom-product\\\",\\n * price 25) showing a single, empty, NON-required global upload field (\\\"Upload your\\n * file\\\", pdf\\\/jpg\\\/jpeg\\\/png) right below the Add to cart button.\\n *\\n * Permalinks: we deliberately keep DEFAULT (plain) permalinks and land on\\n * \\\/?product=custom-product. Pretty permalinks would need rewrite rules flushed at\\n * exactly the right moment inside Playground, which is flaky and produces a 404\\n * (\\\"No matching template found\\\"). The query-var URL always resolves; cart\\\/checkout\\n * stay navigable because the WooCommerce pages exist regardless.\\n *\\n * Idempotent: safe to run more than once (guards on option\\\/slug presence).\\n * FREE tier only: multi-file \\\/ cloud \\\/ cropper are physically stripped by Freemius,\\n * so we never touch them here.\\n *\\\/\\n\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\n\\\/* 1. Store scaffolding \\u2014 make sure the WooCommerce pages (shop\\\/cart\\\/checkout) exist. *\\\/\\nif ( class_exists( 'WC_Install' ) ) {\\n\\tWC_Install::create_pages();\\n}\\n\\n\\\/* 1b. Tidy the front-end navigation.\\n * Delete the default \\\"Sample Page\\\", then build a clean primary menu\\n * (Shop \\\/ Cart \\\/ Checkout) and assign it to every menu location the theme\\n * registers. Assigning a real menu also removes the auto \\\"Home\\\" entry that the\\n * theme's fallback menu (wp_page_menu) would otherwise show.\\n *\\\/\\n$sample_page = get_page_by_path( 'sample-page' );\\nif ( $sample_page ) {\\n\\twp_delete_post( $sample_page->ID, true );\\n}\\nif ( function_exists( 'wc_get_page_id' ) && ! wp_get_nav_menu_object( 'vanupfi-demo-menu' ) ) {\\n\\t$menu_id = wp_create_nav_menu( 'vanupfi-demo-menu' );\\n\\t$menu_pages = array(\\n\\t\\t'Shop'       => wc_get_page_id( 'shop' ),\\n\\t\\t'Cart'       => wc_get_page_id( 'cart' ),\\n\\t\\t'Checkout'   => wc_get_page_id( 'checkout' ),\\n\\t\\t'My account' => wc_get_page_id( 'myaccount' ),\\n\\t);\\n\\tforeach ( $menu_pages as $label => $page_id ) {\\n\\t\\tif ( $page_id && $page_id > 0 ) {\\n\\t\\t\\twp_update_nav_menu_item( $menu_id, 0, array(\\n\\t\\t\\t\\t'menu-item-title'     => $label,\\n\\t\\t\\t\\t'menu-item-object'    => 'page',\\n\\t\\t\\t\\t'menu-item-object-id' => $page_id,\\n\\t\\t\\t\\t'menu-item-type'      => 'post_type',\\n\\t\\t\\t\\t'menu-item-status'    => 'publish',\\n\\t\\t\\t) );\\n\\t\\t}\\n\\t}\\n\\t$locations = get_theme_mod( 'nav_menu_locations' );\\n\\tif ( ! is_array( $locations ) ) {\\n\\t\\t$locations = array();\\n\\t}\\n\\tforeach ( array_keys( (array) get_registered_nav_menus() ) as $location ) {\\n\\t\\t$locations[ $location ] = $menu_id;\\n\\t}\\n\\tset_theme_mod( 'nav_menu_locations', $locations );\\n}\\n\\n\\\/* 2. Demo product \\u2014 published, slug forced to 'custom-product' (idempotent by slug). *\\\/\\nif ( ! get_page_by_path( 'custom-product', OBJECT, 'product' ) && class_exists( 'WC_Product_Simple' ) ) {\\n\\t$product = new WC_Product_Simple();\\n\\t$product->set_name( 'Custom Product' );\\n\\t$product->set_slug( 'custom-product' );\\n\\t$product->set_status( 'publish' );\\n\\t$product->set_catalog_visibility( 'visible' );\\n\\t$product->set_regular_price( '25' );\\n\\t$product->set_price( '25' );\\n\\t$product->save();\\n}\\n\\n\\\/* 3. One global upload field.\\n * We call the plugin's own save_bulk_options() with a MINIMAL input instead of\\n * hand-writing ~95 keys: the method fills every default and enforces the FREE\\n * single-file gating (enable_multiple_uploads_per_field=false, max_files=1).\\n * The few keys below are the ones read without an isset() guard downstream, so we\\n * pass them explicitly to avoid PHP notices.\\n *\\\/\\nif ( empty( get_option( 'vanupfi_files_fields_meta' ) ) ) {\\n\\tglobal $vanupfi_option_model;\\n\\tif ( ! isset( $vanupfi_option_model ) && class_exists( '\\\\\\\\Vanquish\\\\\\\\UploadFiles\\\\\\\\Com\\\\\\\\Option' ) ) {\\n\\t\\t$vanupfi_option_model = new \\\\Vanquish\\\\UploadFiles\\\\Com\\\\Option();\\n\\t}\\n\\tif ( isset( $vanupfi_option_model ) ) {\\n\\t\\t$vanupfi_option_model->save_bulk_options( array(\\n\\t\\t\\tarray(\\n\\t\\t\\t\\t'id'                          => 1,\\n\\t\\t\\t\\t'title'                       => 'Upload your file',\\n\\t\\t\\t\\t'description'                 => '',\\n\\t\\t\\t\\t\\\/\\\/ Post-upload message. Without this, save_bulk_options() stores an empty\\n\\t\\t\\t\\t\\\/\\\/ string and the uploaded file shows a BLANK preview box. This is the\\n\\t\\t\\t\\t\\\/\\\/ plugin's own admin default (Html.php): the shortcode renders the file\\n\\t\\t\\t\\t\\\/\\\/ name + media preview (image thumbnail).\\n\\t\\t\\t\\t'message_already_uploaded'    => \\\"<h4>Uploaded files:<\\\/h4> \\\\n[file_name_with_media_preview]\\\",\\n\\t\\t\\t\\t'types'                       => '.pdf,.jpg,.jpeg,.png',\\n\\t\\t\\t\\t'size'                        => 0,   \\\/\\\/ 0 = no max size limit\\n\\t\\t\\t\\t'min_size'                    => 0,\\n\\t\\t\\t\\t'width_limit'                 => 0,\\n\\t\\t\\t\\t'height_limit'                => 0,\\n\\t\\t\\t\\t'min_width_limit'             => 0,\\n\\t\\t\\t\\t'min_height_limit'            => 0,\\n\\t\\t\\t\\t'dimensions_logical_operator' => 'OR',\\n\\t\\t\\t\\t'enable_for'                  => 'always', \\\/\\\/ show on ALL products\\n\\t\\t\\t\\t'display_on_product'          => true,     \\\/\\\/ render on the product page\\n\\t\\t\\t\\t'display_on_product_before_adding_to_cart' => true, \\\/\\\/ show the field BEFORE add-to-cart\\n\\t\\t\\t\\t'display_on_cart'             => true,     \\\/\\\/ also visible on the cart page\\n\\t\\t\\t\\t'display_on_checkout'         => true,     \\\/\\\/ also visible on the checkout page\\n\\t\\t\\t\\t'display_on_thank_you'        => true,     \\\/\\\/ also visible on the order-received (thank you) page\\n\\t\\t\\t\\t'display_on_order_detail'     => true,     \\\/\\\/ let the uploaded file show later on the order\\n\\t\\t\\t\\t\\\/\\\/ required_on_checkout intentionally omitted -> defaults to false (low-friction demo)\\n\\t\\t\\t),\\n\\t\\t) );\\n\\t}\\n\\n\\t\\\/* Position the field just below the Add to cart button. *\\\/\\n\\tupdate_option( 'vanupfi_browse_button_position', 'woocommerce_after_add_to_cart_button' );\\n}\\n\\n\\\/* 3a. Turn OFF WooCommerce \\\"Coming soon\\\" \\\/ Launch Your Store mode.\\n * Recent WooCommerce ships a fresh store in \\\"coming soon\\\" mode, which would show\\n * visitors a placeholder splash instead of the demo. Make the storefront public.\\n *\\\/\\nupdate_option( 'woocommerce_coming_soon', 'no' );\\n\\n\\\/* 3b. Payments & shipping \\u2014 so the demo checkout can actually be completed.\\n * Enable Cash on Delivery (no external gateway\\\/keys needed) and add Free shipping\\n * to the default \\\"Rest of the World\\\" zone, so neither a missing payment method nor\\n * a missing shipping method blocks the order. Both idempotent.\\n *\\\/\\n$cod_settings = get_option( 'woocommerce_cod_settings', array() );\\nif ( ! is_array( $cod_settings ) ) {\\n\\t$cod_settings = array();\\n}\\nif ( empty( $cod_settings['enabled'] ) || 'yes' !== $cod_settings['enabled'] ) {\\n\\t$cod_settings['enabled']            = 'yes';\\n\\t$cod_settings['title']              = ! empty( $cod_settings['title'] ) ? $cod_settings['title'] : 'Cash on delivery';\\n\\t$cod_settings['enable_for_methods'] = isset( $cod_settings['enable_for_methods'] ) ? $cod_settings['enable_for_methods'] : array();\\n\\t$cod_settings['enable_for_virtual'] = 'yes';\\n\\tupdate_option( 'woocommerce_cod_settings', $cod_settings );\\n}\\n\\nif ( class_exists( 'WC_Shipping_Zone' ) ) {\\n\\t$default_zone     = new WC_Shipping_Zone( 0 ); \\\/\\\/ applies to any destination not in another zone\\n\\t$has_free_shipping = false;\\n\\tforeach ( $default_zone->get_shipping_methods() as $shipping_method ) {\\n\\t\\tif ( 'free_shipping' === $shipping_method->id ) {\\n\\t\\t\\t$has_free_shipping = true;\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n\\tif ( ! $has_free_shipping ) {\\n\\t\\t$default_zone->add_shipping_method( 'free_shipping' );\\n\\t\\t$default_zone->save();\\n\\t}\\n}\\n\\n\\\/* 4. Keep Freemius quiet inside the demo: mark the install as skipped (anonymous),\\n * so no opt-in\\\/connect notice appears if the visitor wanders into wp-admin.\\n * Guarded + try\\\/catch: if the SDK behaves differently it must never break the demo.\\n *\\\/\\nif ( function_exists( 'vanupfi_fs' ) ) {\\n\\ttry {\\n\\t\\tif ( ! vanupfi_fs()->is_registered() ) {\\n\\t\\t\\tvanupfi_fs()->skip_connection();\\n\\t\\t}\\n\\t} catch ( \\\\Exception $e ) {\\n\\t\\t\\\/\\\/ no-op: Freemius state is non-critical for the preview\\n\\t}\\n}\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.10","1.0.11","1.0.12","1.0.13","1.0.14","1.0.15","1.0.16","1.0.17","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3590511,"resolution":"1","location":"assets","locale":"","width":1767,"height":757},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3590511,"resolution":"2","location":"assets","locale":"","width":1300,"height":951},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3590511,"resolution":"3","location":"assets","locale":"","width":1438,"height":1502},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3590511,"resolution":"4","location":"assets","locale":"","width":1729,"height":1455},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3590511,"resolution":"5","location":"assets","locale":"","width":851,"height":860},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3594253,"resolution":"6","location":"assets","locale":"","width":2000,"height":5005}},"screenshots":{"1":"The Upload Field Configurator - create and arrange your upload fields.","2":"Upload field on the single product page.","3":"Upload field on the cart page.","4":"Uploaded files on the admin order page, with per-file download and download-all-as-zip.","5":"Uploaded files on the customer's order details page, with download \/ view.","6":"Free vs Premium - feature comparison at a glance."}},"plugin_section":[],"plugin_tags":[269506,5887,13075,259,286],"plugin_category":[45,50],"plugin_contributors":[78154,269507],"plugin_business_model":[],"class_list":["post-321599","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout-upload","plugin_tags-file-upload","plugin_tags-print-on-demand","plugin_tags-upload","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-media","plugin_contributors-freemius","plugin_contributors-vanquish83","plugin_committers-vanquish83","plugin_support_reps-supportvanquishplugins"],"banners":{"banner":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/banner-772x250.png?rev=3592938","banner_2x":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/banner-1544x500.png?rev=3592938","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/icon-128x128.png?rev=3590511","icon_2x":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/icon-256x256.png?rev=3590511","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-1.png?rev=3590511","caption":"The Upload Field Configurator - create and arrange your upload fields."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-2.png?rev=3590511","caption":"Upload field on the single product page."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-3.png?rev=3590511","caption":"Upload field on the cart page."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-4.png?rev=3590511","caption":"Uploaded files on the admin order page, with per-file download and download-all-as-zip."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-5.png?rev=3590511","caption":"Uploaded files on the customer's order details page, with download \/ view."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-6.png?rev=3594253","caption":"Free vs Premium - feature comparison at a glance."}],"raw_content":"<!--section=description-->\n<p><strong>Vanquish Upload Files for WooCommerce<\/strong> lets you collect files from your customers \u2014 logos, artwork, documents, photos \u2014 exactly where you need them: on the product page, in the cart, during checkout, or on the order details page.<\/p>\n\n<p>Whether you run a print shop, a personalization service, or any store that sells custom products, this plugin makes it effortless for customers to provide the input you need to fulfil their orders, with a clean upload experience and a real-time progress bar.<\/p>\n\n<h4>Why store owners choose it<\/h4>\n\n<ul>\n<li>Receive uploads bound to each order \u2014 no more chasing files over email.<\/li>\n<li>Show upload fields exactly where they make sense: product, cart, checkout, order pages.<\/li>\n<li>Make uploads <strong>required<\/strong> so customers can't order without providing their files.<\/li>\n<li>Restrict by file type, size and image dimensions.<\/li>\n<li>Get notified by email the moment a customer uploads a file.<\/li>\n<li>Fully translatable, WPML-ready.<\/li>\n<\/ul>\n\n<h4>What's included for free<\/h4>\n\n<p>What the free version includes:<\/p>\n\n<ul>\n<li>Multiple upload fields per product<\/li>\n<li>Single file per upload field<\/li>\n<li>Display on product, cart, checkout and order pages (classic and block-based cart &amp; checkout)<\/li>\n<li><strong>Individual products<\/strong> \u2014 add the same product multiple times with distinct uploads<\/li>\n<li>Required-upload enforcement (blocks add-to-cart \/ checkout)<\/li>\n<li>File type, size and dimension restrictions<\/li>\n<li>Admin email notifications<\/li>\n<li>Upload progress bar, file delete, image\/audio\/PDF preview<\/li>\n<li>WPML-ready translatable button texts<\/li>\n<\/ul>\n\n<h4>Premium features<\/h4>\n\n<p>The Premium version, distributed separately, adds:<\/p>\n\n<ul>\n<li><strong>Multiple files per upload field<\/strong> \u2014 let customers attach several files to a single field<\/li>\n<li><strong>Image crop editor<\/strong> with rotation and aspect-ratio control<\/li>\n<li><strong>Extra costs &amp; discounts per uploaded file<\/strong> \u2014 fixed or percentage<\/li>\n<li><strong>Per-second<\/strong> (audio\/video) and <strong>per-PDF-page<\/strong> overcharge<\/li>\n<li><strong>Set the product price by the number of uploaded files<\/strong><\/li>\n<li><strong>Cloud storage<\/strong>: Dropbox, Amazon S3 and Google Drive<\/li>\n<li><strong>Approve \/ reject<\/strong> uploaded files with customer feedback<\/li>\n<li><strong>Visibility rules<\/strong> by product, category, user role, order status, payment gateway, shipping method and time<\/li>\n<li><strong>Display last order upload fields<\/strong> on the My Account dashboard<\/li>\n<li><strong>Advanced shortcodes<\/strong> to place upload forms anywhere<\/li>\n<li>Priority support and updates<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the following third-party services.<\/p>\n\n<p><strong>Freemius<\/strong> \u2014 Used to deliver plugin updates, manage the optional Premium license, and (only if you opt in) collect anonymous usage data to help improve the plugin. Your site URL and basic environment information are sent to Freemius when you activate the plugin, check for updates, or activate\/deactivate a license. Provided by Freemius, Inc.\nTerms of Service: https:\/\/freemius.com\/terms\/\nPrivacy Policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<p><strong>Cloud storage (Premium only)<\/strong> \u2014 The free version stores uploaded files on your own server and uses no external storage. If you enable a cloud storage destination in the Premium version, the files your customers upload are sent to the storage account you configure, and only at the moment an order is created (when the customer reaches the order-received\/thank-you page, or uploads files on the thank-you or order details page). Files are never sent before an order exists. Available providers and their policies:<\/p>\n\n<ul>\n<li>Dropbox \u2014 Terms: https:\/\/www.dropbox.com\/terms \u2014 Privacy: https:\/\/www.dropbox.com\/privacy<\/li>\n<li>Amazon S3 (AWS) \u2014 Service Terms: https:\/\/aws.amazon.com\/service-terms\/ \u2014 Privacy: https:\/\/aws.amazon.com\/privacy\/<\/li>\n<li>Google Drive \u2014 Google APIs Terms: https:\/\/developers.google.com\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/vanquish-upload-files-for-woocommerce<\/code> directory, or install the plugin through the WordPress Plugins screen directly.<\/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>Go to the <strong>Upload Files Configurator<\/strong> menu to create your first upload field.<\/li>\n<li>Choose on which pages the field appears (product, cart, checkout, order). Fine-grained visibility rules (by product\/category, role, gateway, shipping method and time) are available in Premium.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20without%20woocommerce%3F\"><h3>Does it work without WooCommerce?<\/h3><\/dt>\n<dd><p>No. WooCommerce must be installed and active, since uploads are bound to WooCommerce products and orders.<\/p><\/dd>\n<dt id=\"which%20product%20types%20are%20supported%3F\"><h3>Which product types are supported?<\/h3><\/dt>\n<dd><p>Native WooCommerce simple and variable products. Custom product types added by third-party plugins are not officially supported.<\/p><\/dd>\n<dt id=\"how%20many%20files%20can%20customers%20upload%20in%20the%20free%20version%3F\"><h3>How many files can customers upload in the free version?<\/h3><\/dt>\n<dd><p>The free version supports multiple upload fields per product, with one file per field \u2014 you configure how many fields to add in the Upload Files Configurator. The separately distributed Premium version adds multiple files per upload field, cloud storage (Dropbox, Amazon S3, Google Drive), the image crop editor and PDF flipbook preview, among other extras.<\/p><\/dd>\n<dt id=\"does%20it%20support%20the%20block-based%20cart%20and%20checkout%3F\"><h3>Does it support the block-based cart and checkout?<\/h3><\/dt>\n<dd><p>Yes. Both the classic (shortcode) and the block-based WooCommerce cart and checkout are supported. On the block cart\/checkout the upload fields appear in the order-summary area.<\/p><\/dd>\n<dt id=\"is%20it%20translatable%3F\"><h3>Is it translatable?<\/h3><\/dt>\n<dd><p>Yes. All button texts are translatable, and the plugin is WPML-ready \u2014 you can set distinct texts per language.<\/p><\/dd>\n<dt id=\"where%20are%20uploaded%20files%20stored%3F\"><h3>Where are uploaded files stored?<\/h3><\/dt>\n<dd><p>By default on your own server. Premium adds Dropbox, Amazon S3 and Google Drive as storage destinations.<\/p><\/dd>\n<dt id=\"can%20i%20place%20the%20upload%20form%20anywhere%20with%20shortcodes%3F%20%28premium%29\"><h3>Can I place the upload form anywhere with shortcodes? (Premium)<\/h3><\/dt>\n<dd><p>Yes. The Premium version provides shortcodes to render the upload form on any page:<\/p>\n\n<ul>\n<li><code>[vanupfi_upload_form]<\/code> - a generic upload form.<\/li>\n<li><code>[vanupfi_product_page_upload_form]<\/code> - the product-page upload form.<\/li>\n<li><code>[vanupfi_cart_page_upload_form]<\/code> - the cart upload form.<\/li>\n<li><code>[vanupfi_checkout_page_upload_form]<\/code> - the checkout upload form.<\/li>\n<li><code>[vanupfi_upload_form_last_order]<\/code> - the upload form for the customer's last order.<\/li>\n<\/ul>\n\n<p><strong>Important:<\/strong> when you place one of these forms on a page, enable <em>Disable standard upload-field management<\/em> for the matching page (in the plugin options) so the upload fields are not rendered twice. For example, if you use the product-page form shortcode, disable standard management for the Product page.<\/p>\n\n<p><strong>Migrating from the CodeCanyon version?<\/strong> The old <code>[wcuf_...]<\/code> shortcodes keep working as aliases of the new <code>[vanupfi_...]<\/code> ones, so you do not need to edit your product content.<\/p><\/dd>\n<dt id=\"i%20migrated%20from%20the%20codecanyon%20version%20and%20my%20shortcodes%20show%20as%20plain%20text%20%28premium%29\"><h3>I migrated from the CodeCanyon version and my shortcodes show as plain text (Premium)<\/h3><\/dt>\n<dd><p>The shortcode prefix changed from <code>wcuf_<\/code> to <code>vanupfi_<\/code>. Since version 1.0.11 the old tags keep working as aliases, so simply updating the plugin is enough. If you prefer to update your content, the mapping is 1:1:<\/p>\n\n<ul>\n<li><code>[wcuf_upload_form]<\/code> -&gt; <code>[vanupfi_upload_form]<\/code><\/li>\n<li><code>[wcuf_product_page_upload_form]<\/code> -&gt; <code>[vanupfi_product_page_upload_form]<\/code><\/li>\n<li><code>[wcuf_cart_page_upload_form]<\/code> -&gt; <code>[vanupfi_cart_page_upload_form]<\/code><\/li>\n<li><code>[wcuf_checkout_page_upload_form]<\/code> -&gt; <code>[vanupfi_checkout_page_upload_form]<\/code><\/li>\n<li><code>[wcuf_upload_form_last_order]<\/code> -&gt; <code>[vanupfi_upload_form_last_order]<\/code><\/li>\n<\/ul><\/dd>\n<dt id=\"how%20much%20does%20premium%20cost%3F\"><h3>How much does Premium cost?<\/h3><\/dt>\n<dd><p>You can see all Premium plans and prices on the pricing page: https:\/\/vanquishplugins.com\/migration\/pricing\/ - single site or 3, 5 and 10 sites, billed monthly, yearly, or once (lifetime). The same plans are also shown inside the plugin, under the \"Upgrade\" menu.<\/p><\/dd>\n<dt id=\"i%20bought%20this%20plugin%20on%20codecanyon.%20how%20do%20i%20get%20the%20premium%20version%3F\"><h3>I bought this plugin on CodeCanyon. How do I get the Premium version?<\/h3><\/dt>\n<dd><p>The CodeCanyon item (WooCommerce Upload Files) has been retired and continues here as the free Vanquish Upload Files for WooCommerce. Existing CodeCanyon customers can convert their purchase into a Premium license - including 1 year of updates and support at no extra cost - on the migration page: https:\/\/vanquishplugins.com\/migration\/<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.17<\/h4>\n\n<ul>\n<li>Minor improvements.<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li>Minor improvements.<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Fix: resolved a PHP 8 fatal error on the product\/cart\/checkout and order pages that could occur when the \"Info to report in the Totals area\" option had no value saved. Array-type options are now always handled safely.<\/li>\n<li>Fix: the uploaded-files summary box now renders the file list correctly (with names, previews and download links) instead of showing raw HTML text.<\/li>\n<li>Hardening: the summary box display setting is treated defensively to avoid any edge-case error.<\/li>\n<\/ul>\n\n<h4>1.0.14<\/h4>\n\n<ul>\n<li>Fix: resolved a PHP 8 fatal error on the product page (and cart\/checkout) that could occur when the \"Disable standard upload-field management\" option had no value saved. The option is now always treated as a list, so the pages render correctly.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Fix: on WordPress 6.7+, activating the plugin could break front-end product pages (a \"translation loaded too early\" notice printed into the page). The admin settings screens are no longer built on front-end requests, which resolves this and also speeds up front-end page loads.<\/li>\n<li>Internal: removed a small piece of unused, unreachable code.<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>Fix: leftover pieces of interrupted uploads were not being cleaned up from the temporary folder. They are now removed once they are more than two hours old.<\/li>\n<li>Fix: the temporary-file cleanup can no longer remove a file that a shopper has already uploaded and is still using during the same visit.<\/li>\n<li>Improvement: the clean-up of uploads whose product was removed from the cart no longer runs as a side effect of the cart fee calculation, which makes it predictable and removes a class of edge cases around order completion.<\/li>\n<li>Internal: removed a leftover admin endpoint (and its unused scripts) from the days when the plugin asked to restore the classic Cart\/Checkout templates. Blocks have been supported since 1.0.4.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Fix: the upload-form shortcodes are now always registered, so WordPress no longer prints the raw <code>[vanupfi_...]<\/code> tag on the storefront when the Premium code is not active. Store administrators see a short explanation instead; visitors see nothing.<\/li>\n<li>Improvement: the legacy <code>[wcuf_...]<\/code> shortcodes from the CodeCanyon version now work as aliases of the current <code>[vanupfi_...]<\/code> ones, so migrated sites do not need to edit their product content.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Fix: uploaded files could be lost (neither moved to the destination folder nor attached to the order) when placing an order through the classic\/shortcode checkout while the \"Checkout - Files to order association method\" option was set to the \"Thank you page\" value. Files are now correctly associated across all checkout types.<\/li>\n<li>Fix: resolved a PHP 8 fatal error (\"Unsupported operand types\") that could occur on some configurations while rendering the frontend styles.<\/li>\n<li>Improvement: more robust parsing of the server PHP size limits (post_max_size \/ upload_max_filesize) and general dead-code cleanup.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Internal: updated the HTTP library (Guzzle) bundled with the premium cloud-storage integrations to v7, to prevent version conflicts with other plugins. No functional changes to the free version.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Internal: Updated the Freemius SDK to the latest version.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Internal: PSR-4 SPL autoloader for the plugin classes; bootstrap simplified and dead code removed. No functional or user-facing changes.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed: in the free version the upload area did not appear on the Cart block; it now loads correctly.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed: on some block-based (FSE) themes the upload area did not appear on the Cart block; the upload fields now load correctly there. The Checkout block was unaffected.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>WooCommerce Cart\/Checkout blocks: upload fields now work with the block-based cart and checkout, in addition to the classic (shortcode) templates.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Internal refactor: introduced PSR-4 namespacing and dropped the legacy class-name prefixes. No functional or user-facing changes.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>First public release on WordPress.org.<\/li>\n<\/ul>","raw_excerpt":"Let customers upload files on the product, cart, checkout and order pages \u2014 for custom, personalized and print-on-demand products.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321599"}],"author":[{"embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vanquish83"}],"wp:attachment":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321599"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321599"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321599"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321599"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321599"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}