PluginProbe
Easy Invoice – Invoice Generator, PDF Quotes & Payments / 2.4.1
Easy Invoice – Invoice Generator, PDF Quotes & Payments v2.4.1
2.4.0 2.4.1 2.3.8 2.3.7 2.3.6 2.3.5 2.3.4 2.3.3 2.3.2 2.3.1 2.2.0 2.1.21 2.1.20 2.1.19 2.1.18 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.2 All 57 releases
← All changes | includes/Addons/AddonRegistry.php +126 -17 2.3.72.4.1 View file →
@@ -194,14 +194,9 @@
194 194 'icon' => 'dashicons-admin-users',
195 195 'category' => 'clients',
196 196 'badge' => null,
197 197 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/client-portal/',
198 - // ClientPortal extension stores config at
199 - // easy_invoice_pro_client_portal_settings; UI lives as a tab
200 - // on the main Settings page. No dedicated slug → leave
201 - // settings_url empty so the card doesn't render a misleading
202 - // "Settings →" link.
203 - 'settings_url' => '',
198 + 'settings_url' => admin_url('admin.php?page=easy-invoice-settings&section=client_portal'),
204 199 'pro_class' => 'EasyInvoicePro\\Addons\\ClientPortal\\ClientPortal',
205 200 ],
206 201 [
207 202 'id' => 'pdf_toolkit',
@@ -206,10 +201,19 @@
206 201 [
207 202 'id' => 'pdf_toolkit',
208 203 'name' => __('PDF Toolkit', 'easy-invoice'),
209 204 'short_name' => __('PDF Toolkit', 'easy-invoice'),
210 - 'tagline' => __('Customise every detail of your invoice and quote PDFs.', 'easy-invoice'),
211 - 'description' => __('Custom headers and footers, watermark stamps (PAID / DRAFT / OVERDUE / VOID), color and font controls, and per-document branding. Make every PDF look enterprise-grade — not stock WordPress.', 'easy-invoice'),
205 + 'tagline' => __('Stamp your invoices and quotes with a custom watermark.', 'easy-invoice'),
206 + // Describes what the addon actually offers. It previously advertised
207 + // "custom headers and footers" and "color and font controls": those are
208 + // not implemented and not exposed anywhere in its settings. The handlers
209 + // for them hang off six `easy_invoice_pdf_*` filters that nothing in
210 + // either plugin ever fires, because PDFs are rendered in the browser
211 + // from the document view rather than by a server-side pipeline there
212 + // would be something to hook. Headers, footers and font control need
213 + // that server-side renderer first. The watermark is real: it is drawn
214 + // into the document view, which is what the PDF is rasterised from.
215 + 'description' => __('Watermark your invoices and quotes — text or image, with control over the wording, colour, size and opacity. Use it to stamp PAID, DRAFT, OVERDUE or VOID across a document, or to drop your logo behind the content.', 'easy-invoice'),
212 216 'plan' => LicensePlanResolver::PLAN_PERSONAL,
213 217 'icon' => 'dashicons-pdf',
214 218 'category' => 'branding',
215 219 'badge' => null,
@@ -230,9 +234,15 @@
230 234 'icon' => 'dashicons-download',
231 235 'category' => 'productivity',
232 236 'badge' => null,
233 237 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/bulk-operations/',
234 - 'settings_url' => '',
238 + // The addon does own a screen — Export Data. Leaving this empty meant
239 + // the Addons card offered no way into it, and, more importantly, the
240 + // admin dispatcher uses this list to recognise addon-owned slugs: with
241 + // no entry it fell through and painted the Dashboard, then the export
242 + // form rendered underneath it (the "two pages stacked" case the
243 + // dispatcher's default branch warns about).
244 + 'settings_url' => admin_url('admin.php?page=easy-invoice-export'),
235 245 'pro_class' => 'EasyInvoicePro\\Addons\\BulkOperations\\BulkOperations',
236 246 ],
237 247 [
238 248 'id' => 'item_library',
@@ -292,20 +302,16 @@
292 302 [
293 303 'id' => 'email_enhancements',
294 304 'name' => __('Email Enhancements', 'easy-invoice'),
295 305 'short_name' => __('Email Tools', 'easy-invoice'),
296 - 'tagline' => __('Send branded HTML emails with PDF attached, CC / BCC, and Reply-To.', 'easy-invoice'),
297 - 'description' => __('Branded HTML emails with your colors and logo. Add CC / BCC, auto-attach the PDF, customise the subject and body per invoice, and set a Reply-To so client replies reach the right inbox.', 'easy-invoice'),
306 + 'tagline' => __('Your own email layout, and a Reply-To per kind of email.', 'easy-invoice'),
307 + 'description' => __('Wrap every email Easy Invoice sends in your own HTML layout, and route replies by kind — invoice questions to accounts, quote replies to sales, receipts and reminders wherever they belong.', 'easy-invoice'),
298 308 'plan' => LicensePlanResolver::PLAN_PERSONAL,
299 309 'icon' => 'dashicons-email',
300 310 'category' => 'productivity',
301 311 'badge' => null,
302 312 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/email-enhancements/',
303 - // EmailEnhancements appends Reply-To / advanced email
304 - // fields to the main Settings page; no dedicated slug →
305 - // empty settings_url hides the misleading "Settings →"
306 - // link.
307 - 'settings_url' => '',
313 + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-email-enhancements'),
308 314 'pro_class' => 'EasyInvoicePro\\Addons\\EmailEnhancements\\EmailEnhancements',
309 315 ],
310 316 [
311 317 'id' => 'secure_links',
@@ -348,13 +354,116 @@
348 354 'settings_url' => '',
349 355 'pro_class' => 'EasyInvoicePro\\Addons\\PrivacyTools\\PrivacyTools',
350 356 ],
351 357 [
358 + 'id' => 'einvoicing',
359 + 'name' => __('E-Invoicing (Factur-X / ZUGFeRD / Peppol UBL)', 'easy-invoice'),
360 + 'short_name' => __('E-Invoicing', 'easy-invoice'),
361 + 'tagline' => __('Issue and read the structured invoices now required across the EU.', 'easy-invoice'),
362 + 'description' => __('Turn any invoice into Factur-X — a PDF your client can read with the EN 16931 machine-readable document carried inside it — or into Peppol BIS 3.0 UBL, which is what Belgium, the Netherlands and the Peppol network run on. Your customer\'s country decides which. Also opens incoming Factur-X, ZUGFeRD, CII and UBL invoices from your suppliers, which is the obligation that lands first: France requires every VAT-registered business to receive structured invoices from September 2026, Germany has since 2025. Produces the compliant file; sending stays with your own Peppol, KSeF or PDP provider.', 'easy-invoice'),
363 + 'plan' => LicensePlanResolver::PLAN_PROFESSIONAL,
364 + 'icon' => 'dashicons-media-code',
365 + 'category' => 'compliance',
366 + 'badge' => 'new',
367 + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/e-invoicing/',
368 + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-einvoicing'),
369 + 'pro_class' => 'EasyInvoicePro\\Addons\\EInvoicing\\EInvoicing',
370 + ],
371 + [
372 + 'id' => 'client_language',
373 + 'name' => __('Client Language', 'easy-invoice'),
374 + // Sidebar label: the page it opens is the Translations screen.
375 + 'short_name' => __('Translations', 'easy-invoice'),
376 + 'tagline' => __('Each client gets invoices, PDFs and emails in their own language.', 'easy-invoice'),
377 + 'description' => __('Set a language on the client record and every document for that client — the public page, the PDF, the emails — is produced in it, using the WordPress language pack and the per-language wording from the Translations screen. Invoice French, German and Italian clients from one site without three sites.', 'easy-invoice'),
378 + 'plan' => LicensePlanResolver::PLAN_PROFESSIONAL,
379 + 'icon' => 'dashicons-translation',
380 + 'category' => 'clients',
381 + 'badge' => 'new',
382 + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/client-language/',
383 + // The language is chosen on each client's record; the wording
384 + // per language lives on the Translations screen — that is the
385 + // one place this addon has settings of its own.
386 + 'settings_url' => admin_url('admin.php?page=easy-invoice-pro-translations'),
387 + 'settings_label' => __('Translations', 'easy-invoice'),
388 + 'pro_class' => 'EasyInvoicePro\\Addons\\ClientLanguage\\ClientLanguage',
389 + ],
390 + [
391 + 'id' => 'retainers',
392 + 'name' => __('Retainers & Prepaid Credit', 'easy-invoice'),
393 + 'short_name' => __('Retainers', 'easy-invoice'),
394 + 'tagline' => __('Record a prepayment once; let invoices draw it down.', 'easy-invoice'),
395 + 'description' => __('A monthly block of hours, a deposit that covers several small jobs, a negotiated prepayment: record it against the client and apply it to invoices as they come, by hand from the client record or automatically the moment an invoice is issued. Applied credit is an ordinary payment, so statements, reports and accounting sync all see money received, and the balance is always on the client record.', 'easy-invoice'),
396 + 'plan' => LicensePlanResolver::PLAN_PROFESSIONAL,
397 + 'icon' => 'dashicons-vault',
398 + 'category' => 'billing',
399 + 'badge' => 'new',
400 + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/retainers/',
401 + 'settings_url' => admin_url('admin.php?page=easy-invoice-settings&tab=invoice'),
402 + 'pro_class' => 'EasyInvoicePro\\Addons\\Retainers\\Retainers',
403 + ],
404 + [
405 + 'id' => 'payment_links',
406 + 'name' => __('Payment Links & QR Codes', 'easy-invoice'),
407 + 'short_name' => __('Payment Links', 'easy-invoice'),
408 + 'tagline' => __('Get paid from a link or a QR code — no invoice needed first.', 'easy-invoice'),
409 + 'description' => __('Create a link for a fixed amount, or one where the payer enters the amount, and share it anywhere: an email signature, a social post, a printed QR code at the counter. The payer types their name and email, an invoice is created for them on the spot, and they pay it with any of your gateways — so receipts, the client record, reports and accounting sync all just work. Every link shows what it has collected.', 'easy-invoice'),
410 + 'plan' => LicensePlanResolver::PLAN_PERSONAL,
411 + 'icon' => 'dashicons-admin-links',
412 + 'category' => 'billing',
413 + 'badge' => 'new',
414 + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/payment-links/',
415 + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-payment-links'),
416 + 'pro_class' => 'EasyInvoicePro\\Addons\\PaymentLinks\\PaymentLinks',
417 + ],
418 + [
419 + 'id' => 'quote_signatures',
420 + 'name' => __('Quote E-Signatures', 'easy-invoice'),
421 + 'short_name' => __('E-Signatures', 'easy-invoice'),
422 + 'tagline' => __('Accepted means signed: a drawn signature, name, time and address on every approval.', 'easy-invoice'),
423 + 'description' => __('When a client accepts a quote they sign it — drawn with a mouse or finger, with their typed name, the time and their connection details recorded. The signature block is printed on the quote, its PDF and any invoice made from it, so an approval is something you can show rather than a click in a log. Required or optional, your choice.', 'easy-invoice'),
424 + 'plan' => LicensePlanResolver::PLAN_PERSONAL,
425 + 'icon' => 'dashicons-edit',
426 + 'category' => 'documents',
427 + 'badge' => 'new',
428 + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/quote-signatures/',
429 + 'settings_url' => admin_url('admin.php?page=easy-invoice-settings&tab=quote'),
430 + 'pro_class' => 'EasyInvoicePro\\Addons\\QuoteSignatures\\QuoteSignatures',
431 + ],
432 + [
433 + 'id' => 'quote_forms',
434 + 'name' => __('Quote Request Forms', 'easy-invoice'),
435 + 'short_name' => __('Quote Forms', 'easy-invoice'),
436 + 'tagline' => __('A form submission becomes a draft quote, client included.', 'easy-invoice'),
437 + 'description' => __('Connect WPForms, Gravity Forms, Contact Form 7 or Fluent Forms: when someone submits your quote-request form, the client is found or created from their email and a draft quote opens with what they wrote — and a first line item if the form asks for a service or amount. You price it and send it; nothing is retyped. Any other form can feed it through one action hook.', 'easy-invoice'),
438 + 'plan' => LicensePlanResolver::PLAN_PERSONAL,
439 + 'icon' => 'dashicons-feedback',
440 + 'category' => 'integrations',
441 + 'badge' => 'new',
442 + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/quote-forms/',
443 + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-quote-forms'),
444 + 'pro_class' => 'EasyInvoicePro\\Addons\\QuoteForms\\QuoteForms',
445 + ],
446 + [
447 + 'id' => 'woocommerce',
448 + 'name' => __('WooCommerce Invoicing', 'easy-invoice'),
449 + 'short_name' => __('WooCommerce', 'easy-invoice'),
450 + 'tagline' => __('A real invoice for every shop order — and a credit note for every refund.', 'easy-invoice'),
451 + 'description' => __('Issue an Easy Invoice invoice automatically when a WooCommerce order is paid, mirroring its lines and totals exactly. Refunds become credit notes against the invoice. Customers get an Invoice link in My Account, the order screen shows the invoice with its PDF, and with the E-Invoicing addon every order can be sent as Factur-X or Peppol UBL — which no WooCommerce PDF plugin offers without a further paid extension. Works with High-Performance Order Storage.', 'easy-invoice'),
452 + 'plan' => LicensePlanResolver::PLAN_PERSONAL,
453 + 'icon' => 'dashicons-cart',
454 + 'category' => 'integrations',
455 + 'badge' => 'new',
456 + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/woocommerce/',
457 + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-woocommerce'),
458 + 'pro_class' => 'EasyInvoicePro\\Addons\\WooCommerce\\WooCommerce',
459 + ],
460 + [
352 461 'id' => 'reports',
353 462 'name' => __('Reports & Analytics', 'easy-invoice'),
354 463 'short_name' => __('Reports', 'easy-invoice'),
355 464 'tagline' => __('See your revenue, outstanding balances, and best clients at a glance.', 'easy-invoice'),
356 - 'description' => __('Visual dashboard for invoice revenue, outstanding balances, payment status, and per-client performance. Filter by any date range, export for your accountant, and decide on data instead of guessing.', 'easy-invoice'),
465 + 'description' => __('Visual dashboard for invoice revenue, outstanding balances, payment status, and per-client performance, plus a month-by-month profit & loss statement — money received against costs from Expense Tracking, with net and margin. Filter by any date range, export for your accountant, and decide on data instead of guessing.', 'easy-invoice'),
357 466 'plan' => LicensePlanResolver::PLAN_PERSONAL,
358 467 'icon' => 'dashicons-chart-line',
359 468 'category' => 'analytics',
360 469 'badge' => null,