{"id":386401,"date":"2026-10-18T07:48:21","date_gmt":"2026-10-18T07:48:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/buildora-file-attachment-for-woocommerce\/"},"modified":"2026-10-18T07:47:54","modified_gmt":"2026-10-18T07:47:54","slug":"buildora-file-attachment-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/buildora-file-attachment-for-woocommerce\/","author":17326996,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Buildora File Attachment","header_author":"riponhossain","header_description":"Secure file upload and attachment system for WooCommerce. Collect customer files per product\/order with validation, verification workflow, and private protected storage.","assets_banners_color":"","last_updated":"2026-10-18 07:47:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/riponhossain\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":85,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"riponhossain","date":"2026-10-18 07:47:54","revision":3752704}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3752703,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3752703,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3752703,"resolution":"1","location":"assets","locale":"","width":1882,"height":820},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3752703,"resolution":"2","location":"assets","locale":"","width":1894,"height":903},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3752703,"resolution":"3","location":"assets","locale":"","width":1892,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3752703,"resolution":"4","location":"assets","locale":"","width":1898,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3752703,"resolution":"5","location":"assets","locale":"","width":1880,"height":910},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3752703,"resolution":"6","location":"assets","locale":"","width":1887,"height":900}},"screenshots":{"1":"Product page \u2014 the drag-and-drop upload field customers see","2":"Buildora dashboard \u2014 upload counts and recent attachments","3":"Attachments screen \u2014 status tabs, search, filters and bulk actions","4":"Upload Rules \u2014 every rule with its scope, requirement and status","5":"Settings \u2014 master switch, file types, size limits, guest uploads and retention","6":"Tools \u2014 export and import attachments as CSV"}},"plugin_section":[262246],"plugin_tags":[1346,5887,212350,287320,286],"plugin_category":[45,50],"plugin_contributors":[187474],"plugin_business_model":[],"class_list":["post-386401","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-attachments","plugin_tags-file-upload","plugin_tags-order-files","plugin_tags-product-files","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-media","plugin_contributors-riponhossain","plugin_committers-riponhossain"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/buildora-file-attachment-for-woocommerce\/assets\/icon-128x128.png?rev=3752703","icon_2x":"https:\/\/ps.w.org\/buildora-file-attachment-for-woocommerce\/assets\/icon-256x256.png?rev=3752703","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/buildora-file-attachment-for-woocommerce\/assets\/screenshot-1.png?rev=3752703","caption":"Product page \u2014 the drag-and-drop upload field customers see"},{"src":"https:\/\/ps.w.org\/buildora-file-attachment-for-woocommerce\/assets\/screenshot-2.png?rev=3752703","caption":"Buildora dashboard \u2014 upload counts and recent attachments"},{"src":"https:\/\/ps.w.org\/buildora-file-attachment-for-woocommerce\/assets\/screenshot-3.png?rev=3752703","caption":"Attachments screen \u2014 status tabs, search, filters and bulk actions"},{"src":"https:\/\/ps.w.org\/buildora-file-attachment-for-woocommerce\/assets\/screenshot-4.png?rev=3752703","caption":"Upload Rules \u2014 every rule with its scope, requirement and status"},{"src":"https:\/\/ps.w.org\/buildora-file-attachment-for-woocommerce\/assets\/screenshot-5.png?rev=3752703","caption":"Settings \u2014 master switch, file types, size limits, guest uploads and retention"},{"src":"https:\/\/ps.w.org\/buildora-file-attachment-for-woocommerce\/assets\/screenshot-6.png?rev=3752703","caption":"Tools \u2014 export and import attachments as CSV"}],"raw_content":"<!--section=description-->\n<p>Some orders cannot start until the customer hands something over \u2014 a print-ready artwork, a prescription scan, a signed contract, a photo of the fault. Buildora File Attachment puts that handover on the product page, so the file arrives together with the order instead of in a separate email thread three days later.<\/p>\n\n<p>Everything runs inside your own WordPress installation. No third-party service, no external storage bucket, and no new account for your customers to create.<\/p>\n\n<h4>Features at a glance<\/h4>\n\n<ul>\n<li><strong>Upload field on the product page<\/strong> \u2014 customers attach what you asked for before the product can be added to the cart<\/li>\n<li><strong>Drag and drop<\/strong> \u2014 with file preview, remove and re-upload before checkout<\/li>\n<li><strong>Required or optional uploads, per product<\/strong> \u2014 switched on from the product edit screen, no code and no filters needed<\/li>\n<li><strong>Category and store-wide rules<\/strong> \u2014 apply the same requirement to a whole product category or to every product you sell<\/li>\n<li><strong>Rule priority<\/strong> \u2014 product beats category, category beats global, and empty fields inherit from the next rule up the chain<\/li>\n<li><strong>Per-rule allowed file types<\/strong> \u2014 offer only the formats a particular product should accept<\/li>\n<li><strong>Per-rule size limit<\/strong> \u2014 cap uploads in megabytes for each rule independently<\/li>\n<li><strong>PDF, Word and archive support<\/strong> \u2014 JPG, JPEG, PNG, WEBP, PDF, DOC, DOCX and ZIP out of the box<\/li>\n<li><strong>Attachment preview in the cart<\/strong> \u2014 customers confirm the correct file before paying<\/li>\n<li><strong>Files on the order screen<\/strong> \u2014 grouped per line item with preview and download links for your team<\/li>\n<li><strong>Files in the order emails<\/strong> \u2014 listed in the confirmation emails sent to you and to the customer<\/li>\n<li><strong>Customer My Account view<\/strong> \u2014 buyers can revisit their uploads next to the product they belong to<\/li>\n<li><strong>Approval workflow<\/strong> \u2014 pending, verified and rejected statuses with an optional rejection reason<\/li>\n<li><strong>Email notifications<\/strong> \u2014 admin on new uploads, customer on approval, rejection or pending review<\/li>\n<li><strong>Attachments screen<\/strong> \u2014 search, filter, sort, and bulk-mark or bulk-delete in one go<\/li>\n<li><strong>Dashboard<\/strong> \u2014 upload volume, items waiting for review and recent activity at a glance<\/li>\n<li><strong>Setup Wizard<\/strong> \u2014 guided first-run configuration that writes your first rule for you<\/li>\n<li><strong>Guest uploads<\/strong> \u2014 allowed by default, switchable off if you only want logged-in customers<\/li>\n<li><strong>Real MIME checking<\/strong> \u2014 file contents are verified, never the extension on its own<\/li>\n<li><strong>Private storage<\/strong> \u2014 randomised file names, a hardened folder and no public file URLs<\/li>\n<li><strong>Retention policy<\/strong> \u2014 clear out old attachments automatically if you want them gone<\/li>\n<li><strong>HPOS compatible and translation-ready<\/strong><\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li><strong>You set a rule.<\/strong> Choose which products or categories accept uploads, whether a file is mandatory or optional, which formats are accepted, and the size ceiling.<\/li>\n<li><strong>The customer attaches a file<\/strong> from the product page using a drag-and-drop field. The file is checked, renamed and stored away from the media library.<\/li>\n<li><strong>The file follows the order.<\/strong> It appears in the cart, on the order screen, in the order emails, and in the customer's My Account area.<\/li>\n<\/ol>\n\n<h4>Where uploaded files show up<\/h4>\n\n<ul>\n<li>On the WooCommerce order screen, grouped per line item, with preview and download links<\/li>\n<li>Inside the order confirmation emails sent to you and to the customer<\/li>\n<li>In the customer's My Account area, next to the product it belongs to<\/li>\n<li>In the cart, so the customer can confirm the right file before paying<\/li>\n<li>In a central Attachments screen for review and housekeeping<\/li>\n<\/ul>\n\n<h4>Rules that follow a sensible priority<\/h4>\n\n<p>A rule can target a single product, a product category, or the whole store. When more than one rule could apply, the most specific one wins \u2014 product beats category, category beats global. Fields left empty fall back to the next rule up the chain, so common settings never need to be repeated for every product.<\/p>\n\n<h4>The security model<\/h4>\n\n<p>Customer uploads are treated as untrusted input, and the plugin is built around that assumption:<\/p>\n\n<ul>\n<li><strong>Content-based type checking.<\/strong> The real MIME type is read from the file's own bytes, so renaming a script to end in .jpg will not get it past the door.<\/li>\n<li><strong>Extension allowlist.<\/strong> Only the formats you permit for that rule are accepted \u2014 JPG, JPEG, PNG, WEBP, PDF, DOC, DOCX and ZIP out of the box.<\/li>\n<li><strong>Size enforcement.<\/strong> The configured ceiling is measured against the file that actually arrived, not the size the browser claimed.<\/li>\n<li><strong>Integrity checks.<\/strong> Images are opened to confirm they are readable, and PDF files must carry a valid header, so truncated uploads are caught before they reach your team.<\/li>\n<li><strong>Unguessable file names.<\/strong> Each stored file receives a cryptographically random name, which makes it impractical to enumerate other customers' uploads by trying URLs.<\/li>\n<li><strong>A hardened storage folder.<\/strong> The upload directory ships with .htaccess rules that switch off directory listing and refuse to execute PHP, backed up by an index.php guard.<\/li>\n<li><strong>No public file URLs.<\/strong> Downloads are streamed through an authorised handler that verifies who is asking, so a customer never receives a direct path to a file.<\/li>\n<\/ul>\n\n<h4>A review queue, not a black box<\/h4>\n\n<p>Uploads arrive with a status instead of being auto-approved or silently dropped:<\/p>\n\n<ul>\n<li>New attachments wait as <strong>pending<\/strong> until somebody looks at them.<\/li>\n<li>Approve in one click, or reject with a reason the customer is allowed to read.<\/li>\n<li>The customer is emailed when a file is approved, rejected, or waiting for review \u2014 each event can be switched on or off.<\/li>\n<\/ul>\n\n<h4>Managing uploads day to day<\/h4>\n\n<ul>\n<li><strong>Dashboard<\/strong> \u2014 how many files arrived, how many are waiting, which orders are affected, plus recent activity at a glance.<\/li>\n<li><strong>Attachments<\/strong> \u2014 a searchable, filterable, sortable table with bulk actions: mark verified, mark rejected, or delete permanently.<\/li>\n<li><strong>Upload Rules<\/strong> \u2014 create, edit and prioritise every rule from a single screen.<\/li>\n<li><strong>Settings<\/strong> \u2014 limits, formats, notifications, retention and front-end wording.<\/li>\n<li><strong>Setup Wizard<\/strong> \u2014 a short guided first run that writes your first rule for you.<\/li>\n<\/ul>\n\n<h4>Built for stores like yours<\/h4>\n\n<p><strong>Print on demand and custom products<\/strong>\n* T-shirt, hoodie and apparel printing \u2014 upload the design or logo file\n* Mug, bottle and drinkware printing \u2014 upload photos or wraparound artwork\n* Phone case and accessory printing \u2014 upload personal images or patterns\n* Canvas, poster and fine-art printing \u2014 upload high-resolution files, with the print size limit enforced per rule\n* Stickers, labels and packaging \u2014 upload print-ready PDF or ZIP artwork\n* Embroidery, uniforms and teamwear \u2014 upload logos, monograms or rosters\n* Laser-cut and CNC products \u2014 upload SVG or design files<\/p>\n\n<p><strong>Personalised gifts and keepsakes<\/strong>\n* Photo books, albums and calendars \u2014 upload images for each page\n* Jewellery engraving \u2014 upload signature scans or artwork files\n* Portrait, pet and memorial products \u2014 upload reference photos\n* Greeting cards and invitations \u2014 upload event photos and wording\n* Doormats, cushions and framed prints \u2014 upload the photo you will print<\/p>\n\n<p><strong>Professional, creative and B2B services<\/strong>\n* Graphic and web design \u2014 upload client briefs, brand assets or reference files\n* Translation and proofreading \u2014 upload the source document as PDF, DOC or DOCX\n* Video and audio production \u2014 upload scripts, briefs or source files\n* Resume, CV and profile writing \u2014 upload the existing resume\n* Legal document review \u2014 upload the contract or agreement\n* Accounting, bookkeeping and tax \u2014 upload statements, invoices or spreadsheets\n* Wholesale and B2B ordering \u2014 upload purchase orders, tax exemption certificates and reorder artwork\n* Marketing and events agencies \u2014 upload campaign assets before work is scheduled<\/p>\n\n<p><strong>Healthcare, wellness and regulated products<\/strong>\n* Prescription eyewear and contact lenses \u2014 upload the prescription scan\n* Orthotics, prosthetics and mobility devices \u2014 upload the prescription or referral\n* Supplement and pharmacy stores \u2014 upload a doctor's note where one is required\n* Dietary and nutrition consulting \u2014 upload test reports or diet history\n* Clinics and practices \u2014 upload insurance or referral paperwork with a booking<\/p>\n\n<p><strong>Crafts, decor and home<\/strong>\n* Wallpaper, murals and wall art \u2014 upload measurements, room photos or design files\n* Home decor and soft furnishings \u2014 upload photos or fabric swatches\n* Furniture upholstery \u2014 upload fabric or design files\n* Signage, shopfronts and vehicle wraps \u2014 upload brand guidelines or design files\n* Wedding and event services \u2014 upload inspiration photos, seating plans or menus<\/p>\n\n<p><strong>Education, training and digital products<\/strong>\n* Tutoring and coaching \u2014 upload past papers or assignments\n* Certification and online courses \u2014 upload prerequisite documents\n* Schools and academies \u2014 upload admission forms, ID or medical consent forms\n* Coursework and assignment submission \u2014 upload the completed work\n* Membership and subscription boxes \u2014 upload preferences or onboarding documents<\/p>\n\n<p><strong>Repair, trade and field services<\/strong>\n* Device and electronics repair \u2014 upload a photo of the fault\n* Appliance and HVAC callouts \u2014 upload a photo of the model plate\n* Automotive and bike servicing \u2014 upload logbook pages or damage photos\n* Building and renovation quotes \u2014 upload plans, photos or measurements<\/p>\n\n<p><strong>Pet and animal products<\/strong>\n* Custom pet accessories \u2014 upload pet photos\n* Pet portraits and memorial items \u2014 upload reference photos\n* Grooming and veterinary bookings \u2014 upload vaccination records<\/p>\n\n<p><strong>Fashion, tailoring and made-to-measure<\/strong>\n* Tailoring and bespoke clothing \u2014 upload measurements or reference photos\n* School and company uniforms \u2014 upload logo files\n* Sports team kits \u2014 upload team logo and roster documents<\/p>\n\n<p><strong>Any store where a file gates the order<\/strong>\n* Proof of ID, licence, permit or certification\n* Signed contracts, consent forms and waiver documents\n* Anything you currently chase by email after checkout<\/p>\n\n<h4>Supported file types<\/h4>\n\n<p>JPG, JPEG, PNG, WEBP, PDF, DOC, DOCX and Many More are available out of the box. Any subset can be allowed per rule, and further formats can be registered from code.<\/p>\n\n<h4>Your data stays yours<\/h4>\n\n<ul>\n<li>Files are stored on your server, inside your uploads directory, or in a private folder outside the web root if you define one.<\/li>\n<li>Attachments are kept in four dedicated database tables, leaving your posts and postmeta tables clean.<\/li>\n<li>No tracking, no telemetry, no calls to an external API.<\/li>\n<li>An optional retention window removes old attachments automatically.<\/li>\n<li>On uninstall, deletion is opt-in \u2014 data is kept unless you explicitly ask for it to be removed.<\/li>\n<\/ul>\n\n<h4>Compatibility<\/h4>\n\n<ul>\n<li>WooCommerce 7.0 and above, tested up to 9.0<\/li>\n<li>HPOS (High-Performance Order Storage) declared compatible<\/li>\n<li>WordPress 6.0 and above, tested up to 7.1<\/li>\n<li>PHP 7.4 and above<\/li>\n<li>Translation-ready<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/buildora-file-attachment\/<\/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>The Setup Wizard will open automatically \u2014 complete it to set default rules and upload locations.<\/li>\n<li>Navigate to Buildora \u2192 Upload Rules to create per-product or per-category rules, or use the Buildora metabox on the product edit screen.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20make%20uploads%20required%20on%20a%20specific%20product%3F\"><h3>Can I make uploads required on a specific product?<\/h3><\/dt>\n<dd><p>Yes. Edit the product, scroll to the \"Buildora Upload Rule\" metabox, set Enabled = Yes and check \"Required\".<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20user%20uploads%20a%20file%20with%20a%20malicious%20extension%3F\"><h3>What happens if a user uploads a file with a malicious extension?<\/h3><\/dt>\n<dd><p>Buildora runs four independent checks: extension allowlist match, real MIME type via finfo (not what the browser claims), actual file size vs declared, and image\/PDF integrity check. Randomized cryptographic filenames prevent URL-guessing, and the buildora upload folder ships with <code>.htaccess<\/code> rules that block PHP execution and directory listing. Downloads always flow through an authorized handler \u2014 customers never receive raw file URLs.<\/p><\/dd>\n<dt id=\"do%20guests%20need%20an%20account%20to%20upload%3F\"><h3>Do guests need an account to upload?<\/h3><\/dt>\n<dd><p>No. Guest (non-logged-in) uploads are allowed by default. You can turn them off with the \"Allow guest (non-logged-in) users to upload files\" toggle in Buildora \u2192 Settings.<\/p><\/dd>\n<dt id=\"can%20i%20migrate%20data%20to%20another%20site%3F\"><h3>Can I migrate data to another site?<\/h3><\/dt>\n<dd><p>Attachments live in 4 custom <code>wp_buildora_*<\/code> tables. Export + import via SQL, and copy <code>wp-content\/uploads\/buildora\/<\/code>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Let customers upload files on WooCommerce product pages. Drag &amp; drop, per-product and category rules, review workflow, and secure protected storage.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/386401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=386401"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/riponhossain"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=386401"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=386401"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=386401"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=386401"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=386401"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=386401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}