{"id":303369,"date":"2026-05-06T12:35:21","date_gmt":"2026-05-06T12:35:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ainbae-receipt-upload-for-woocommerce\/"},"modified":"2026-05-06T12:34:23","modified_gmt":"2026-05-06T12:34:23","slug":"ainbae-receipt-upload-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ainbae-receipt-upload-for-woocommerce\/","author":23485377,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"trunk","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Ainbae Receipt Upload for WooCommerce","header_author":"Ainbae","header_description":"Allows customers to upload bank transfer receipts on the order detail page.","assets_banners_color":"f3f8f9","last_updated":"2026-05-06 12:34:23","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.ainbae.com","rating":5,"author_block_rating":0,"active_installs":0,"downloads":48,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":{"1.0.2":"<p>Improved security, safer file storage, and better compatibility across servers. Update recommended.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3524418,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3524418,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3524418,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3524418,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3524418,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3524418,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3524418,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3524418,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"The Admin Setting Page with live widget preview and customisation options.","2":"The receipt upload widget as seen by the customer on the order received page.","3":"The receipt upload widget as seen by the customer on the order detail page.","4":"The confirmation message displayed after a successful upload.","5":"The confirmation message displayed when order status is changed to processing by admin.","6":"The \"View Uploaded Receipt\" button in the WooCommerce order admin panel."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[127760,262021,262020,26349,286],"plugin_category":[45],"plugin_contributors":[262022],"plugin_business_model":[],"class_list":["post-303369","plugin","type-plugin","status-publish","hentry","plugin_tags-bank-transfer","plugin_tags-payment-receipt","plugin_tags-payment-verification","plugin_tags-receipt","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-ainbae","plugin_committers-ainbae"],"banners":{"banner":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/banner-772x250.jpg?rev=3524418","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/icon-256x256.gif?rev=3524418","icon_2x":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/icon-256x256.gif?rev=3524418","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/screenshot-1.png?rev=3524418","caption":"The Admin Setting Page with live widget preview and customisation options."},{"src":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/screenshot-2.png?rev=3524418","caption":"The receipt upload widget as seen by the customer on the order received page."},{"src":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/screenshot-3.png?rev=3524418","caption":"The receipt upload widget as seen by the customer on the order detail page."},{"src":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/screenshot-4.png?rev=3524418","caption":"The confirmation message displayed after a successful upload."},{"src":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/screenshot-5.png?rev=3524418","caption":"The confirmation message displayed when order status is changed to processing by admin."},{"src":"https:\/\/ps.w.org\/ainbae-receipt-upload-for-woocommerce\/assets\/screenshot-6.png?rev=3524418","caption":"The \"View Uploaded Receipt\" button in the WooCommerce order admin panel."}],"raw_content":"<!--section=description-->\n<p>Collect payment receipts from your customers instantly \u2014 directly inside WooCommerce orders.<\/p>\n\n<p>Ainbae Receipt Upload for WooCommerce lets customers upload bank transfer receipts (JPG, PNG, PDF) from their order page, helping you verify payments faster and reduce manual follow-ups.<\/p>\n\n<h4>Why use this plugin?<\/h4>\n\n<ul>\n<li>No more asking customers for screenshots via email or WhatsApp<\/li>\n<li>Keep all payment proofs linked directly to orders<\/li>\n<li>Reduce manual verification work<\/li>\n<li>Improve customer trust and experience<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Customer places an order and selects Bank Transfer (BACS) as payment method.<\/li>\n<li>After placing the order, the receipt upload widget appears on the order detail page.<\/li>\n<li>Customer uploads a JPG, PNG, or PDF (max 5 MB). The file is stored privately \u2014 not in the public media library.<\/li>\n<li>An order note is added automatically, and the admin can view the receipt securely from the order panel.<\/li>\n<li>Optionally, a WhatsApp button lets customers send their receipt directly to your WhatsApp number.<\/li>\n<\/ol>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>\ud83d\udce4 Upload payment receipts directly from order page<\/li>\n<li>\ud83d\udcc1 Supports JPG, PNG, and PDF files (max 5 MB)<\/li>\n<li>\ud83d\udd12 Private storage (not accessible via public media library)<\/li>\n<li>\ud83d\udd10 Secure upload with nonce verification<\/li>\n<li>\ud83d\udc41\ufe0f Admin \"View Uploaded Receipt\" button inside order panel<\/li>\n<li>\ud83d\udcf1 Optional WhatsApp integration for quick sharing<\/li>\n<li>\ud83c\udfa8 Customizable UI (labels, headings, colors)<\/li>\n<\/ul>\n\n<h4>Who is this for?<\/h4>\n\n<p>Any WooCommerce store that accepts manual bank transfers and needs a structured, traceable way to collect payment proof from customers. Common use cases include wholesale stores, local businesses, and stores in regions where card payments are less common.<\/p>\n\n<!--section=installation-->\n<p><strong>Automatic installation (recommended)<\/strong><\/p>\n\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <em>Ainbae Receipt Upload for WooCommerce<\/em>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Upload Receipt<\/strong> to configure settings.<\/li>\n<\/ol>\n\n<p><strong>Manual installation<\/strong><\/p>\n\n<ol>\n<li>Download the plugin zip file.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong> and upload the zip.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Upload Receipt<\/strong> to configure settings.<\/li>\n<\/ol>\n\n<p><strong>After activation<\/strong><\/p>\n\n<ul>\n<li>Ensure your store has <strong>Bank Transfer (BACS)<\/strong> enabled as a payment method under <strong>WooCommerce \u2192 Settings \u2192 Payments<\/strong>.<\/li>\n<li>Enter your WhatsApp number (with country code, digits only) if you want to enable the WhatsApp button.<\/li>\n<li>Save settings. The upload widget will appear automatically on the order detail page for any pending BACS order.<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20all%20payment%20methods%3F\"><h3>Does this work with all payment methods?<\/h3><\/dt>\n<dd><p>No \u2014 by design. The upload widget only appears for orders paid via <strong>Bank Transfer (BACS)<\/strong>. It will not show for card, PayPal, or other payment methods.<\/p><\/dd>\n<dt id=\"where%20are%20the%20uploaded%20files%20stored%3F\"><h3>Where are the uploaded files stored?<\/h3><\/dt>\n<dd><p>Files are stored in <code>wp-content\/uploads\/ainbae-receipt-upload-for-woocommerce\/<\/code>, which is outside the normal media library. A deny-all <code>.htaccess<\/code> file blocks direct browser access on Apache servers.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20nginx%3F\"><h3>Does it work on Nginx?<\/h3><\/dt>\n<dd><p>The <code>.htaccess<\/code> protection file is Apache-specific and has <strong>no effect on Nginx<\/strong>. If your server runs Nginx, you must add a location rule to deny access to the <code>ainbae-receipt-upload-for-woocommerce<\/code> directory inside uploads. Add this to your Nginx server block:<\/p>\n\n<pre><code>location ~* \/uploads\/ainbae-receipt-upload-for-woocommerce\/ { deny all; }\n<\/code><\/pre>\n\n<p>Without this rule, uploaded files on Nginx servers may be directly accessible via URL.<\/p><\/dd>\n<dt id=\"what%20file%20types%20are%20allowed%3F\"><h3>What file types are allowed?<\/h3><\/dt>\n<dd><p>JPG, JPEG, PNG, and PDF. Maximum file size is 5 MB. These limits are enforced on both the client (HTML <code>accept<\/code> attribute) and the server (<code>wp_handle_upload<\/code> MIME validation).<\/p><\/dd>\n<dt id=\"can%20a%20customer%20upload%20more%20than%20one%20receipt%3F\"><h3>Can a customer upload more than one receipt?<\/h3><\/dt>\n<dd><p>No. Once a receipt has been uploaded for an order, the upload form is replaced with a confirmation message and any further upload attempts are blocked.<\/p><\/dd>\n<dt id=\"can%20customers%20delete%20their%20uploaded%20receipt%3F\"><h3>Can customers delete their uploaded receipt?<\/h3><\/dt>\n<dd><p>No. Only an admin with <code>manage_woocommerce<\/code> capability can manage uploaded files.<\/p><\/dd>\n<dt id=\"how%20does%20the%20admin%20view%20the%20receipt%3F\"><h3>How does the admin view the receipt?<\/h3><\/dt>\n<dd><p>Open any WooCommerce order that has a receipt. A <strong>View Uploaded Receipt<\/strong> button appears in the order data panel. Clicking it opens the file in a new tab via a nonce-authenticated, admin-only endpoint.<\/p><\/dd>\n<dt id=\"is%20the%20whatsapp%20button%20required%3F\"><h3>Is the WhatsApp button required?<\/h3><\/dt>\n<dd><p>No. You can disable it entirely from the settings page under <strong>WooCommerce \u2192 Upload Receipt<\/strong>.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20customer%20tries%20to%20upload%20a%20receipt%20for%20someone%20else%27s%20order%3F\"><h3>What happens if a customer tries to upload a receipt for someone else's order?<\/h3><\/dt>\n<dd><p>The plugin checks that the logged-in user's ID matches the order's customer ID. For guest orders, it validates the order key from the URL. If neither matches, the upload is rejected with a permission error.<\/p><\/dd>\n<dt id=\"i%20activated%20the%20plugin%20but%20the%20upload%20form%20is%20not%20showing.%20what%20should%20i%20check%3F\"><h3>I activated the plugin but the upload form is not showing. What should I check?<\/h3><\/dt>\n<dd><ol>\n<li>Make sure the order payment method is <strong>Bank Transfer (BACS)<\/strong>.<\/li>\n<li>Make sure the order status is <strong>Pending Payment<\/strong> or <strong>On Hold<\/strong> \u2014 the form does not appear for completed, cancelled, processing, or refunded orders.<\/li>\n<li>Make sure the customer is viewing their own order (logged in, or using a valid order-key link).<\/li>\n<li>Check that WooCommerce is active and up to date.<\/li>\n<\/ol><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Moved private receipt storage from wp-content root into wp-content\/uploads\/ainbae-receipt-upload-for-woocommerce\/ using wp_upload_dir() per WordPress guidelines<\/li>\n<li>Replaced WP_CONTENT_DIR constant with wp_upload_dir() for correct path resolution across all WordPress configurations<\/li>\n<li>Replaced echo of binary file contents with readfile() to stream files without buffering or escaping concerns<\/li>\n<li>Removed broken donate link from readme.txt<\/li>\n<li>Updated readme FAQ to reflect new storage path and Nginx configuration instructions<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed security and sanitization issues<\/li>\n<li>Improved nonce verification<\/li>\n<li>Minor code improvements for WordPress standards<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Allow customers to upload bank transfer receipts directly from the WooCommerce order details page.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/303369","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=303369"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ainbae"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=303369"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=303369"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=303369"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=303369"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=303369"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=303369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}