Title: WDOnline Invoice Payment for WooCommerce
Author: wdonlinedk
Published: <strong>September 19, 2026</strong>
Last modified: September 19, 2026

---

Search plugins

![](https://ps.w.org/wdonline-invoice-payment-for-woocommerce/assets/banner-772x250.
png?rev=3703108)

![](https://ps.w.org/wdonline-invoice-payment-for-woocommerce/assets/icon-256x256.
png?rev=3703108)

# WDOnline Invoice Payment for WooCommerce

 By [wdonlinedk](https://profiles.wordpress.org/wdonlinedk/)

[Download](https://downloads.wordpress.org/plugin/wdonline-invoice-payment-for-woocommerce.0.6.29.zip)

 * [Details](https://wordpress.org/plugins/wdonline-invoice-payment-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/wdonline-invoice-payment-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/wdonline-invoice-payment-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/wdonline-invoice-payment-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/wdonline-invoice-payment-for-woocommerce/)

## Description

WDOnline Invoice Payment for WooCommerce adds a B2B-friendly invoice payment gateway
where payment terms belong to the customer rather than the order date.

Core behavior:

 * Enable or disable invoice payment globally.
 * Configure a global default payment term.
 * Configure invoice eligibility and payment terms by WordPress user role.
 * Create new user roles from the User roles tab by safely copying permissions from
   an existing role.
 * Review all user roles and safely delete unused roles created through this plugin.
 * Override invoice eligibility and payment terms for individual customers.
 * Show a dynamic checkout title such as “Invoice – 30 days”.
 * Save the customer’s payment terms on the order at checkout.
 * Keep invoice date and due date separate from the order date.
 * Calculate the due date only after an invoice date has been entered or the order
   has been marked as invoiced.
 * Store an optional invoice number on the order.
 * Upload an externally generated PDF invoice to an order and make it available 
   through a protected customer download.
 * Keep invoice PDFs outside the WordPress Media Library under random internal filenames
   with server access-deny rules.
 * Mark invoices as paid or unpaid independently of the WooCommerce order status.
 * Display payment terms, invoice date and due date in order emails and My Account.
 * Display invoice due information in the WooCommerce order list.
 * Supports WooCommerce HPOS and Checkout Blocks.
 * Set global, role-based, or individual customer credit limits.
 * Treat a credit limit of 0 as unlimited credit.
 * Track each customer’s open invoice balance, available credit, and overdue balance.
 * Include not-yet-invoiced invoice orders in credit exposure to prevent customers
   from exceeding their limit before invoicing.
 * Optionally block invoice payment when overdue invoices exist.
 * Configure an overdue grace period and override overdue blocking by role or individual
   customer.
 * Show a clear checkout notice when invoice payment is unavailable because the 
   credit limit is exceeded or overdue invoices block new invoice orders.
 * Let the store customize the credit-limit checkout message with credit limit, 
   available credit, and order total placeholders.
 * Show invoice payment status directly in the customer My Account order list.
 * Show paid, due, and overdue messages on individual order pages.
 * Add a dedicated My Account > Invoice payments page with credit summary, overdue
   balance, and invoice order history.
 * Optionally hide the customer’s credit-limit and available-credit values independently
   from the My Account invoice summary without changing credit enforcement.
 * Customize the customer My Account menu label and invoice-page heading without
   changing the endpoint URL.
 * Review invoice-payment orders from the dedicated, paginated Invoice orders tab
   with WooCommerce order-status filtering.
 * Fully translatable with standard WordPress gettext translation files and Loco
   Translate.
 * Includes a translation template in the plugin languages folder.
 * Add a WordPress Dashboard widget with key invoice-payment KPIs for store managers.
 * Filter dashboard sales statistics by Today, Yesterday, week, month, year, all
   time, or a custom date range.
 * Show invoice sales, order count, customer count, average invoice order value,
   paid invoices, and largest customer for the selected period.
 * Show Top 5 invoice customers for the selected period.
 * Track payment dates for newly marked paid invoices and calculate average payment
   time.
 * Show current outstanding balance, overdue balance, and invoices due within the
   next 7 days.
 * Store daily balance snapshots and show outstanding-balance development when enough
   history is available.
 * Cache dashboard statistics for performance and automatically refresh them when
   WooCommerce orders change.
 * Optional integration with WD Online Support Diagnostics for read-only health 
   checks and temporary privacy-safe error logging.

The due date is intentionally not calculated when the customer places the order.
For example, an order placed on September 1 with 30-day terms and invoiced on September
5 will be due on October 5.

### Developer Notes

Available filters:

 * `wdonline_ipw_customer_eligible`
 * `wdonline_ipw_terms_days`
 * `wdonline_ipw_due_date`
 * `wdonline_ipw_credit_limit`
 * `wdonline_ipw_block_overdue`
 * `wdonline_ipw_account_summary`
 * `wdonline_ipw_credit_decision`
 * `wdonline_ipw_dashboard_stats`

## Screenshots

[[

[[

[[

[[

[[

[[

[[

[[

## Installation

 1. Upload the plugin ZIP through Plugins > Add New > Upload Plugin.
 2. Activate the plugin.
 3. Go to WD Online > WDOnline Invoice Payment for WooCommerce.
 4. Configure global and role defaults.
 5. Edit individual WordPress users to override invoice access or payment terms where
    required.

## FAQ

### Can a customer choose their own payment term in checkout?

No. The payment term is assigned by the store through the customer’s individual 
setting, role default, or global default.

### When is the due date calculated?

Only when the order has an invoice date. Enter an invoice date in the order editor
or use the “Mark as invoiced” button.

### What happens if I change a customer’s payment term later?

Existing orders keep the payment term that was saved when the order was placed.

### Are guest customers allowed to pay by invoice?

No. A logged-in customer is required so invoice access, payment terms, credit limit,
and overdue rules can be resolved safely.

### What counts toward the credit limit?

All open WDOnline Invoice Payment orders that have not been marked as paid, including
orders that have not yet been invoiced. Cancelled, failed, and fully refunded orders
are excluded.

### When is an invoice overdue?

An invoice becomes overdue after its due date plus the configured grace period.

### Can the plugin be translated?

Yes. All plugin interface strings use the WordPress gettext translation system. 
The plugin includes a POT template in the languages folder and is compatible with
Loco Translate and standard PO/MO translation workflows. Customer-facing checkout
title, description, instructions, and credit-limit message can also be edited directly
in the plugin settings.

### Are uploaded invoice PDFs public?

No. Invoice PDFs are not added to the WordPress Media Library and no public file
URL is shown. They are stored under random internal filenames in a directory protected
by Apache and IIS access-deny rules. Downloads are streamed through WordPress only
after login, order ownership or administrator permission, and a security nonce have
been verified.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“WDOnline Invoice Payment for WooCommerce” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ wdonlinedk ](https://profiles.wordpress.org/wdonlinedk/)

[Translate “WDOnline Invoice Payment for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/wdonline-invoice-payment-for-woocommerce)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/wdonline-invoice-payment-for-woocommerce/),
check out the [SVN repository](https://plugins.svn.wordpress.org/wdonline-invoice-payment-for-woocommerce/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/wdonline-invoice-payment-for-woocommerce/)
by [RSS](https://plugins.trac.wordpress.org/log/wdonline-invoice-payment-for-woocommerce/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.6.29

 * Fixed an incorrect upload error after removing an invoice PDF without selecting
   a replacement file.
 * Allowed an existing PDF to be removed and optionally replaced during the same
   order update.

#### 0.6.28

 * Fixed infinite recursion during invoice PDF uploads caused by resolving the upload
   directory from inside the upload directory filter.
 * Reused WordPress’ already resolved base upload path when routing invoice PDFs
   to protected private storage.

#### 0.6.27

 * Removed the Plugin URI and Author URI headers because WordPress.org could not
   access those URLs reliably.
 * Added explicit nonce and capability validation to the invoice due-status and 
   dashboard date filters.
 * Updated protected invoice downloads to use WordPress admin referer validation.
 * Reworked PDF uploads to use the WordPress upload API while retaining protected
   private storage and additional PDF validation.
 * Replaced the generic WD Online menu slug with the plugin-specific wdonline-ipw
   slug.

#### 0.6.26

 * Added a separate setting to hide Available invoice credit from the customer My
   Account invoice summary.
 * Made both customer credit display settings dependent on the Invoice balance and
   history feature.
 * Enforced the new dependency in both the administration interface and server-side
   settings validation.

#### 0.6.25

 * Fixed the My Account Invoice payments endpoint returning a 404 page after the
   customer-account feature was enabled in settings.
 * Registered the endpoint independently of its optional customer-facing interface
   so rewrite refreshes always include it.
 * Refreshed rewrite rules automatically when the customer invoice balance and history
   feature changes status.

#### 0.6.24

 * Made the customer credit-limit display setting dependent on the customer invoice
   balance and history feature.
 * Disabled and cleared the credit-limit display option immediately when its parent
   customer-account feature is turned off.
 * Enforced the same dependency when settings are saved.

#### 0.6.23

 * Displayed the uploaded invoice PDF filename directly above the View current PDF
   button in the order editor.
 * Stored the sanitized original filename separately while retaining the random 
   protected storage filename.

#### 0.6.22

 * Fixed the credit-limit notice so it remains visible when invoice payment is the
   only available gateway.
 * Added a dedicated checkout fragment that refreshes the credit message when the
   cart total changes.
 * Added a debounced checkout refresh for compatibility with quantity controls that
   update the cart through a separate AJAX request.
 * Kept the displayed order total, gateway availability, and credit-limit calculation
   synchronized after checkout quantity changes.

#### 0.6.21

 * Updated the Plugin URI to the current public WD Online product page.
 * Aligned the plugin folder, main file, text domain, and translation template with
   the intended WordPress.org slug.
 * Replaced direct temporary-file and protection-file reads and writes with the 
   WordPress filesystem implementation.
 * Documented the intentional streamed PDF response and updated the Invoice orders
   description to refer to its current tab.

#### 0.6.20

 * Added guidance explaining where individual customer payment terms can be configured.
 * Added a complete user-role list to the User roles tab, including role slugs and
   assigned-user counts.
 * Added protected deletion for unused roles created through this plugin.
 * Prevented deletion of WordPress, WooCommerce, third-party, and in-use roles.
 * Removed saved invoice-payment rules when their plugin-created role is deleted.

#### 0.6.19

 * Combined Gateway, Invoice orders, and User roles on the main plugin administration
   page as tabs.
 * Removed the separate Invoice orders and User roles items from the WD Online sidebar
   menu.
 * Redirected legacy administration links to the corresponding new tabs.
 * Kept the User roles tab restricted to administrators.
 * Standardized the support box text and preserved the PayPal or card support link.

#### 0.6.18

 * Added an administrator-only User roles submenu under WD Online.
 * Added secure user-role creation with a custom display name and optional technical
   slug.
 * Added the option to copy capabilities from an existing role, with WooCommerce
   Customer selected by default.
 * New roles automatically become available in the invoice payment Role defaults
   table.

#### 0.6.17

 * Added an option to hide the Credit limit row from the customer Invoice payments
   account page without changing credit-control calculations.
 * Added an Invoice orders submenu with a paginated overview of orders placed using
   invoice payment.
 * Added filtering of the Invoice orders overview by WooCommerce order status.

#### 0.6.16

 * Replaced remaining legacy short HTML, CSS, and private-directory identifiers 
   with the plugin-specific `wdonline-ipw-` prefix.
 * Updated the WooCommerce payment-method description to use the current settings
   submenu name.
 * Added a translatable support and donation section at the bottom of the plugin
   settings page.

#### 0.6.15

 * Changed the WD Online submenu page title and menu label to “WDOnline Invoice 
   Payment for WooCommerce”.

#### 0.6.14

 * Renamed the plugin display name to “WDOnline Invoice Payment for WooCommerce”
   to match the WDOnline plugin naming convention.
 * Updated related user-facing plugin name references, diagnostics labels, and translation
   metadata.
 * Kept the plugin folder, filename, text domain, and technical slug unchanged.

#### 0.6.13

 * Deferred component initialization that can resolve translated default settings
   until the WordPress `init` hook.
 * Deferred registration of the optional diagnostics provider until `init`.
 * Prevented WordPress 6.7 and later from reporting that the plugin and WooCommerce
   text domains were loaded too early.

#### 0.6.12

 * Replaced all plugin-owned short `wdo_` identifiers with the unique `wdonline_ipw_`
   prefix across PHP, JavaScript, CSS, settings, metadata, hooks, nonces, cron events,
   payment gateway identifiers, and asset handles.
 * Renamed plugin classes, constants, and include files to use the matching `WDONLINE_IPW_`
   and `wdonline-ipw-` naming conventions.
 * Updated the optional diagnostics integration to the official `wdonline_sd_providers`
   and `wdonline_sd_log` interface.
 * Updated the Plugin URI to the plugin-specific public page on wdonline.dk.
 * No legacy aliases or data migration were added because there are no official 
   installations of the plugin.

#### 0.6.11

 * Added separate settings for the customer My Account menu label and invoice-page
   heading.
 * Kept the existing `invoice-payments` endpoint unchanged to preserve existing 
   account links.
 * Empty label fields safely fall back to the translatable default “Invoice payments”
   text.

#### 0.6.10

 * Fixed PDF uploads from the classic WooCommerce order editor by enabling multipart
   file submission on the order form.
 * Added compatibility code that applies the same upload encoding to the HPOS order
   editor form.
 * Added a clear Upload PDF or Replace PDF submit button directly below the file
   selector.
 * Clarified that uploading the PDF also saves other changes made to the order.

#### 0.6.9

 * Replaced the direct PHP upload move and writable check with WordPress filesystem
   APIs.
 * Made the existing order nonce verification explicit inside private invoice document
   processing for Plugin Check compatibility.
 * No invoice-document access, customer-history, layout, checkout, or credit-control
   behaviour was changed.

#### 0.6.8

 * Added optional private PDF invoice uploads to individual invoice-payment orders.
 * Added protected invoice downloads for authorised administrators and the customer
   who owns the order.
 * Stored invoice files under random internal filenames in a web-blocked private
   directory and never exposed a public media URL.
 * Added customer Invoice PDF links to invoice order history when a document is 
   available.
 * Added a feature switch for external invoice PDFs; it is enabled by default for
   backward compatibility.
 * Corrected invoice-history column sizing and alignment on desktop while preserving
   WooCommerce’s responsive mobile layout.

#### 0.6.7

 * Documented and narrowly exempted the admin-only HPOS invoice-status meta query
   from the generic slow-query sniff.
 * No invoice filtering, feature-module, checkout, credit-limit, or customer-account
   behavior was changed.

#### 0.6.6

 * Added optional feature controls for customer profile invoice settings, order-
   list invoice status, individual-order invoice management, the Dashboard overview,
   and customer My Account invoice balance/history.
 * All optional features remain enabled by default for backward compatibility.
 * Disabling a feature hides its interface without deleting stored invoice data 
   or changing checkout and credit-limit behavior.
 * Added privacy-safe diagnostics reporting for each optional feature’s enabled 
   or disabled state.

#### 0.6.5

 * Added an Invoice due filter to both the HPOS and legacy WooCommerce order lists.
 * Orders can be filtered by overdue, due but not overdue, paid, or not invoiced
   status.
 * Overdue filtering respects the configured overdue grace period.

#### 0.6.4

 * Added optional compatibility with WD Online Support Diagnostics using the standard
   read-only provider interface.
 * Added diagnostics for plugin/version state, WooCommerce dependency, settings 
   format and ranges, checkout hooks, and the daily dashboard snapshot cron event.
 * Added privacy-safe temporary checkout failure events while diagnostic logging
   is active. No customer IDs, order IDs, email addresses, IP addresses, URLs, or
   payment amounts are logged.
 * Diagnostics remains fully optional and does not change normal invoice-payment
   behaviour when the support plugin is not installed.

#### 0.6.3

 * Fixed the credit-limit checkout notice during AJAX quantity changes in the classic
   WooCommerce checkout.
 * Replaced WooCommerce’s generic “no available payment methods” notice with the
   invoice credit explanation when invoice credit rules are the reason no payment
   method remains.
 * Prevented duplicate credit notices when invoice payment is the only configured
   payment method.
 * Updated the WD Online support/donation link.

#### 0.6.2

 * Added nonce protection to the Dashboard date-range filter and preserved the filter
   securely when refreshing statistics.
 * Improved sanitization of custom Dashboard date inputs to satisfy WordPress Plugin
   Check.
 * Removed the paid-invoice meta query from Dashboard statistics and filter paid
   invoice status in PHP to avoid the Plugin Check slow meta-query warning.
 * No existing invoice, credit, checkout, or customer-account behavior was changed.

#### 0.6.1

 * Removed version-specific helper notices from the Dashboard widget now that the
   plugin is still in private testing.
 * Simplified the Payments recorded and Outstanding balance change KPI displays.

#### 0.6.0

 * Added a date-range selector to the WordPress Dashboard invoice overview with 
   Today, Yesterday, This week, Last week, This month, Last month, Last 30 days,
   This year, Last year, All time, and custom date ranges.
 * Added period-specific invoice sales, invoice order count, customer count, and
   average invoice order value.
 * Added Top 5 invoice customers for the selected period.
 * Added payment-date tracking when an invoice is marked as paid.
 * Added average payment time from invoice date to recorded payment date. Existing
   paid invoices without a recorded payment date are excluded from this metric.
 * Added current balance for invoices due within the next 7 days.
 * Added daily outstanding and overdue balance snapshots for future balance-development
   reporting.
 * Added an outstanding-balance change KPI when sufficient snapshot history is available.
 * Added a daily WP-Cron snapshot task and cache-versioned dashboard statistics.
 * Kept current outstanding, overdue, and due-soon figures separate from the selected
   historical sales period to avoid misleading historical balance figures.

#### 0.5.0

 * Added an Invoice Payment Overview widget to the main WordPress Dashboard for 
   users who can manage WooCommerce.
 * Added total invoice sales and current-month invoice sales.
 * Added total outstanding balance, overdue balance, open-order count, and overdue-
   invoice count.
 * Added paid invoice count/value and invoice customer count.
 * Added largest invoice customer by historical invoice sales with a direct customer
   edit link.
 * Added automatic dashboard-statistics cache invalidation when WooCommerce orders
   change and a manual Refresh data link.
 * Added dashboard-specific responsive styling and translatable dashboard strings.

#### 0.4.1

 * Fixed Plugin Check output-escaping warnings for payment-term values.
 * Improved sanitization of customer credit, payment-term, global credit-limit, 
   and role-rule input.
 * Removed the discouraged explicit load_plugin_textdomain() call; translations 
   remain compatible with WordPress language packs and Loco Translate.
 * Removed bundled PO/MO files to follow WordPress.org translation handling; the
   POT template remains included for translators.
 * Avoided a translated plugin-name trademark warning during Plugin Check.

#### 0.4.0

 * Added explicit WordPress text-domain loading for bundled and custom translations.
 * Added a POT translation template for all plugin strings.
 * Added full compatibility with Loco Translate and standard PO/MO translation workflows.
 * Added a bundled Danish translation (da_DK).
 * Kept English as the plugin source/default language.

#### 0.3.1

 * Improved the checkout message shown when invoice payment is hidden because the
   order exceeds the customer credit limit.
 * The message now shows the customer credit limit, available credit, and current
   order total.
 * Added a customizable credit-limit checkout message under WD Online > Invoice 
   Payment.
 * Added {credit_limit}, {available_credit}, and {order_total} placeholders for 
   the checkout credit-limit message.
 * Reused the same customer-facing credit message during server-side checkout validation.

#### 0.3.0

 * Added a customer-facing checkout notice when the invoice credit limit is exceeded.
 * Added a checkout notice when overdue invoices block invoice payment.
 * Added an Invoice status column to My Account > Orders.
 * Added paid, due, not-invoiced, and overdue messages to My Account order details.
 * Added a dedicated My Account > Invoice payments endpoint and menu item.
 * Added customer invoice account summary with open balance, credit limit, available
   credit, and overdue balance.
 * Added invoice order history with invoice number, invoice date, due date, amount,
   status, and order link.
 * Added automatic rewrite-rule refresh on plugin version changes for the new My
   Account endpoint.

#### 0.2.0

 * Added global, role-based, and individual customer credit limits.
 * Added open invoice balance and available credit calculations.
 * Added overdue invoice balance and overdue order counts.
 * Added optional blocking of invoice payment when overdue invoices exist.
 * Added configurable overdue grace period.
 * Added role and customer overrides for overdue blocking.
 * Added credit information to customer profiles, the Users list, and invoice order
   admin boxes.
 * Added server-side credit validation when invoice payment is processed.
 * Added credit-limit snapshot metadata to invoice orders.
 * Updated overdue display logic to respect the configured grace period.

#### 0.1.0

 * Initial development release.
 * Added customer-, role- and global invoice payment settings.
 * Added WooCommerce invoice payment gateway.
 * Added order-level snapshot of payment terms.
 * Added manual invoice date, due date calculation and invoice number.
 * Added invoice paid/unpaid status.
 * Added customer email and My Account invoice information.
 * Added WooCommerce order list due-date column.
 * Added HPOS and Checkout Blocks compatibility declarations and integration.

## Meta

 *  Version **0.6.29**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [b2b](https://wordpress.org/plugins/tags/b2b/)[credit](https://wordpress.org/plugins/tags/credit/)
   [invoice](https://wordpress.org/plugins/tags/invoice/)[woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/wdonline-invoice-payment-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/wdonline-invoice-payment-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/wdonline-invoice-payment-for-woocommerce/reviews/)

## Contributors

 *   [ wdonlinedk ](https://profiles.wordpress.org/wdonlinedk/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/wdonline-invoice-payment-for-woocommerce/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://www.paypal.com/ncp/payment/NKERMAVC4PXML)