{"id":304003,"date":"2026-08-01T20:54:47","date_gmt":"2026-08-01T20:54:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dadsfam-invoice-manager\/"},"modified":"2026-08-01T21:05:46","modified_gmt":"2026-08-01T21:05:46","slug":"dadsfam-invoice-manager","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/dadsfam-invoice-manager\/","author":23486748,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.5","stable_tag":"2.1.5","tested":"7.0.2","requires":"6.1","requires_php":"8.1","requires_plugins":null,"header_name":"DadsFam Invoice Manager","header_author":"DadsFam","header_description":"Secure WooCommerce invoice manager (FREE). Upload PDF invoices, protected storage, HMAC-signed expiring download links, payment status tracking, CSV export, missing-invoice tracker and customer My Account integration. Install the separate DadsFam Invoice Manager PRO add-on for the invoice generator, automatic PDF generation, PDF status sync, payment reminders, bulk upload and an audit log.","assets_banners_color":"1f4572","last_updated":"2026-08-01 21:05:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugins.dadsfam.co.za\/","header_author_uri":"https:\/\/plugins.dadsfam.co.za","rating":0,"author_block_rating":0,"active_installs":0,"downloads":34,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.1.4":{"tag":"2.1.4","author":"dadsfam","date":"2026-08-01 20:54:18"},"2.1.5":{"tag":"2.1.5","author":"dadsfam","date":"2026-08-01 21:05:46"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3631327,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3631327,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3631327,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3631327,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.1.4","2.1.5"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[274193,16236,1764,274192,286],"plugin_category":[45,50],"plugin_contributors":[274194],"plugin_business_model":[],"class_list":["post-304003","plugin","type-plugin","status-publish","hentry","plugin_tags-invoice-download","plugin_tags-invoices","plugin_tags-pdf","plugin_tags-protected-storage","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-media","plugin_contributors-dadsfam","plugin_committers-dadsfam"],"banners":{"banner":"https:\/\/ps.w.org\/dadsfam-invoice-manager\/assets\/banner-772x250.png?rev=3631327","banner_2x":"https:\/\/ps.w.org\/dadsfam-invoice-manager\/assets\/banner-1544x500.png?rev=3631327","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/dadsfam-invoice-manager\/assets\/icon-128x128.png?rev=3631327","icon_2x":"https:\/\/ps.w.org\/dadsfam-invoice-manager\/assets\/icon-256x256.png?rev=3631327","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>DadsFam Invoice Manager<\/strong> is the free base plugin of a freemium WooCommerce invoice solution. It handles secure upload, management, payment tracking and delivery of PDF invoices.<\/p>\n\n<p>Install <strong>DadsFam Invoice Manager PRO<\/strong> alongside it for the full invoice generator, automatic PDF creation, PDF status sync, automated payment reminders, bulk upload and the audit log. The PRO add-on requires this free plugin to be installed and active.<\/p>\n\n<p><strong>Free Features:<\/strong><\/p>\n\n<ul>\n<li>Upload and manage PDF invoices per WooCommerce order<\/li>\n<li>Protected folder storage (blocks direct URL access) or Media Library mode<\/li>\n<li>HMAC-signed, single-token expiring customer download links<\/li>\n<li>Payment status tracking (Paid \/ Unpaid \/ Overdue \/ Cancelled) with one-click change<\/li>\n<li>Email status tracking (Uploaded \/ Sent \/ Resent)<\/li>\n<li>Resend an invoice email to the customer at any time<\/li>\n<li>CSV export of all invoice records<\/li>\n<li>Missing-invoices tracker with ignore \/ restore<\/li>\n<li>Customer My Account \u2192 Invoices integration (download + email-me)<\/li>\n<li>Custom From Name \/ From Email (fixes the wordpress@ sender bug)<\/li>\n<li>Full email branding \u2014 logo, header\/button\/text colours, footer text and social links<\/li>\n<li>Complete HTML email template editor with live preview and placeholders<\/li>\n<li>Configurable download-link validity<\/li>\n<li>Accent colour customisation<\/li>\n<\/ul>\n\n<p><strong>PRO Features (get PRO at <a href=\"https:\/\/plugins.dadsfam.co.za\/\">plugins.dadsfam.co.za<\/a>):<\/strong><\/p>\n\n<ul>\n<li><strong>Invoice Creator<\/strong> \u2014 generate professional PDF invoices from any WooCommerce order in one click<\/li>\n<li><strong>Auto-Generation<\/strong> \u2014 create invoices automatically when an order reaches a chosen status<\/li>\n<li><strong>Smart Email Triggers<\/strong> \u2014 email the customer on a separate configurable status<\/li>\n<li><strong>PDF Status Sync<\/strong> \u2014 the invoice PDF re-stamps itself from UNPAID to PAID when the order (or the manual status dropdown) changes \u2014 no delete-and-recreate<\/li>\n<li><strong>Product Variations &amp; Bundles on the PDF<\/strong><\/li>\n<li><strong>Invoice Settings<\/strong> \u2014 company logo, address, tax\/VAT number, banking details, payment terms and numbering<\/li>\n<li><strong>Automated Payment Reminders<\/strong> (cron)<\/li>\n<li><strong>Bulk Upload<\/strong> via ZIP + CSV mapping<\/li>\n<li><strong>Audit Log<\/strong> of every admin action<\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<p>Email: support@dadsfam.co.za\nWebsite: https:\/\/plugins.dadsfam.co.za<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>dadsfam-invoice-manager<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Go to <strong>Invoices<\/strong> in your WP Admin sidebar<\/li>\n<li>Set your From Email in <strong>Invoices \u2192 Email Settings<\/strong><\/li>\n<li><em>(Optional)<\/em> Install and activate <strong>DadsFam Invoice Manager PRO<\/strong> to unlock generation, PDF status sync, branding and more<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20the%20difference%20between%20free%20and%20pro%3F\"><h3>What is the difference between free and PRO?<\/h3><\/dt>\n<dd><p>The free plugin lets you upload, manage, track and deliver existing PDF invoices. PRO adds the Invoice Creator (generates PDFs from WooCommerce orders), auto-generation, PDF status sync, automated payment reminders, bulk upload and the audit log. PRO requires this free plugin to be active.<\/p><\/dd>\n<dt id=\"where%20are%20invoices%20stored%3F\"><h3>Where are invoices stored?<\/h3><\/dt>\n<dd><p>By default in a protected folder inside your WordPress uploads directory, blocked from direct public access via .htaccess. You can switch to Media Library mode in General Settings.<\/p><\/dd>\n<dt id=\"can%20customers%20download%20their%20invoices%3F\"><h3>Can customers download their invoices?<\/h3><\/dt>\n<dd><p>Yes \u2014 invoices appear in the customer's My Account \u2192 Invoices tab with signed, expiring download links, plus an \"Email Me\" button.<\/p><\/dd>\n<dt id=\"when%20i%20change%20the%20payment%20status%2C%20does%20the%20pdf%20update%3F\"><h3>When I change the payment status, does the PDF update?<\/h3><\/dt>\n<dd><p>The badge updates everywhere immediately. Re-stamping the actual PDF document (e.g. UNPAID \u2192 PAID) is done by the PRO add-on for invoices the plugin generated. Uploaded PDFs keep their original file.<\/p><\/dd>\n<dt id=\"why%20are%20my%20emails%20going%20to%20spam%3F\"><h3>Why are my emails going to spam?<\/h3><\/dt>\n<dd><p>Set a real From Email address on your own domain in Email Settings (e.g. invoices@yourdomain.com).<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20woocommerce%20hpos%3F\"><h3>Does this work with WooCommerce HPOS?<\/h3><\/dt>\n<dd><p>Yes \u2014 fully compatible with WooCommerce High Performance Order Storage.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.5<\/h4>\n\n<ul>\n<li>Changed: all plugin and support links now point to https:\/\/plugins.dadsfam.co.za\/ (the plugin site) rather than the main DadsFam site. Support email is unchanged at support@dadsfam.co.za.<\/li>\n<\/ul>\n\n<h4>2.1.4<\/h4>\n\n<ul>\n<li>Security: colour values are now re-validated as literal hex colours at the moment they are written into a stylesheet, a style attribute or an email body, rather than being trusted from the options table. Options can be written by WP-CLI, an import or another plugin, so sanitising on save is not enough on its own \u2014 escaping now happens late, at the point of output, in the front-end My Account styles, the admin styles, the branded email header and the email template placeholders.<\/li>\n<li>Security: every placeholder substituted into the email template is now escaped for the context it lands in \u2014 the download link through <code>esc_url()<\/code>, the customer name and site name through <code>esc_html()<\/code>, and the order number and link expiry as integers.<\/li>\n<li>Security: the logo URL and its pixel dimensions in the branded email header are escaped and type-cast on output.<\/li>\n<li>Security: the payment-status badge in the Manage Invoices list is passed through <code>wp_kses_post()<\/code> on output instead of relying on the helper escaping its own contents.<\/li>\n<li>Quality: variables in the admin views that shared a name with a WordPress global (<code>$order<\/code>, <code>$status<\/code>, <code>$search<\/code>, <code>$paged<\/code>, <code>$tab<\/code>, <code>$tabs<\/code>, <code>$s<\/code>) were renamed to plugin-prefixed names.<\/li>\n<li>Quality: replaced the two remaining <code>@<\/code> error-suppression operators with real checks, made the <code>in_array()<\/code> comparisons strict, capped the invoice list query at 100 rows per view, and documented that the base64 helpers are URL-safe transport encoding for the signed download token, not obfuscation.<\/li>\n<\/ul>\n\n<h4>2.1.3<\/h4>\n\n<ul>\n<li>Added: <code>DFIM_Loader::format_invoice_number()<\/code> and the <code>dfim_inv_number_format<\/code> option key, so the PRO add-on can build invoice numbers from a token pattern instead of a fixed one. As with the other PRO keys held here, the free plugin neither reads nor writes it.<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li>Added: <code>DFIM_Loader::normalize_status_list()<\/code>, a small shared helper so the PRO add-on's auto-generate\/auto-email trigger options can hold more than one order status instead of only one. Added here because this is the shared base class both plugins extend \u2014 the free plugin itself does not call it for anything and gates no functionality on it.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Compliance: audit logging is now entirely part of the separate PRO add-on. The free plugin no longer registers an audit post type or stores any audit data \u2014 it simply fires a <code>dfim_log<\/code> action hook that the PRO add-on can listen to. Nothing in the free plugin is locked, limited or gated.<\/li>\n<li>Removed: leftover licence-activation interface (the licence-key field handlers and its nonce) that belonged to the PRO add-on. The free plugin contains no licence checks and no licence storage of any kind.<\/li>\n<li>Changed: the two JavaScript data objects were renamed to the plugin's <code>dfim<\/code> prefix (<code>dfimAdmin<\/code>, <code>dfimFront<\/code>) so every registered global name is unique and distinct.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Compliance: every feature contained in this plugin is now fully available to all users \u2014 the email branding suite (logo, colours, footer, social links, full template editor with live preview) has no licence conditions of any kind. This plugin contains no locked or limited functionality; additional features (invoice generation, reminders, bulk upload, audit log) exist only as a separate add-on plugin and are merely mentioned, per the directory guidelines.<\/li>\n<li>Changed: automated-reminder settings moved out of this plugin; they are configured inside the PRO add-on, where the reminder feature itself lives.<\/li>\n<li>Changed: the bundled Select2 library has been removed. Searchable dropdowns now use selectWoo, the maintained Select2 fork that ships with WooCommerce (which this plugin requires), so no third-party library is bundled.<\/li>\n<li>Changed: the My Account \"Email Me\" script moved from an inline template tag to a properly enqueued JavaScript file.<\/li>\n<li>Fixed: plugin and upgrade links now point to the live https:\/\/www.dadsfam.co.za\/ site.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Code quality: Plugin Check now reports zero errors and zero warnings. Uninstall variables carry the plugin prefix (uninstall runs in global scope), and the My Account template documents its function-local scope for the naming sniff.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Code quality: full WordPress Coding Standards pass \u2014 the plugin now scans clean (0 errors, 0 warnings) under the official Plugin Check security, escaping, sanitization, database and naming sniffs.<\/li>\n<li>Security: every output is escaped or type-cast; every request input is unslashed and sanitized; all admin redirects use wp_safe_redirect(); direct file deletions use wp_delete_file().<\/li>\n<li>Fixed: the Missing Invoices pagination footer showed the last order's total instead of the result count (variable shadowing).<\/li>\n<li>Read-only display filters are explicitly annotated as nonce-exempt with justification.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Security: the admin order-search AJAX endpoint now requires a CSRF nonce in addition to the existing capability check.<\/li>\n<li>Security: invoice file paths resolved from stored attachment metadata are strictly confined to the WordPress uploads directory, so tampered metadata can never point at arbitrary server files.<\/li>\n<li>Security: the email template preview endpoint now also verifies the WooCommerce-manager capability.<\/li>\n<li>Improved: escaped all admin URL output in the changelog pagination.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Freemium split: this is now the free base plugin. All PRO features (Invoice Creator, auto-generation, PDF status sync, reminders, bulk upload, advanced branding, audit log) have moved to the separate <strong>DadsFam Invoice Manager PRO<\/strong> add-on, which requires this plugin to be active.<\/li>\n<li>New: Clean extension points (<code>dfim_core_booted<\/code>, <code>dfim_register_admin_menus<\/code>, <code>dfim_admin_assets<\/code>, <code>dfim_manage_tabs<\/code>, <code>dfim_render_manage_tab<\/code>, <code>dfim_manage_header_links<\/code>, <code>dfim_invoice_status_changed<\/code>, <code>dfim_is_pro_active<\/code>) let the PRO add-on plug in cleanly.<\/li>\n<li>Improved: The Manage Invoices payment dropdown now fires a status-change event so PRO can re-stamp the generated PDF instantly \u2014 no more deleting and re-uploading to fix a Paid\/Unpaid stamp.<\/li>\n<li>Upgrading from a single-plugin (1.9.x) install: all your invoices, settings and license are preserved. Install the PRO add-on to restore generation and the other PRO features.<\/li>\n<\/ul>\n\n<h4>1.9.10<\/h4>\n\n<ul>\n<li>Fixed: long invoices flow onto extra pages instead of being cut off (PRO).<\/li>\n<li>Changed: download-link validity setting consolidated to Email Settings \u2192 Download Links.<\/li>\n<\/ul>\n\n<h4>1.9.9<\/h4>\n\n<ul>\n<li>Fixed: emailed download links no longer fail with \"Invalid or tampered download link\" \u2014 the link is now a single secure token.<\/li>\n<li>New: \"Link valid for (days)\" setting and {link_expiry_days} placeholder.<\/li>\n<\/ul>","raw_excerpt":"Secure WooCommerce invoice manager \u2014 upload, store, track and deliver PDF invoices with signed expiring download links and customer My Account access.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/304003","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=304003"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dadsfam"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=304003"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=304003"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=304003"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=304003"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=304003"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=304003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}