{"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-09-28T10:11:29","modified_gmt":"2026-09-28T10:11:29","slug":"vanquish-upload-files-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/pan.wordpress.org\/plugins\/vanquish-upload-files-for-woocommerce\/","author":14329766,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.2","stable_tag":"1.6.2","tested":"7.1.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":"fbf9fd","last_updated":"2026-09-28 10:11:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":4.6,"author_block_rating":0,"active_installs":10,"downloads":2629,"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.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}},"upgrade_notice":{"1.6.2":"<p>Premium: cloud storage libraries isolated from other plugins&#039; copies and updated. Summary box fix.<\/p>","1.6.1":"<p>Fixes a critical error on the cart page with some themes&#039; cart templates on PHP 8, and Dropbox storage on PHP below 8.2.<\/p>","1.6.0":"<p>Product upload fields can be shown outside the order items table on the Order details and Thank you pages.<\/p>","1.5.2":"<p>Uploaded files are now deleted when an order is deleted permanently on HPOS stores.<\/p>","1.5.1":"<p>Keeps the upload progress bar in view when files are already listed above it.<\/p>","1.5.0":"<p>Adds a dark colour scheme for the upload boxes, and a full-width audio player for uploaded audio files.<\/p>","1.4.1":"<p>Fixes unreadable file names on dark themes, and makes the upload buttons clearer.<\/p>","1.4.0":"<p>Fixes uploads being deleted, and orders arriving without files, when a payment button such as PayPal&#039;s is on the product page.<\/p>"},"ratings":{"1":1,"2":0,"3":0,"4":0,"5":8},"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":3679204,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3679204,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3716900,"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.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"],"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=3679204","banner_2x":"https:\/\/ps.w.org\/vanquish-upload-files-for-woocommerce\/assets\/banner-1544x500.png?rev=3679204","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 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>Admin email notifications<\/li>\n<li>Upload progress bar, file delete, image\/audio\/PDF preview<\/li>\n<li>Light or dark colour scheme for the upload boxes, 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<\/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>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>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>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>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<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 field 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 field configurator. 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=\"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>Options \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>Options \u2192 Temp files clear interval<\/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 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.6.2<\/h4>\n\n<ul>\n<li>Improvement (Premium): the libraries bundled for Dropbox, Amazon S3 and Google Drive now live under the plugin's own namespace. Many plugins ship the same HTTP library (Guzzle) in their own version, and until now whichever copy loaded first was used by everyone - which could break cloud uploads, or another plugin, depending on the order plugins were loaded in. Each copy is now private, so neither can replace the other. The libraries are also updated to current versions of their HTTP components, which removes known security advisories from them.<\/li>\n<li>Fix: the summary box on the Cart and Checkout pages could list the files of a product that had already been removed from the cart, and wrote two PHP warnings to the log every time it was shown.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Fix: on themes with their own cart template, the cart page could stop with a critical error on PHP 8 (\"Cannot access offset of type string on string\" in Cart.php). Some cart templates hand different data to the hook the plugin uses to show the uploads under each product; the plugin now finds the cart item by itself, and leaves that row alone instead of failing when it cannot. Reported by a customer.<\/li>\n<li>Fix (Premium): with Dropbox storage, PHP versions from 7.4 to 8.1 stopped with \"Composer detected issues in your platform: Your Composer dependencies require a PHP version &gt;= 8.2.0\". The Dropbox library bundled with the plugin had been built for PHP 8.2; it is now built for PHP 7.4, the plugin's minimum, like the Google Drive and Amazon S3 ones, and on current versions of its dependencies. Reported by a customer.<\/li>\n<li>For sites using WPML: the upload field texts, translated in the plugin's own Translations tab since 1.3.17, are now removed from WPML String Translation, where they had been kept only as a safety copy. Before removing them the plugin copies over once more whatever String Translation still holds that the Translations tab does not have, and it never replaces a text written in the Translations tab. It happens once, the first time an administrator opens an admin page after updating.<\/li>\n<li>Fix: for sites using WPML, two kinds of translation had not been carried over to the Translations tab in 1.3.17 and are now recovered by the step above: the label of the upload field's text field, and every text of languages whose WPML code is longer than two letters, such as Brazilian Portuguese (pt-br). The label's translation had never been shown on the site at all.<\/li>\n<li>Removed the \"Show warning alert on Upload files configurator page\" option, which no longer had any effect.<\/li>\n<li>Minor wording improvements in the upload field configurator.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>New: on the Order details and Thank you pages, the upload fields of each product can now be shown in a separate area instead of inside the order items table, as was already possible on the Cart and Checkout pages. Turn on \"Display the upload fields in a separate area\" under Options - Fields positioning - Order details \/ Thank you page. On themes that leave little room to the product column of that table, the upload fields no longer have to squeeze into it, and the order receipt is no longer interrupted by them. Off by default, so nothing changes until you choose. Requested by a customer.<\/li>\n<li>New: the upload area of the Order details and Thank you pages can be placed after the customer details, i.e. after the billing and shipping addresses at the very end of the order receipt.<\/li>\n<li>The Fields positioning options are now grouped by page - Product page, Cart, Checkout, Order details \/ Thank you page - and each position setting says what it places: the order upload fields always, the product upload fields when they are shown in a separate area.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Fix: deleting an order permanently now deletes its uploaded files as well. On stores using WooCommerce's High-Performance Order Storage an order is no longer a WordPress post, so the clean-up never ran and the files stayed on the server - with audio files that can add up to gigabytes. Moving an order to the Trash still keeps its files, so that it can be restored. Reported by a customer.<\/li>\n<li>When uploads are deleted - from the order list, the order screen, the Cleaner or by deleting the order - the folders they leave empty are now removed straight away, instead of waiting for the hourly clean-up.<\/li>\n<li>The Debug log now records each file deleted, and says so when a file could not be deleted and is still on disk.<\/li>\n<li>Fix: in the order screen, long file names no longer run over the image thumbnails beside them and the Quantity line below, and the audio player in the Uploaded files box no longer spills out of it. Reported by a customer.<\/li>\n<li>The Uploaded files box in the order screen now uses the same WordPress admin blue as the rest of the plugin's screens: its file names, links and buttons had stayed purple.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fix: when an upload starts, the page now scrolls to its progress bar if the bar is out of sight. The bar sits at the top of the upload field, so with several files already listed under it an upload started from the bottom of the field ran far above the part of the page being looked at, with no sign that anything was happening. When the bar is already on screen the page does not move. Reported by a customer.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New: a light or dark colour scheme for the upload boxes, under Options - Style (General). The boxes around uploaded files, the list of selected files and the totals have a background of their own; on a site with a dark theme, choose Dark and they blend in with the page instead of standing out as light panels. The audio player and the quantity field inside them follow the scheme too. Light is the default, so nothing changes until you choose. Requested by a customer.<\/li>\n<li>Audio and video files in the list of uploaded files now have a box as wide as the list. At the width of an image thumbnail the audio player was so compressed that its seek bar was a few pixels long, too short to move to another point of the track, and long file names wrapped over several lines. Images keep their grid of thumbnails. Reported by a customer.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fix: on a dark theme, the file names in the upload boxes were almost invisible - light text on a light box. Those boxes have a light background of their own but took the text colour from the theme; they now set it too, as do the totals box and the quantity field. Nothing changes on light themes. Reported by a customer.<\/li>\n<li>The button under the list of files a customer has just selected now reads \"Clear selection\" instead of \"Delete uploaded file(s)\": it only empties the selection, and nothing has been uploaded yet at that point. It has its own entry in the Texts menu. If you had changed the old text, give this one your wording too.<\/li>\n<li>Improved (Premium): with multiple files per field, the \"Upload selected files\" button above the list is now shown only when the list is too long for the one below it to be on screen at the same time. On a short list the two looked like the same interface appearing twice.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Fix: files uploaded on the product page could be deleted before the customer had bought anything, when a payment button sits on that page - WooCommerce PayPal Payments is the one it was found with. To show the right price, such a button puts the product in a cart and takes it out again every time the product form changes, and the plugin took that for the customer removing the product from their cart: it deleted the uploads, files included. An audio file stopped playing after a second, an image could no longer be downloaded, and the order arrived with nothing attached. Removing a product from the cart still deletes its uploads, exactly as before. Reported by a customer.<\/li>\n<li>Fix: an order could end up without its files when it was paid through a button on the product page, or when a theme or page builder had replaced the Thank You page. Both association methods wait for one WooCommerce event each, and those flows skip them. The files are now also attached when the customer reaches the Thank You page, before the page itself is drawn, whatever it then shows - and only when the order has no files yet.<\/li>\n<li>The Debug log now also records when uploads are deleted because their product left the cart, and no longer reports a failure when a Thank You page is simply reloaded after the files were attached.<\/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:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321599"}],"author":[{"embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vanquish83"}],"wp:attachment":[{"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321599"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321599"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321599"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321599"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321599"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}