WooCommerce Product Upload with Uppy
Async file uploads with Uppy for WooCommerce downloadable products
by Frugan · github.com/wp-spaghetti/wc-product-upload-with-uppy · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/wp-spaghetti/wc-product-upload-with-uppy/releases/download/v0.1.0/wc-product-upload-with-uppy.zipReadme

WooCommerce Product Upload with Uppy (WordPress Plugin)
Async file uploads with Uppy for WooCommerce downloadable products.
The plugin automatically replaces the "Choose file" button in WooCommerce downloadable products with Uppy's upload interface, enabling chunked uploads for large files.
Requirements
- PHP ^8.1
- WordPress ^6.0
- WooCommerce ^10.0
Installation
You can install the plugin in three ways: manually, via Composer from WPackagist, or via Composer from GitHub Releases.
Manual Installation- Go to the Releases section of this repository.
- Download the latest release zip file.
- Log in to your WordPress admin dashboard.
- Navigate to
Plugins>Add New. - Click
Upload Plugin. - Choose the downloaded zip file and click
Install Now.
If you use Composer to manage WordPress plugins, you can install it from WordPress Packagist:
- Open your terminal.
- Navigate to the root directory of your WordPress installation.
- Ensure your
composer.jsonfile has the following configuration: *
{
"require": {
"composer/installers": "^1.0 || ^2.0",
"wpackagist-plugin/wc-product-upload-with-uppy": "^0.1"
},
"extra": {
"installer-paths": {
"wp-content/plugins/{$name}/": [
"type:wordpress-plugin"
]
}
}
}
- Run the following command:
composer update
Note:
* composer/installers might already be required by another dependency.
If you use Composer to manage WordPress plugins, you can install it from this repository directly.
Standard Version (uses WordPress update system):
- Open your terminal.
- Navigate to the root directory of your WordPress installation.
- Ensure your
composer.jsonfile has the following configuration: *
{
"require": {
"composer/installers": "^1.0 || ^2.0",
"wp-spaghetti/wc-product-upload-with-uppy": "^0.1"
},
"repositories": [
{
"type": "package",
"package": {
"name": "wp-spaghetti/wc-product-upload-with-uppy",
"version": "0.1.0",
"type": "wordpress-plugin",
"dist": {
"url": "https://github.com/wp-spaghetti/wc-product-upload-with-uppy/releases/download/v0.1.0/wc-product-upload-with-uppy.zip",
"type": "zip"
}
}
}
],
"extra": {
"installer-paths": {
"wp-content/plugins/{$name}/": [
"type:wordpress-plugin"
]
}
}
}
Version with Git Updater (uses Git Updater Lite for updates):
For installations that need updates managed via Git instead of WordPress.org, use the --with-git-updater version:
{
"require": {
"composer/installers": "^1.0 || ^2.0",
"wp-spaghetti/wc-product-upload-with-uppy": "^0.1"
},
"repositories": [
{
"type": "package",
"package": {
"name": "wp-spaghetti/wc-product-upload-with-uppy",
"version": "0.1.0",
"type": "wordpress-plugin",
"dist": {
"url": "https://github.com/wp-spaghetti/wc-product-upload-with-uppy/releases/download/v0.1.0/wc-product-upload-with-uppy--with-git-updater.zip",
"type": "zip"
}
}
}
],
"extra": {
"installer-paths": {
"wp-content/plugins/{$name}/": [
"type:wordpress-plugin"
]
}
}
}
- Run the following command:
composer update
Note:
* composer/installers might already be required by another dependency.
* The --with-git-updater version includes Git Updater Lite for automatic updates detection, while the standard version relies on WordPress.org update system.
Configuration
Add these constants to your wp-config.php file to customize the plugin behavior:
// Chunk size for TUS uploads (in bytes)
// Default: 2097152 (2MB)
define('WPSPAGHETTI_WCPUWU_CHUNK_SIZE', 2 * 1024 * 1024);
// Maximum file size allowed for upload (in bytes)
// Default: null (no limit, respects PHP upload_max_filesize and post_max_size)
// Example: 100MB limit
define('WPSPAGHETTI_WCPUWU_MAX_FILE_SIZE', 100 * 1024 * 1024);
// Allowed file types (array of MIME types or file extensions)
// Default: [] (all types allowed)
// Example: ['application/pdf', '.pdf'] (Only PDF files)
define('WPSPAGHETTI_WCPUWU_ALLOWED_FILE_TYPES', ['application/pdf', '.pdf']);
// Example: Multiple document types
// define('WPSPAGHETTI_WCPUWU_ALLOWED_FILE_TYPES', [
// 'application/pdf',
// 'application/zip',
// 'application/msword',
// 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
// '.pdf',
// '.zip',
// '.doc',
// '.docx'
// ]);
// Enable cache busting for assets (useful during development)
// Default: false
define('WPSPAGHETTI_WCPUWU_CACHE_BUSTING', true);
Known Issues
Wordfence Firewall Compatibility
If you're using Wordfence with the Web Application Firewall (WAF) enabled, you may encounter 403 Forbidden errors during file uploads. This happens because Wordfence's WAF rule "Allow PHP in Posts and Pages <= 3.0.4 - Authenticated (Subscriber+) Remote Code Execution" can mistakenly flag TUS chunked uploads as malicious.
Solution:
If you don't use the plugin "Allow PHP in Posts and Pages", you can safely disable this specific WAF rule:
- Go to Wordfence → Firewall → Manage Firewall
- Scroll to Firewall Rules
- Find:
Allow PHP in Posts and Pages <= 3.0.4 - Authenticated (Subscriber+) Remote Code Execution - Click Disable for that rule
This will not affect your site's security if you don't use that specific plugin.
Alternative Solution:
If you need to keep that rule enabled, you can whitelist the TUS upload endpoint:
- Go to Wordfence → Firewall → Manage Firewall → Whitelisted URLs
- Add these rules (one by one):
- URL:
/wp-json/wc-product-upload-with-uppy/v1/upload| Type:POST Body| Param:* - URL:
/wp-json/wc-product-upload-with-uppy/v1/upload| Type:Header| Param:Upload-Offset - URL:
/wp-json/wc-product-upload-with-uppy/v1/upload| Type:Header| Param:Upload-Length - URL:
/wp-json/wc-product-upload-with-uppy/v1/upload| Type:Header| Param:Tus-Resumable - URL:
/wp-json/wc-product-upload-with-uppy/v1/upload| Type:Header| Param:Content-Type
- URL:
More info
See LINKS file.
Changelog
Please see CHANGELOG for a detailed list of changes for each release.
We follow Semantic Versioning and use Conventional Commits to automatically generate our changelog.
Release Process
- Major versions (1.0.0 → 2.0.0): Breaking changes
- Minor versions (1.0.0 → 1.1.0): New features, backward compatible
- Patch versions (1.0.0 → 1.0.1): Bug fixes, backward compatible
All releases are automatically created when changes are pushed to the main branch, based on commit message conventions.
Contributing
For your contributions please use:
See CONTRIBUTING for detailed guidelines.
Sponsor
License
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v0.1.0 | Nov 22, 2025 | wc-product-upload-with-uppy.zip | 4 |
