{"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-10-26T07:54:15","modified_gmt":"2026-10-26T07:54:15","slug":"vanquish-upload-files-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/it.wordpress.org\/plugins\/vanquish-upload-files-for-woocommerce\/","author":14329766,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.7.4","stable_tag":"2.7.4","tested":"7.1.3","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":"f7f8f5","last_updated":"2026-10-26 07:54:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/vanquishplugins.com\/plugins\/upload-files\/","header_author_uri":"https:\/\/vanquishplugins.com\/","rating":4.6,"author_block_rating":0,"active_installs":20,"downloads":4656,"num_ratings":9,"support_threads":2,"support_threads_resolved":2,"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","revision":3600594},"1.0.11":{"tag":"1.0.11","author":"vanquish83","date":"2026-07-10 07:37:23","revision":3602346},"1.0.12":{"tag":"1.0.12","author":"vanquish83","date":"2026-07-10 10:33:52","revision":3602580},"1.0.13":{"tag":"1.0.13","author":"vanquish83","date":"2026-07-12 16:34:27","revision":3605007},"1.0.14":{"tag":"1.0.14","author":"vanquish83","date":"2026-07-12 20:30:23","revision":3605180},"1.0.15":{"tag":"1.0.15","author":"vanquish83","date":"2026-07-13 13:45:59","revision":3606138},"1.0.16":{"tag":"1.0.16","author":"vanquish83","date":"2026-07-14 08:20:41","revision":3607092},"1.0.17":{"tag":"1.0.17","author":"vanquish83","date":"2026-07-15 07:21:55","revision":3608357},"1.0.2":{"tag":"1.0.2","author":"vanquish83","date":"2026-06-29 18:54:23","revision":3590517},"1.0.3":{"tag":"1.0.3","author":"vanquish83","date":"2026-07-01 15:53:54","revision":3592928},"1.0.4":{"tag":"1.0.4","author":"vanquish83","date":"2026-07-02 15:49:37","revision":3594254},"1.0.5":{"tag":"1.0.5","author":"vanquish83","date":"2026-07-02 17:00:45","revision":3594305},"1.0.6":{"tag":"1.0.6","author":"vanquish83","date":"2026-07-03 23:04:54","revision":3595591},"1.0.7":{"tag":"1.0.7","author":"vanquish83","date":"2026-07-04 10:48:54","revision":3595898},"1.0.8":{"tag":"1.0.8","author":"vanquish83","date":"2026-07-06 14:54:24","revision":3597954},"1.0.9":{"tag":"1.0.9","author":"vanquish83","date":"2026-07-08 05:48:09","revision":3599794},"1.1.0":{"tag":"1.1.0","author":"vanquish83","date":"2026-07-21 15:17:53","revision":3617363},"1.10.0":{"tag":"1.10.0","author":"vanquish83","date":"2026-10-09 14:03:39","revision":3736817},"1.11.0":{"tag":"1.11.0","author":"vanquish83","date":"2026-10-09 16:43:49","revision":3737088},"1.12.0":{"tag":"1.12.0","author":"vanquish83","date":"2026-10-09 19:47:53","revision":3737262},"1.12.1":{"tag":"1.12.1","author":"vanquish83","date":"2026-10-10 09:18:20","revision":3737830},"1.12.2":{"tag":"1.12.2","author":"vanquish83","date":"2026-10-10 17:13:56","revision":3738416},"1.2.0":{"tag":"1.2.0","author":"vanquish83","date":"2026-07-29 17:38:39","revision":3627548},"1.3.0":{"tag":"1.3.0","author":"vanquish83","date":"2026-07-30 09:42:30","revision":3628328},"1.3.1":{"tag":"1.3.1","author":"vanquish83","date":"2026-07-31 08:02:10","revision":3629603},"1.3.10":{"tag":"1.3.10","author":"vanquish83","date":"2026-09-09 06:31:14","revision":3687690},"1.3.11":{"tag":"1.3.11","author":"vanquish83","date":"2026-09-09 18:27:08","revision":3688838},"1.3.12":{"tag":"1.3.12","author":"vanquish83","date":"2026-09-10 05:53:42","revision":3689334},"1.3.13":{"tag":"1.3.13","author":"vanquish83","date":"2026-09-10 07:55:50","revision":3689509},"1.3.14":{"tag":"1.3.14","author":"vanquish83","date":"2026-09-11 08:48:47","revision":3691070},"1.3.15":{"tag":"1.3.15","author":"vanquish83","date":"2026-09-16 13:53:50","revision":3698705},"1.3.16":{"tag":"1.3.16","author":"vanquish83","date":"2026-09-21 17:42:38","revision":3706053},"1.3.17":{"tag":"1.3.17","author":"vanquish83","date":"2026-09-22 09:09:39","revision":3706947},"1.3.18":{"tag":"1.3.18","author":"vanquish83","date":"2026-09-22 09:49:13","revision":3707009},"1.3.19":{"tag":"1.3.19","author":"vanquish83","date":"2026-09-22 14:34:04","revision":3707573},"1.3.2":{"tag":"1.3.2","author":"vanquish83","date":"2026-07-31 08:42:00","revision":3629666},"1.3.20":{"tag":"1.3.20","author":"vanquish83","date":"2026-09-23 08:05:48","revision":3708786},"1.3.21":{"tag":"1.3.21","author":"vanquish83","date":"2026-09-23 12:57:07","revision":3709366},"1.3.3":{"tag":"1.3.3","author":"vanquish83","date":"2026-08-10 08:05:50","revision":3640187},"1.3.4":{"tag":"1.3.4","author":"vanquish83","date":"2026-08-21 16:05:25","revision":3659330},"1.3.5":{"tag":"1.3.5","author":"vanquish83","date":"2026-08-21 17:27:53","revision":3659440},"1.3.6":{"tag":"1.3.6","author":"vanquish83","date":"2026-08-24 14:53:59","revision":3663717},"1.3.7":{"tag":"1.3.7","author":"vanquish83","date":"2026-09-01 07:44:42","revision":3675568},"1.3.8":{"tag":"1.3.8","author":"vanquish83","date":"2026-09-03 08:28:21","revision":3679338},"1.3.9":{"tag":"1.3.9","author":"vanquish83","date":"2026-09-08 11:07:22","revision":3686452},"1.4.0":{"tag":"1.4.0","author":"vanquish83","date":"2026-09-23 16:11:32","revision":3709663},"1.4.1":{"tag":"1.4.1","author":"vanquish83","date":"2026-09-24 07:45:14","revision":3710784},"1.5.0":{"tag":"1.5.0","author":"vanquish83","date":"2026-09-24 11:59:36","revision":3711231},"1.5.1":{"tag":"1.5.1","author":"vanquish83","date":"2026-09-24 14:23:03","revision":3711485},"1.5.2":{"tag":"1.5.2","author":"vanquish83","date":"2026-09-25 08:09:46","revision":3712633},"1.6.0":{"tag":"1.6.0","author":"vanquish83","date":"2026-09-26 08:58:47","revision":3714021},"1.6.1":{"tag":"1.6.1","author":"vanquish83","date":"2026-09-28 08:16:15","revision":3716617},"1.6.2":{"tag":"1.6.2","author":"vanquish83","date":"2026-09-28 10:11:29","revision":3716859},"1.6.3":{"tag":"1.6.3","author":"vanquish83","date":"2026-09-30 14:04:12","revision":3721403},"1.7.0":{"tag":"1.7.0","author":"vanquish83","date":"2026-10-02 17:26:28","revision":3725184},"1.8.0":{"tag":"1.8.0","author":"vanquish83","date":"2026-10-05 08:21:54","revision":3728387},"1.8.1":{"tag":"1.8.1","author":"vanquish83","date":"2026-10-07 14:03:06","revision":3732726},"1.8.2":{"tag":"1.8.2","author":"vanquish83","date":"2026-10-08 09:52:13","revision":3734174},"1.8.3":{"tag":"1.8.3","author":"vanquish83","date":"2026-10-08 11:59:22","revision":3734473},"1.9.0":{"tag":"1.9.0","author":"vanquish83","date":"2026-10-09 09:34:35","revision":3736310},"1.9.1":{"tag":"1.9.1","author":"vanquish83","date":"2026-10-09 11:37:43","revision":3736518},"2.0.0":{"tag":"2.0.0","author":"vanquish83","date":"2026-10-11 19:45:09","revision":3740034},"2.0.1":{"tag":"2.0.1","author":"vanquish83","date":"2026-10-12 07:17:56","revision":3740697},"2.0.2":{"tag":"2.0.2","author":"vanquish83","date":"2026-10-13 17:58:44","revision":3744634},"2.0.3":{"tag":"2.0.3","author":"vanquish83","date":"2026-10-14 08:43:38","revision":3745746},"2.1.0":{"tag":"2.1.0","author":"vanquish83","date":"2026-10-14 13:24:30","revision":3746480},"2.1.1":{"tag":"2.1.1","author":"vanquish83","date":"2026-10-16 09:15:48","revision":3750009},"2.1.2":{"tag":"2.1.2","author":"vanquish83","date":"2026-10-19 06:51:43","revision":3754132},"2.2.0":{"tag":"2.2.0","author":"vanquish83","date":"2026-10-19 09:11:21","revision":3754372},"2.3.0":{"tag":"2.3.0","author":"vanquish83","date":"2026-10-20 09:46:44","revision":3756345},"2.4.0":{"tag":"2.4.0","author":"vanquish83","date":"2026-10-20 19:47:06","revision":3757382},"2.5.0":{"tag":"2.5.0","author":"vanquish83","date":"2026-10-21 10:28:08","revision":3758134},"2.6.0":{"tag":"2.6.0","author":"vanquish83","date":"2026-10-21 15:41:07","revision":3758645},"2.6.1":{"tag":"2.6.1","author":"vanquish83","date":"2026-10-21 19:12:04","revision":3758951},"2.7.0":{"tag":"2.7.0","author":"vanquish83","date":"2026-10-21 20:10:51","revision":3759024},"2.7.1":{"tag":"2.7.1","author":"vanquish83","date":"2026-10-22 09:12:08","revision":3759608},"2.7.2":{"tag":"2.7.2","author":"vanquish83","date":"2026-10-25 19:45:52","revision":3765174},"2.7.3":{"tag":"2.7.3","author":"vanquish83","date":"2026-10-26 07:21:29","revision":3765715},"2.7.4":{"tag":"2.7.4","author":"vanquish83","date":"2026-10-26 07:54:15","revision":3765769}},"upgrade_notice":{"2.7.4":"<p>With Vanquish Attach Me 1.8.0 or later, a withdrawn proof no longer asks the customer to approve it.<\/p>","2.7.3":"<p>Important: fixes a fatal error of 2.7.2 with plugins such as Really Simple Security, and a security issue on the order pages. Update as soon as possible.<\/p>","2.7.2":"<p>Fixes the Add to cart button that stayed disabled after uploading the file of a required upload field (a regression of 2.7.1): recommended for every store on 2.7.1. Moving from the CodeCanyon version, your own translation of the old plugin is used where the texts did not change.<\/p>","2.7.1":"<p>A &quot;Replace&quot; button on upload fields of one file, and the Table Rate Shipping visibility rules fixed. If your theme has its own copy of field.php (upload-form or order), compare it with the new one.<\/p>","2.7.0":"<p>A new look for the uploaded files in the emails, a clearer &quot;new files&quot; notice and an approval email that lists what changed. If your theme has its own copy of the plugin&#039;s email templates, compare it with the new ones.<\/p>","2.6.1":"<p>The uploads summary and the upload titles no longer list every attribute value of a product. If your theme has its own copy of upload-form.php (cart or order page), compare it with the new one.<\/p>","2.6.0":"<p>Send your customer a proof of an uploaded file with Vanquish Attach Me Premium, and see its state next to the file. The costs of the uploaded files now follow the shop&#039;s price format.<\/p>","2.5.0":"<p>A new look for the uploaded files in the shop: tiles under the cart items, a summary box product by product, and a new upload area. If your theme has its own copy of the plugin&#039;s templates, compare it with the new ones.<\/p>","2.4.0":"<p>Premium: the uploaded files now work with Vanquish Request a Quote. Fixes for the classic cart previews, a deprecation notice on order pages and emails, and Settings &gt; Appearance &gt; Several fields per row.<\/p>","2.3.0":"<p>A new look for the uploaded files on the admin order page: file tiles, an image lightbox, and a compact box where deleting a file no longer reloads the page.<\/p>","2.2.0":"<p>Uploaded images can be stored as lighter JPEG files (Premium), and the upload field editor has a new header and tabs.<\/p>","2.1.2":"<p>Fixes a checkout refusing orders with &quot;requires a minimum of 1 file(s)&quot; on separate cart items whose files were uploaded before the setting was turned on.<\/p>","2.1.1":"<p>Security fix for Google Drive storage: the OAuth file with your client secret leaves the Media Library. Also fixes the extra costs in the product page totals.<\/p>","2.1.0":"<p>A new Settings page with four tabs and clearer settings, and a fix for products disappearing from a customer&#039;s cart when another visitor&#039;s uploaded files expired.<\/p>"},"ratings":{"1":1,"2":0,"3":0,"4":0,"5":8},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3756203,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3756203,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3756203,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3757383,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3757383,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3765770,"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","1.1.0","1.10.0","1.11.0","1.12.0","1.12.1","1.12.2","1.2.0","1.3.0","1.3.1","1.3.10","1.3.11","1.3.12","1.3.13","1.3.14","1.3.15","1.3.16","1.3.17","1.3.18","1.3.19","1.3.2","1.3.20","1.3.21","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.8","1.3.9","1.4.0","1.4.1","1.5.0","1.5.1","1.5.2","1.6.0","1.6.1","1.6.2","1.6.3","1.7.0","1.8.0","1.8.1","1.8.2","1.8.3","1.9.0","1.9.1","2.0.0","2.0.1","2.0.2","2.0.3","2.1.0","2.1.1","2.1.2","2.2.0","2.3.0","2.4.0","2.5.0","2.6.0","2.6.1","2.7.0","2.7.1","2.7.2","2.7.3","2.7.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3758135,"resolution":"1","location":"assets","locale":"","width":1600,"height":1180},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3758135,"resolution":"2","location":"assets","locale":"","width":1225,"height":1005},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3758135,"resolution":"3","location":"assets","locale":"","width":1000,"height":850},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3758135,"resolution":"4","location":"assets","locale":"","width":1240,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3758135,"resolution":"5","location":"assets","locale":"","width":1600,"height":1250},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3758135,"resolution":"6","location":"assets","locale":"","width":705,"height":1178},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3758135,"resolution":"7","location":"assets","locale":"","width":1300,"height":880}},"screenshots":{"1":"The Upload fields page - create and arrange your upload fields.","2":"The upload area on the product page: the files as tiles, and \"Add more files\" (several files per field: Premium).","3":"The classic cart: the files of each product with their cost, and the upload area.","4":"The uploads summary after the block cart, product by product.","5":"Uploaded files on the admin order page: a tile per file under each item, an image lightbox, and a compact box to download, approve (Premium) or delete each file.","6":"The uploads summary on the customer's order page, with approval status (Premium) and download.","7":"The Cleaner (Premium) - delete the files of old orders, on request or automatically every night."}},"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=3757383","banner_2x":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/banner-1544x500.png?rev=3757383","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/icon.svg?rev=3756203","icon":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/icon.svg?rev=3756203","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-1.png?rev=3758135","caption":"The Upload fields page - create and arrange your upload fields."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-2.png?rev=3758135","caption":"The upload area on the product page: the files as tiles, and \"Add more files\" (several files per field: Premium)."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-3.png?rev=3758135","caption":"The classic cart: the files of each product with their cost, and the upload area."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-4.png?rev=3758135","caption":"The uploads summary after the block cart, product by product."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-5.png?rev=3758135","caption":"Uploaded files on the admin order page: a tile per file under each item, an image lightbox, and a compact box to download, approve (Premium) or delete each file."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-6.png?rev=3758135","caption":"The uploads summary on the customer's order page, with approval status (Premium) and download."},{"src":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/screenshot-7.png?rev=3758135","caption":"The Cleaner (Premium) - delete the files of old orders, on request or automatically every night."}],"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 files you need to fulfill their orders, with a clean upload experience and a real-time progress bar.<\/p>\n\n<p><strong>Large files are handled properly.<\/strong> Every upload is split into chunks and reassembled on the server, so a single request never runs into the size limit your host or CDN enforces \u2014 the usual cause of an upload that dies at 90% with no explanation.<\/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 \u2014 upload field texts get a box per language, with or without WPML.<\/li>\n<li><strong>Handle large files on any host<\/strong> \u2014 uploads are split into chunks, so no single request runs into your server's or your CDN's size limit.<\/li>\n<\/ul>\n\n<h4>What's included for free<\/h4>\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>Require an upload before add-to-cart or checkout<\/li>\n<li>File type, size and dimension restrictions<\/li>\n<li>Accept extra file types for uploads - EPS, AI, CDR and other print formats WordPress refuses by default<\/li>\n<li>Email notifications for the shop, and the uploaded files in the order emails \u2013 one row per file, with a thumbnail and a download link<\/li>\n<li>Upload progress bar, file delete, and a tile for every uploaded file - its preview or a label of its type - in the upload area, under the cart items and in a summary box<\/li>\n<li>Light or dark colour scheme for the upload boxes, and your own colours for the upload buttons, to match your theme<\/li>\n<li><strong>Chunked uploads for large files<\/strong> \u2014 with automatic retry on a failed chunk<\/li>\n<li>Translatable button texts, and a box per language for every upload field text<\/li>\n<li><strong>Send a proof<\/strong> of an uploaded file with Vanquish Attach Me (its Premium): a button on each file of the order, and the state of the proof next to the file, for you and for your customer<\/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, and download all the files of a field as one zip when they are kept on your server<\/li>\n<li><strong>Image crop editor<\/strong> with rotation and aspect-ratio control<\/li>\n<li><strong>Low print resolution warning<\/strong> \u2014 tell customers when a photo has too few pixels for the size it will be printed at<\/li>\n<li><strong>iPhone photos (HEIC) converted to JPEG<\/strong> in the customer's browser, so they can be previewed, cropped and checked like any photo<\/li>\n<li><strong>Compress images<\/strong> - store uploaded photos as lighter JPEG files, compressed and resized to a longest side, to save disk space<\/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), <strong>per-file-size<\/strong> and <strong>per-PDF-page<\/strong> surcharges<\/li>\n<li><strong>Set the product price based on the number of uploaded files<\/strong><\/li>\n<li><strong>Cloud storage<\/strong>: Dropbox, Amazon S3 and Google Drive<\/li>\n<li><strong>File name pattern<\/strong> - rename uploaded files with the order number, SKU, product name and more<\/li>\n<li><strong>Upload protection<\/strong> - a per-visitor upload limit and a minimum free disk space, so nobody can fill your server through the upload fields<\/li>\n<li><strong>Clean up old uploads<\/strong> - delete the files of old orders by age and order status, on request or automatically every night<\/li>\n<li><strong>Approve \/ reject<\/strong> uploaded files with customer feedback<\/li>\n<li><strong>Visibility rules<\/strong> by product, category, tag, brand, user role, order status, payment gateway, shipping method and time<\/li>\n<li><strong>Show the upload fields from the last order<\/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<p>Screenshots, plans and answers on the plugin's page: <a href=\"https:\/\/vanquishplugins.com\/plugins\/upload-files\/\">vanquishplugins.com\/plugins\/upload-files<\/a>.<\/p>\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<h4>More WooCommerce plugins by Vanquish<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/vanquish-shipping-tracking-for-woocommerce\/\">Vanquish Shipping Tracking for WooCommerce<\/a> - tracking numbers on orders and emails, with 1,600+ carriers and their logos, a direct tracking link and a Track button. No account needed.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/vanquish-multiple-addresses-for-woocommerce\/\">Vanquish Multiple Addresses for WooCommerce<\/a> - give customers an address book: save multiple billing and shipping addresses and pick one at checkout.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/vanquish-attach-me-for-woocommerce\/\">Vanquish Attach Me - Order &amp; Product Attachments for WooCommerce<\/a> - attach files to orders and products, show them to the customer and send them with the order emails.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/vanquish-request-a-quote-for-woocommerce\/\">Vanquish Request a Quote for WooCommerce<\/a> - a quote list, a request form, quotes you price as orders, and online payment once the quote is accepted. With Upload Files Premium, the files customers upload go with their quote.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/vanquish-order-approval-for-woocommerce\/\">Vanquish Order Approval for WooCommerce<\/a> - review every order before it goes ahead, and let the customer pay before or after you approve it.<\/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 <strong>Upload Files for WooCommerce \u2192 Upload fields<\/strong> to create your first upload field; the general settings are under <strong>Settings<\/strong>.<\/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 on the Upload fields page. The separately distributed Premium version adds multiple files per upload field, cloud storage (Dropbox, Amazon S3, Google Drive), the image crop editor and full PDF preview, among other extras.<\/p><\/dd>\n<dt id=\"can%20customers%20upload%20large%20files%3F\"><h3>Can customers upload large files?<\/h3><\/dt>\n<dd><p>Yes, and there is nothing to configure. Every upload is split into chunks in the browser and reassembled on the server, so the file never travels as a single request - which is what usually produces a 413 error behind Cloudflare, a reverse proxy, or a host with a low <code>post_max_size<\/code>.<\/p>\n\n<p>The chunk size is taken from your own server limits - the smaller of <code>post_max_size<\/code> and <code>upload_max_filesize<\/code> - and never exceeds 10 MB, however large the file is. If a chunk fails it is retried on its own instead of restarting the whole upload, and the server checks the reassembled file against the size the browser reported before accepting it.<\/p>\n\n<p>This works in the free version too. What still applies is the maximum size you set on the upload field itself, along with your server's disk space and PHP execution time.<\/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=\"does%20it%20work%20with%20vanquish%20request%20a%20quote%3F%20%28premium%29\"><h3>Does it work with Vanquish Request a Quote? (Premium)<\/h3><\/dt>\n<dd><p>Yes. With <a href=\"https:\/\/wordpress.org\/plugins\/vanquish-request-a-quote-for-woocommerce\/\">Vanquish Request a Quote for WooCommerce<\/a> 1.0.3 or newer, the files a customer uploads on the product page go with the product when it is added to the quote list, and reach the quote when the request is sent. Required upload fields are required for a quote too: the request is not sent until their files are there. The quote list shows the files under each product (Request a Quote 1.0.4 or newer), the customer sees them on the quote's page, and you see them on the quote's page in the admin, as for an order.<\/p><\/dd>\n<dt id=\"can%20i%20send%20the%20customer%20a%20proof%20of%20their%20file%20to%20approve%3F\"><h3>Can I send the customer a proof of their file to approve?<\/h3><\/dt>\n<dd><p>Yes, with <a href=\"https:\/\/wordpress.org\/plugins\/vanquish-attach-me-for-woocommerce\/\">Vanquish Attach Me for WooCommerce<\/a> Premium, 1.6.3 or newer. On the admin order page every uploaded file has a \"Send a proof\" button: it opens Attach Me's proof form with a title and a message already written, and you choose the proof and save it. The state of the proof - to approve, approved, changes requested - appears next to the file, on the order page in the admin and on the customer's order page, where the customer approves it or asks for changes. This works with the free version of Upload Files too.<\/p><\/dd>\n<dt id=\"is%20it%20translatable%3F\"><h3>Is it translatable?<\/h3><\/dt>\n<dd><p>Yes, and it does not depend on any one translation plugin. Button texts are translatable, and every text of an upload field \u2014 title, description, disclaimer and the rest \u2014 has a box per language in the Translations tab of the field itself. That works with WPML, with Polylang, or with nothing more than the languages installed in WordPress.<\/p>\n\n<p>If you have been translating those texts in WPML String Translation, they are moved over automatically the first time you open the admin after updating, and nothing is deleted from WPML.<\/p><\/dd>\n<dt id=\"customers%20upload%20files%2C%20but%20the%20order%20shows%20none.%20what%20should%20i%20check%3F\"><h3>Customers upload files, but the order shows none. What should I check?<\/h3><\/dt>\n<dd><p>The uploads stay in a visitor session until the order is created, and the session is identified by a cookie named <code>vanupfi_uid<\/code>. If that cookie does not survive from the upload to the checkout, the order is created with nothing attached.<\/p>\n\n<p>Turn on <strong>Settings \u2192 General \u2192 Debug log<\/strong> and place a test order. The plugin records when each file was saved, which order events WooCommerce fired, whether the uploads were still reachable at each one, and whether they were attached to the order. Read it under <strong>WooCommerce \u2192 Status \u2192 Logs<\/strong>, source <code>vanquish-upload-files<\/code>. If nothing appears there, check that logging is enabled in that screen's settings. Then check, in this order:<\/p>\n\n<ol>\n<li>Is the <code>vanupfi_uid<\/code> cookie present in the browser while on the checkout page? The most common cause of a missing one is a <strong>cookie consent banner<\/strong>, which blocks cookies it does not recognise until consent is given. A full-page cache or a CDN dropping the <code>Set-Cookie<\/code> header does the same.<\/li>\n<li>How long passes between the upload and the completed order, compared with <strong>Settings \u2192 General \u2192 Keep files of visitors who have not ordered (minutes)<\/strong>? When that time elapses the session is deleted, and the temporary files go with it.<\/li>\n<li>If both look right, deactivate your other plugins, confirm that a test order keeps its files, then re-enable them one at a time.<\/li>\n<\/ol>\n\n<p>Temporary uploads live in <code>wp-content\/uploads\/wcuf\/tmp\/<\/code>; files attached to an order live in <code>wp-content\/uploads\/wcuf\/<\/code>, in a subfolder per order.<\/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 the product, cart or checkout page, tick that page in <strong>Settings \u2192 General \u2192 Your own layout \u2192 Place the upload area with a shortcode<\/strong>, so the plugin stops drawing its own upload area there and the fields are not shown twice. For example, if you use the product-page form shortcode, tick <em>Product page<\/em>. Two things to know: required upload fields stay required, so a ticked page without its shortcode leaves the customer unable to complete the order; and the option is for the classic cart and checkout only - on the block cart and checkout, add the <strong>Upload fields<\/strong> block instead.<\/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=\"will%20my%20translations%20of%20the%20old%20plugin%20carry%20over%3F\"><h3>Will my translations of the old plugin carry over?<\/h3><\/dt>\n<dd><p>Partly, and on their own. The CodeCanyon version (WooCommerce Upload Files) was translated under another text domain, <code>woocommerce-files-upload<\/code>. The languages it came with - German, Spanish, French, Italian, Polish and Portuguese (Brazil) - are in this plugin too. If you made your own translation of the old plugin, with Loco Translate or into another language, since version 2.7.2 the plugin reads it for the texts that did not change - about one in seven, among them the upload buttons and messages your customers see - whenever it has no translation of its own for them. Your old files are only read, never changed, and the old plugin does not need to stay installed. The other texts are new: translate them with Loco Translate under the new text domain, <code>vanquish-upload-files-for-woocommerce<\/code>, or on translate.wordpress.org.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20templates%3F\"><h3>Can I customize the templates?<\/h3><\/dt>\n<dd><p>Yes. Copy the template you want to change from the plugin's <code>templates<\/code> folder into a <code>vanquish-upload-files<\/code> folder of your theme (a child theme is best), keeping its sub-folder: <code>templates\/order\/upload-form.php<\/code>, for example, becomes <code>your-theme\/vanquish-upload-files\/order\/upload-form.php<\/code>. The plugin then uses your copy instead of its own. Copies made for versions before 1.10.0, in the theme's <code>wcuf<\/code> folder under the old file names, keep working. When the plugin changes a template you have copied, its admin pages tell you, so you can bring your copy up to date.<\/p><\/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=\"can%20i%20try%20the%20plugin%20before%20buying%20premium%3F\"><h3>Can I try the plugin before buying Premium?<\/h3><\/dt>\n<dd><p>Yes, and it is strongly recommended. The free version on WordPress.org is the same plugin with fewer features: install it on your own site, with your own theme, and check that the upload fields fit your product, cart and checkout pages before upgrading. Premium adds features on top of it, on the same foundations.<\/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>2.7.4<\/h4>\n\n<ul>\n<li>Fix (with Vanquish Attach Me 1.8.0 or later): a proof the shop withdrew showed as \"Waiting\" on the admin order page and as \"To approve\" to the customer and in the emails. It now reads \"Withdrawn\" for the shop only, and the customer no longer sees its state.<\/li>\n<\/ul>\n\n<h4>2.7.3<\/h4>\n\n<ul>\n<li>Fix: with another plugin that reads the scheduled tasks early (Really Simple Security, among others), version 2.7.2 stopped the whole site with a fatal error.<\/li>\n<li>Security: on the order details and Thank you pages, files can be added to a guest's order only from that order's page.<\/li>\n<li>Fix: when \"Replace\" was refused (the order changed status, or the file was approved meanwhile), the new file was added next to the old one in a field of one file.<\/li>\n<li>Fix (Premium): with WooCommerce Table Rate Shipping 3.x calculating per order, an upload field limited to its shipping method never showed in the cart and checkout. The field editor offers its rates one by one again; a rule saved with the whole method keeps all its rates ticked.<\/li>\n<li>Fix: a \"translation loaded too early\" notice when another plugin read the scheduled tasks before WordPress was ready.<\/li>\n<\/ul>\n\n<h4>2.7.2<\/h4>\n\n<ul>\n<li>Fix: after uploading the file of a required upload field of one file, the Add to cart button stayed disabled; the \"Place order\" button of the classic checkout and the warning when leaving the page could still ask for the file. A regression of 2.7.1.<\/li>\n<li>New: moving from the CodeCanyon version, your own translation of the old plugin (Loco Translate, or a language it did not come with) is used for the texts that did not change, while this plugin has no translation of its own for them. Nothing is copied or changed, and the old plugin does not need to stay installed. See the FAQ \"Will my translations of the old plugin carry over?\".<\/li>\n<\/ul>\n\n<h4>2.7.1<\/h4>\n\n<ul>\n<li>New: a \"Replace\" button on an upload field of one file, next to Delete: the customer chooses a new file and it takes the place of the old one, which is removed only once the new one has arrived. On the product, cart and checkout pages always; on the order details and Thank you pages with the rules of Delete (\"The customer can delete the files\" and the order statuses ticked; with file approval, only a rejected file), and the new file waits for approval again.<\/li>\n<li>Fix (Premium): in the \"Shipping method\" visibility rule, the rates of Table Rate Shipping by Bolder Elements and of WooCommerce Table Rate Shipping were never matched on the order details and Thank you pages, and those of WooCommerce Table Rate Shipping calculated per item, line or class not even in the cart and checkout: the upload field stayed hidden.<\/li>\n<li>Fix: a PHP 8.1+ deprecation notice (\"Implicit conversion from float ... to int loses precision\") wherever a length of audio or video was shown.<\/li>\n<li>Translations: the customer texts of the emails and the states of the proofs in German, Spanish, French, Italian, Polish and Portuguese (Brazil).<\/li>\n<li>Tweak: in the field editor, the section titles stand out from the options. In the General tab, \"Rules\" is now \"Rules and permissions\", with the switches to let the customer delete and download the files (they were in \"Extras\", now \"More options\").<\/li>\n<li>Templates changed: upload-form\/field.php, order\/field.php.<\/li>\n<\/ul>\n\n<h4>2.7.0<\/h4>\n\n<ul>\n<li>New: a new look for the uploaded files in the emails. In WooCommerce's order emails (under each product), in the files block of the shop's \"New order\" email, in the \"new files\" notice and in the approval email, every file is a row: its thumbnail or the label of its type, its name (the download link, when the reader may download it), type, pages or length, size and quantity, its approval status and the shop's note. Past 8 files per field, a link to the order. Thumbnails for files kept on your server, on Dropbox and on Google Drive.<\/li>\n<li>New: the \"new files\" notice says whether the files came with the order, from the order page or with a quote request, and has the customer's details and a button to the order.<\/li>\n<li>New: the approval email lists only the files whose status changed, with the shop's note, and links to the order.<\/li>\n<li>New: plain-text emails get a list of the files, one per line, instead of raw HTML.<\/li>\n<li>New (with Vanquish Attach Me Premium): the state of each file's proof in the emails.<\/li>\n<li>Fix: the approval email was not sent at all when one of the fields changed in the same save had its notification turned off.<\/li>\n<li>Fix: the approval email could show the statuses from before the save.<\/li>\n<li>Fix: with several recipients of the \"new files\" notice, the second one got the first one's attachments.<\/li>\n<li>Fix: on stores that renumber their orders, the order link in the \"new files\" notice and the order number in the approval email's subject used the order's internal id.<\/li>\n<li>Tweak: in the field editor, the \"Files in the \"New order\" email\" section is now \"New order email\".<\/li>\n<li>Templates changed: emails\/order-item-uploads.php, emails\/admin-new-order-files.php.<\/li>\n<\/ul>\n\n<h4>2.6.1<\/h4>\n\n<ul>\n<li>Fix: the title stored with an upload listed every value of every attribute of the product (for a variation, of its variable product): \"Upload your file (PD-6 Material: ..., Color: Black, Graphite, Light grey, ...)\". It now names the product, with the attributes only for a simple product when \"Display the simple product name with attributes\" is on.<\/li>\n<li>Fix: the uploads summary, the files under the cart items, the admin order page and the quote list show the upload field's title, also for uploads made before this version.<\/li>\n<li>Templates changed: upload-form\/upload-form.php, order\/upload-form.php.<\/li>\n<\/ul>\n\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>New: \"Send a proof\" with Vanquish Attach Me (its Premium, version 1.6.3 or later): a button on each uploaded file on the admin order page opens Attach Me's proof form already filled in, and the state of the proof (to approve, approved, changes requested) is shown next to the file, for the shop and for the customer.<\/li>\n<li>New: when Attach Me Premium is not installed, one line in the order's \"Uploaded files\" box presents it; it can be closed for good.<\/li>\n<li>Fix: the costs of the uploaded files are shown with the shop's decimals and separators (\"$1.50\", not \"$1.5\").<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>New: a new look for the uploaded files in the shop. Under each product of the classic cart and checkout, and in the Request a Quote list (Premium), every file is a tile of the same size - an image with its preview, a PDF or any other file with a label of its type - with its size, quantity and cost; past 7 files the others fold into a \"+N\" tile. Click an image to see it full size in a lightbox.<\/li>\n<li>New: the summary box (Settings &gt; Appearance) shows the files product by product, then field by field, as tiles. It now comes after the products: after the products table of the classic cart, above the payment of the classic checkout, after the whole block cart and checkout (full width, or under the Upload files block when you placed it in the checkout), and after the order table of the Thank you and order details pages, where each file shows its approval status, the shop's note and a download button. It used to show the files of only one of two products whose upload fields had the same title.<\/li>\n<li>New: a new look for the upload area. One box per field, with what it accepts on one line; a drop zone that becomes \"Add more files\" after an upload; the chosen files with a - \/ + quantity (Premium); one progress bar for the whole field, with the amount sent; the uploaded files as tiles, with delete and download. \"Delete uploaded file(s)\" is now readable on the block cart and checkout, where it was light text on light grey.<\/li>\n<li>New (Premium): on the quote's page of Request a Quote, the files are shown as on the order pages.<\/li>\n<li>Improvement: on the product, cart and checkout pages, deleting a file asks for a confirmation first, as on the order pages.<\/li>\n<li>Fix: after deleting the last file of an upload field and uploading another, the new file could take the page count of the deleted one (PDF page costs).<\/li>\n<li>Fix: on the block cart, removing a product left its upload fields on screen until the page was reloaded.<\/li>\n<li>Tweak: the settings \"Thumbnails of the chosen files: size\" and \"fit\" are gone: each chosen file now has a thumbnail of fixed size.<\/li>\n<li>Templates changed: upload-form\/upload-form.php, upload-form\/field.php, order\/upload-form.php, order\/field.php. If your theme has a copy of them, compare it with the new ones (an old copy of upload-form.php still prints the old summary box as well).<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>New (Premium): works with Vanquish Request a Quote for WooCommerce (1.0.3 or newer). The files a customer uploads on the product page go with the product into the quote list, are shown under it there (Request a Quote 1.0.4 or newer) and reach the quote when the request is sent, with the same check of required uploads as the checkout. \"Add to quote\" waits for the required uploads like \"Add to cart\", a product that can only be quoted gets the upload area next to its quote button, and \"Request a quote for this cart\" takes the files of the cart. The customer sees the files on the quote's page, and you on the quote's page in the admin, as for an order.<\/li>\n<li>Fix: on the classic cart page the file previews and the extra cost lines sat beside the product name instead of under it.<\/li>\n<li>Fix: no more \"WC_Order_Item_Product::offsetSet is deprecated\" notice on order pages and in order emails with upload fields, and no empty upload area container in order emails.<\/li>\n<li>Fix: Settings &gt; Appearance &gt; Several fields per row - with a page switched off, the next page's switch no longer moves into its row.<\/li>\n<li>Tweak: links to the plugin's page on vanquishplugins.com, and to Request a Quote and Order Approval among the other Vanquish plugins.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>New: a new look for the uploaded files on the admin order page. Under each order item, every file is a tile of the same size - an image with its preview, a PDF or any other file with a label of its type - with its size and quantity; in the \"Uploaded files\" box, one compact row per file.<\/li>\n<li>New: click an image, under an item or in the box, to see it full size in a lightbox, together with the other images of the same upload field (arrow keys, Download). Images stored on Dropbox, Amazon S3 or Google Drive (Premium) open there too.<\/li>\n<li>Improvement: deleting a file from the \"Uploaded files\" box no longer reloads the page, so the approvals, notes and other order changes not saved yet are kept. \"Delete file(s)\" now deletes all the files of an upload field at once, after a confirmation, instead of waiting for the order Update.<\/li>\n<li>Improvement (Premium): approve or reject a file with one click, change the decision later, undo it before saving, and write the note to the customer right under the file. A yellow line says how many changes are waiting for the order Update button.<\/li>\n<li>Tweak: the Upload block of the block editor uses the new icon colour.<\/li>\n<li>Templates changed: admin\/order-item-uploads.php. If your theme has a copy of it, compare it with the new one.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>New (Premium): Compress images. In the Media tab of an upload field, uploaded images can be stored as lighter JPEG files: compressed at the quality you choose (85% by default) and, when you set a longest side, reduced to it - never enlarged, and never heavier than the upload. Photos are turned upright and their metadata (camera, date, GPS position) removed; colour profile and DPI are kept. JPEG photos only by default: \"Convert other formats to JPG\" adds PNG, WebP, BMP and TIFF, with transparent parts filled with white. Off by default, and best left off if you print the files.<\/li>\n<li>Tweak: a new header for the upload field editor. The ID and the visibility summary sit in one line above the title, the title reads as plain text until you click it, and the tabs, each with an icon, form the bottom edge of the same card.<\/li>\n<li>Tweak: messages no longer sit between the tabs and the settings of the upload field editor. A note explaining a tab is shown under the tabs, with that tab only; a one-time notice sits at the top of the tab it is about and can be closed for good - the WPML one is now in the Translations tab.<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li>Fix (Premium): with \"Separate cart items\", the checkout could refuse the order with \"requires a minimum of 1 file(s) and a maximum of N file(s)\" although the customer had uploaded the files. It happened when the files were uploaded on the product page before the product became a separate cart item, for example when the setting was turned on while customers were shopping.<\/li>\n<li>Tweak: when a product in the cart no longer matches the \"Separate cart items\" settings and is removed, the notice now names the product and asks the customer to add it to the cart again, in place of \"Invalid item(s) were removed from your cart.\".<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Security (Premium): the Google Drive OAuth file, which holds your Google client secret, no longer stays in the Media Library, where it sat in a public folder. Its content is kept in the plugin settings and the file is deleted: right after you choose it in Settings, or, if you already had it, the first time Google Drive is used. Only shop managers and administrators can upload .json files to the Media Library now.<\/li>\n<li>Fix: on the product page, the extra costs in the totals counted again the costs of the upload fields shown before.<\/li>\n<li>Fix (Premium): \"Product price \u00d7 number of files\", and an extra cost added to the item price, could be applied twice when another plugin recalculated the cart.<\/li>\n<li>Tweak: \"Place the upload area with a shortcode\" now says it applies to the classic cart and checkout only; on the block ones, place the Upload fields block.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>New: a Settings page with four tabs - General, Appearance, Texts, Separate cart items - in place of the Options, Texts and Repeatable products entries. The settings are grouped in sections with clearer names and help texts, written from what each setting really does. Nothing you have set changes. The plugin menu is now Upload fields, Settings and, in Premium, Cleaner.<\/li>\n<li>Fix: a product could disappear from a customer's cart, with the notice that its uploaded files had expired, when the files that ANOTHER visitor had uploaded for the same product expired.<\/li>\n<li>Fix: the first save of the settings could empty the summary box and put the upload fields side by side, on sites that had never saved those settings before.<\/li>\n<li>Fix: \"Show the copies of each file in the cart\" (it was \"Show the quantity for each upload in the item cart table\") had no effect.<\/li>\n<li>Fix: the files of visitors who had not ordered were deleted after 20 minutes of inactivity, not the 34 the settings showed, until the settings were saved.<\/li>\n<li>Fix: with \"Warn before leaving the page: Only the first time\", the OK of any popup of the plugin - a refused file type, for example - turned the warning off.<\/li>\n<li>Fix: with protected file links on, the file that blocks direct access to an order's folder grew at every page view. It is now written once, with the rule for Apache 2.4 too.<\/li>\n<li>Fix: the text before the number of repeated products (Texts tab) is used on the order pages and in the emails too, not only in the cart; the customer's note is shown in the emails under every file, not only under images.<\/li>\n<li>Fix: image previews - square photos were stretched when the two preview sizes differed, and a preview size of 0 hid the file icons. With \"Keep the small copies\" on, GIF and BMP files had no preview, and the copies were not made again after a size change.<\/li>\n<li>Fix (Premium): the \"Quantity box for each file\" switch of an upload field changed only the emails; it now hides the quantity box on the pages too.<\/li>\n<li>Fix (Premium): with \"Crop the photo: On the server\" and no Imagick on the server, the customer was left waiting with no buttons. The photo is cropped in the browser then, and the settings say so.<\/li>\n<li>Fix (Premium): on PHP 8, the email telling the shop that a file could not be sent to Amazon S3 or Dropbox failed with an error, so it never arrived.<\/li>\n<li>Fix: \"Your own button colours\" did not reach the PDF Preview button, and the DPI limits were shown in \"px\".<\/li>\n<li>Tweak: settings that had no effect are gone from the page (crop area width and height, distance between upload buttons). \"How image previews are made\" and \"Keep the small copies\" are now in the free version too; the crop editor settings, the PDF preview, the price per number of files and the layout of the upload form shortcode are shown with Premium only, where they work.<\/li>\n<li>Tweak: \"Place the upload area with a shortcode\" (it was \"Disable standard upload-field management\") is Premium, like the shortcodes it needs: without an active licence it is not applied, so the upload fields are shown again.<\/li>\n<li>Templates changed: upload-form\/field.php, order\/field.php, emails\/order-item-uploads.php. If your theme has copies of them, compare them with the new ones.<\/li>\n<\/ul>\n\n<p>Older versions: see the full changelog at https:\/\/plugins.svn.wordpress.org\/vanquish-upload-files-for-woocommerce\/trunk\/changelog.txt<\/p>","raw_excerpt":"Let customers upload files (even large!) 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:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321599"}],"author":[{"embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vanquish83"}],"wp:attachment":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321599"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321599"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321599"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321599"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321599"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}