{"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-04T09:13:41","modified_gmt":"2026-08-04T09:13:41","slug":"dadsfam-invoice-manager","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/dadsfam-invoice-manager\/","author":23486748,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.3.9","stable_tag":"2.3.9","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-04 09:13:41","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":201,"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"},"2.1.8":{"tag":"2.1.8","author":"dadsfam","date":"2026-08-02 07:19:49"},"2.1.9":{"tag":"2.1.9","author":"dadsfam","date":"2026-08-02 07:32:35"},"2.2.1":{"tag":"2.2.1","author":"dadsfam","date":"2026-08-02 13:14:29"},"2.3.4":{"tag":"2.3.4","author":"dadsfam","date":"2026-08-02 18:15:54"},"2.3.5":{"tag":"2.3.5","author":"dadsfam","date":"2026-08-03 12:33:55"},"2.3.6":{"tag":"2.3.6","author":"dadsfam","date":"2026-08-04 08:36:31"},"2.3.8":{"tag":"2.3.8","author":"dadsfam","date":"2026-08-04 09:00:55"},"2.3.9":{"tag":"2.3.9","author":"dadsfam","date":"2026-08-04 09:13:41"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3631561,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3631561,"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","2.1.8","2.1.9","2.2.1","2.3.4","2.3.5","2.3.6","2.3.8","2.3.9"],"block_files":[],"assets_screenshots":{"Screenshot-1.png":{"filename":"Screenshot-1.png","revision":3631569,"resolution":"1","location":"assets","locale":"","width":1738,"height":844},"Screenshot-2.png":{"filename":"Screenshot-2.png","revision":3631561,"resolution":"2","location":"assets","locale":"","width":1742,"height":767},"Screenshot-3.png":{"filename":"Screenshot-3.png","revision":3631561,"resolution":"3","location":"assets","locale":"","width":1739,"height":685}},"screenshots":{"1":"The invoice builder \u2014 add lines, set discount and tax, watch the total update as you type.","2":"Invoice Details \u2014 your business name, logo, VAT number, banking details and numbering, all on one screen.","3":"Build an invoice straight from a WooCommerce order in one click."}},"plugin_section":[],"plugin_tags":[15149,16236,1764,354,286],"plugin_category":[45,50],"plugin_contributors":[274194],"plugin_business_model":[],"class_list":["post-304003","plugin","type-plugin","status-publish","hentry","plugin_tags-billing","plugin_tags-invoices","plugin_tags-pdf","plugin_tags-quotes","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=3631561","icon_2x":"https:\/\/ps.w.org\/dadsfam-invoice-manager\/assets\/icon-256x256.png?rev=3631561","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/dadsfam-invoice-manager\/assets\/Screenshot-1.png?rev=3631569","caption":"The invoice builder \u2014 add lines, set discount and tax, watch the total update as you type."},{"src":"https:\/\/ps.w.org\/dadsfam-invoice-manager\/assets\/Screenshot-2.png?rev=3631561","caption":"Invoice Details \u2014 your business name, logo, VAT number, banking details and numbering, all on one screen."},{"src":"https:\/\/ps.w.org\/dadsfam-invoice-manager\/assets\/Screenshot-3.png?rev=3631561","caption":"Build an invoice straight from a WooCommerce order in one click."}],"raw_content":"<!--section=description-->\n<p><strong>DadsFam Invoice Manager<\/strong> does the invoice side of a WooCommerce shop properly. Create an invoice from any order in one click, or upload one you already have. Store them somewhere customers cannot poke at, track what is paid, and send them out with a link that expires.<\/p>\n\n<p>It is free. Not free-until-you-need-the-good-bit. Free.<\/p>\n\n<p><strong>What it does:<\/strong><\/p>\n\n<ul>\n<li><strong>Create an invoice from any WooCommerce order<\/strong> \u2014 pick the order, press the button, get a branded PDF<\/li>\n<li>Put your own business details, logo, VAT number and banking details on it<\/li>\n<li>Your own invoice numbering, with a prefix and padding that make sense to you<\/li>\n<li>Upload and manage PDF invoices you produced somewhere else<\/li>\n<li>Protected folder storage that blocks direct URL access, or Media Library mode if you prefer<\/li>\n<li>HMAC-signed, single-use download links that expire when you say<\/li>\n<li>Payment status tracking \u2014 Paid, Unpaid, Overdue, Cancelled \u2014 changed in one click<\/li>\n<li>Email status tracking, so you know what actually went out<\/li>\n<li>Resend an invoice to a customer whenever they ask<\/li>\n<li>CSV export of every invoice record<\/li>\n<li>A missing-invoices tracker, so nothing quietly slips through<\/li>\n<li>Customer My Account \u2192 Invoices, so they can help themselves<\/li>\n<li>Custom From Name and From Email, which fixes the wordpress@ sender problem<\/li>\n<li>Full email branding \u2014 logo, colours, footer, social links<\/li>\n<li>A proper HTML email template editor with live preview<\/li>\n<\/ul>\n\n<p><strong>Quotations, also free:<\/strong><\/p>\n\n<ul>\n<li>Build a quotation the same way you build an invoice \u2014 line items, discount, tax, extra charges<\/li>\n<li>Branded A4 PDF, using the same business details and logo as your invoices<\/li>\n<li>Email it straight to the client<\/li>\n<li>The client can <strong>accept or decline online<\/strong>, and you get told<\/li>\n<li>Quotations expire on their own after however many days you choose<\/li>\n<li>Separate quote numbering, so QUO-0001 and INV-0001 never collide<\/li>\n<li><strong>Turn an accepted quotation into an invoice with one button<\/strong> \u2014 everything carries across<\/li>\n<\/ul>\n\n<h3>A word about PRO<\/h3>\n\n<p>Right, let me be straight with you, because I hate being sold to as much as you do.<\/p>\n\n<p>Everything above is free and it stays free. Creating invoices is not a premium feature. Putting your own logo and banking details on them is not a premium feature. Those are the things a plugin like this should just <em>do<\/em>, and if I put them behind a paywall I would be taking the mickey.<\/p>\n\n<p>There is a PRO add-on. It exists because I am a dad in Cape Town, and this is one of the things that puts food on the table at my house. That is the honest reason. Not \"unlock your potential\", not \"supercharge your workflow\". Just: if this plugin saved you a headache and you can spare it, PRO helps me keep building.<\/p>\n\n<p>What PRO adds is the stuff you only want once you are doing real volume \u2014 invoices generating themselves on a status change, PDFs re-stamping from UNPAID to PAID on their own, payment reminders going out without you, bulk uploading a hundred invoices from a ZIP, and an audit log of who did what. That is convenience and automation. It is not the plugin working properly, because the plugin already works properly.<\/p>\n\n<p>So if the free one does everything you need, brilliant. Genuinely. Use it, and I hope it saves you an afternoon. If you get to the point where the automation would save you real time, PRO is at <a href=\"https:\/\/plugins.dadsfam.co.za\/\">plugins.dadsfam.co.za<\/a>.<\/p>\n\n<p>Either way, thanks for using something I built. \u2014 Zak, DadsFam<\/p>\n\n<p><strong>PRO adds:<\/strong><\/p>\n\n<ul>\n<li><strong>Auto-generation<\/strong> \u2014 invoices created automatically when an order hits a status you choose<\/li>\n<li><strong>Smart email triggers<\/strong> \u2014 send to the customer on a separate status<\/li>\n<li><strong>PDF status sync<\/strong> \u2014 the PDF re-stamps itself from UNPAID to PAID, no delete-and-recreate<\/li>\n<li><strong>Automated payment reminders<\/strong> on a schedule<\/li>\n<li><strong>Bulk upload<\/strong> via ZIP and a CSV mapping<\/li>\n<li><strong>Audit log<\/strong> of every admin action<\/li>\n<li>Product variations and bundles broken out on the PDF<\/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>Add your business details in <strong>Invoices \u2192 Invoice Details<\/strong><\/li>\n<li>Create your first invoice in <strong>Invoices \u2192 Create Invoice<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20anything%20else%20to%20send%20quotations%3F\"><h3>Do I need anything else to send quotations?<\/h3><\/dt>\n<dd><p>No. Quotations are part of this plugin and part of the free version. Your client gets a branded PDF and a link where they can accept or decline, and you get notified either way.<\/p><\/dd>\n<dt id=\"i%20already%20use%20dadsfam%20quotation%20creator.%20will%20this%20clash%3F\"><h3>I already use DadsFam Quotation Creator. Will this clash?<\/h3><\/dt>\n<dd><p>No. If that plugin is active, this one leaves quotations entirely alone \u2014 no duplicate menus, no duplicate post type. Your existing quotations stay exactly as they are. If you later remove it, they will simply show up here instead, because both use the same storage.<\/p><\/dd>\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>Free creates invoices, brands them, stores them, tracks them and delivers them. PRO automates it \u2014 generating invoices on a status change, re-stamping PDFs when payment lands, sending reminders on a schedule, bulk uploading from a ZIP, and keeping an audit log. If you are happy pressing a button when you need an invoice, free is the whole thing.<\/p><\/dd>\n<dt id=\"do%20i%20need%20pro%20to%20create%20invoices%3F\"><h3>Do I need PRO to create invoices?<\/h3><\/dt>\n<dd><p>No. Creating invoices is free, and it stays free.<\/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.3.9<\/h4>\n\n<ul>\n<li>Fixed: the access token in a quotation link was being encoded twice when the link was built, so it no longer matched what was stored and the client was told the link was invalid.<\/li>\n<li>Changed: the token is now read from either a link or a form, and decoded before it is compared, so it survives whatever the client's email provider does to links on the way through.<\/li>\n<li>Added: when the quotation page cannot open a link, anyone logged in who can manage the shop sees a short note explaining exactly why. Clients never see it.<\/li>\n<\/ul>\n\n<h4>2.3.8<\/h4>\n\n<ul>\n<li>Fixed: the Accept and Decline buttons in a quotation email did not work. They are ordinary links, so they arrive as a normal page request, but the handler only read posted form data \u2014 so the token never arrived and the client was told the link was not valid. Those buttons now open the quotation with the choice ready to confirm.<\/li>\n<li>Changed: accepting or declining still only happens when the client presses the confirm button on the page. Mail scanners and link previewers fetch every link in a message, and a quotation must never be accepted because an email client looked at it.<\/li>\n<li>Changed: the client-facing pages have been redesigned \u2014 a clear prompt explaining that nothing has happened yet and which button finishes it, and a proper card for the \"cannot open this\" and \"expired\" pages instead of a bare line of text.<\/li>\n<\/ul>\n\n<h4>2.3.7<\/h4>\n\n<ul>\n<li>Fixed: saving the Invoice Details screen could wipe business details, the invoice prefix and the next invoice number. The screen shares its settings with the PRO add-on on purpose, so you only fill them in once, but it was writing its own blank defaults over whatever was already stored. An empty field now leaves the existing value alone, and when the PRO add-on is active its own Invoice Settings screen owns these values outright.<\/li>\n<li>Fixed: the next invoice number can no longer be set lower than a number already issued, which would have produced duplicate invoice numbers on documents customers already hold.<\/li>\n<li>Added: a one-time repair that reads the invoices already on the site, works out the highest number actually used and the prefix they were issued under, and puts the counter back in step. It only ever moves the counter forward, and never overwrites a setting that is already filled in.<\/li>\n<\/ul>\n\n<h4>2.3.6<\/h4>\n\n<ul>\n<li>Fixed: on a quotation with a logo, the coloured header band was still sized before the logo was measured, so a tall logo could push the last line of your business details \u2014 usually the website \u2014 past the bottom edge of the colour. Invoices were corrected in 2.3.5; this brings quotations in line.<\/li>\n<li>Fixed: a long website address in the header could run underneath the document title. Header lines are now shortened to stay in their own column.<\/li>\n<\/ul>\n\n<h4>2.3.5<\/h4>\n\n<ul>\n<li>Fixed: a full business block \u2014 address, phone, email and website \u2014 ran off the bottom of the coloured header on invoice and quotation PDFs, cutting the last line in half. The header now grows to fit whatever you have filled in, and a very long line is shortened rather than running under the document title.<\/li>\n<\/ul>\n\n<h4>2.3.4<\/h4>\n\n<ul>\n<li>Fixed: the quotation screens loaded but had no styling at all. The markup and the stylesheet had ended up using different class names, so nothing matched.<\/li>\n<li>Fixed: several buttons on the invoice builder linked to pages that do not exist in this plugin.<\/li>\n<li>Removed: an \"Email it to the client\" button on the invoice builder that had never been wired to anything and did nothing when clicked.<\/li>\n<\/ul>\n\n<h4>2.3.3<\/h4>\n\n<ul>\n<li>Fixed: the quotation screens were blank, and the Quotations menu opened the invoice list without any styling. The quotation module was still pointing at the folders of the plugin it came from, so its pages and its stylesheet were never found.<\/li>\n<\/ul>\n\n<h4>2.3.2<\/h4>\n\n<ul>\n<li>Fixed: the Quotations menu never appeared. It was being added a moment before the Invoices menu it belongs under existed, so WordPress quietly discarded it.<\/li>\n<li>Added: <strong>turn a quotation into an invoice<\/strong>. One button on the quotations list copies the client, line items, discount, tax and extra charges across into a new invoice. The quotation is left exactly as it was, and the two are linked, so pressing it again opens the invoice you already made rather than creating a second one.<\/li>\n<\/ul>\n\n<h4>2.3.1<\/h4>\n\n<ul>\n<li>Fixed: a fatal error on the admin screens. Four internal constants were left with the wrong names when the quotations module was brought in, so loading an admin page brought the site down. Nobody should have seen 2.3.0; this replaces it.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Added: <strong>Quotations<\/strong>, free. Build a quotation with line items, discount, tax and extra charges, send it to the client as a branded A4 PDF, and let them accept or decline it online. Quotations expire on their own after a number of days you set.<\/li>\n<li>Added: quotations use the same business details, logo and banking details as your invoices, so you fill that in once. Quote numbering is kept separate so QUO-0001 and INV-0001 never collide.<\/li>\n<li>Note: if you already run the standalone DadsFam Quotation Creator plugin, this module stays out of its way automatically and your existing quotations are left exactly where they are.<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Fixed: the Manage Invoices table was cut off on the right, hiding the Payment and Actions columns. A width limit meant for the Invoice Details form was being applied to every panel, including the wide data tables.<\/li>\n<li>Fixed: the invoice tables now scroll sideways on narrower screens instead of having columns clipped off the edge.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Fixed: customer search on the invoice builder found almost nobody. It only looked at WordPress account names, so it missed the billing name people actually order under, and missed guest customers entirely. It now searches billing first name, last name, company and email across both accounts and past orders.<\/li>\n<li>Fixed: the builder screens are open to shop managers, but every search and save was being rejected behind the scenes because the permission check demanded a stricter capability than the menu did.<\/li>\n<li>Fixed: if a search failed it drew an empty box with no explanation. It now says what went wrong.<\/li>\n<\/ul>\n\n<h4>2.1.9<\/h4>\n\n<ul>\n<li>Changed: the dashboard note about the paid add-on now explains the honest reason it exists, and can be dismissed for good.<\/li>\n<li>Fixed: the Invoice Creator shortcut still pointed at the shop with a PRO badge, even though creating invoices is free.<\/li>\n<\/ul>\n\n<h4>2.1.8<\/h4>\n\n<ul>\n<li>Added: screenshots on the plugin directory page.<\/li>\n<\/ul>\n\n<h4>2.1.7<\/h4>\n\n<ul>\n<li>Added: a full invoice builder. Add line items by hand or pull them from your WooCommerce products, set a discount and tax rate, add extra charges and custom fields, and watch the total update as you type.<\/li>\n<li>Added: <strong>From an Order<\/strong> \u2014 pick a WooCommerce order and the whole invoice is filled in from it in one click.<\/li>\n<li>Added: <strong>Created Invoices<\/strong> \u2014 everything you have built, in one list.<\/li>\n<li>Fixed: order totals on the picker showed a raw HTML entity (&#082;180,00) instead of the currency symbol.<\/li>\n<li>Fixed: the Invoice Details form was too narrow, which clipped the prefix and number fields.<\/li>\n<\/ul>\n\n<h4>2.1.6<\/h4>\n\n<ul>\n<li>Added: <strong>Create Invoice<\/strong>. Pick any WooCommerce order and produce a branded PDF invoice in one click. This is free and it stays free.<\/li>\n<li>Added: <strong>Invoice Details<\/strong> screen \u2014 your business name, address, phone, email, website, VAT number and logo, your own invoice numbering, payment terms, banking details and footer wording. All of it goes on the PDF.<\/li>\n<li>Changed: the plugin description now reflects that creating invoices is part of the free plugin. PRO is automation and bulk handling, not the basic job.<\/li>\n<li>Changed: readme tags swapped for terms the directory actually indexes.<\/li>\n<\/ul>\n\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":"Create invoices and quotations, store them safely, track payment and deliver them with signed expiring links. Free, with nothing held back.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/304003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=304003"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dadsfam"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=304003"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=304003"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=304003"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=304003"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=304003"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=304003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}