Beschrijving
Compleet Europees systeem voor elektronische facturering voor WordPress en WooCommerce: maak XML en PDF facturen aan, verzamel fiscale gegevens en koppel je webwinkel aan de PEPPOL, KSeF, SdI en ZUGFeRD workflows.
POP helpt Europese e-commerceteams bij het automatiseren van het aanmaken van facturen, fiscale afrekenvelden, het downloaden van documenten, creditnota’s en het indienen via ondersteunde netwerken, allemaal vanuit één WordPress-workflow. Een complete plugin voor e-facturering voor WordPress en WooCommerce, beschikbaar met gratis en betaalde abonnementen.
Voor wie is POP bedoeld?
- Freelancers en kleine bedrijven die betrouwbare XML- en PDF-facturen nodig hebben zonder dat ze zelf met documenten hoeven te rommelen
- E-commerceondernemers die groeien en op Europese markten verkopen, waar verschillende fiscale vereisten gelden
- Accountants, bureaus en ontwikkelaars die de factureringsprocessen voor meerdere WordPress webwinkels beheren
- Bedrijfswinkels die behoefte hebben aan een voorspelbaar API-creditverbruik en een gestructureerd traject naar landspecifieke workflows voor elektronische facturering
Core functies
- Automatisch genereren van elektronische facturen in XML-format voor afgeronde bestellingen
- PDF facturen maken met je eigen logo en footer text
- Handleiding in PDF- en XML-format downloaden via de schermen voor bestel- en documentbeheer
- Credit note generation in XML and PDF format, where supported by the selected plan and workflow
- Ondersteuning voor fiscale kassabonnen, voor zover dit wordt ondersteund door het geconfigureerde land en de integratie
- Aangepaste factuurnummering met voorvoegsel, achtervoegsel, aantal cijfers en jaarlijkse reset
- Oplopende nummering voor facturen, creditnota’s en ontvangstbewijzen
- Invoervelden bij het afrekenen voor BTW nummer, belastingnummer, bestemmingscode, PEPPOL ID en andere workflow specifieke fiscale gegevens
- BTW nummer en belasting ID validatie bij het afrekenen, indien ondersteund
- Belastingregeling, BTW-behandeling, vrijstelling en verlegging
- Automatisch blokkeren van facturen met een totaalbedrag van nul
- Optie om items met een waarde van nul uit te sluiten van facturen
- Zoeken naar facturen en filteren op datum, type, bestelstatus, factuurnummer en bestelnummer
- Automatische verzending van PDF facturen via e-mail
- HTML-weergave van facturen voor klantgerichte workflows
- HPOS-compatibel factuur- en documentbeheer voor WooCommerce
- Geen beperking op het aantal WordPress installaties en ondersteunde integraties
Ondersteunde transmissienetwerken
- PEPPOL voor ondersteunde Europese B2B-interoperabiliteitsworkflows, indien ingeschakeld
- KSeF voor gestructureerde Poolse e-factureringsprocessen, waar dit is ingeschakeld
- SdI voor directe verzending van gestructureerde XML-facturen, indien ingeschakeld
- ZUGFeRD / Factur-X voor ondersteunde Duitse hybride PDF/XML-documentworkflows, indien ingeschakeld
POP ondersteunt gebruiksscenario’s voor B2B e-facturering. B2G gebruiksscenario’s worden momenteel niet ondersteund.
Integraties
POP koppelt de factureringsprocessen van WordPress aan ondersteunde e-commerceplatforms, lidmaatschapssystemen, automatiseringstools, nationale netwerken en documentaanbieders.
- WooCommerce / WooCommerce Subscriptions / WooCommerce HPOS
- Paid Memberships Pro / Paid Member Subscriptions by Cozmoslabs
- Zoho / Aruba / Fatture in Cloud / PEC [Interchange System]
- Make / Zapier / Webhook automatiseringen
- n8n
- POP API, integraties en directe netwerkkoppelingen
POP ondersteunt WooCommerce, WooCommerce Subscriptions, Paid Memberships Pro en andere factureringsworkflows voor WordPress. Het is ook beschikbaar voor Shopify: https://apps.shopify.com/pop-european-invoicing
AI- en LLM-functies
- MCP-ready: koppel compatibele AI-assistenten aan de factureringsfuncties van POP
- Laat de mogelijkheden van WordPress zien voor automatiseringsgerichte WordPress workflows
- WP-CLI-commando’s (
wp popapi invoice search|get|xml|pdf) voor agentic-bewerkingen, geautomatiseerde controles en automatisering door ontwikkelaars - API-first ontwerp voor het maken van facturen met AI-ondersteuning, statuscontroles en documentroutering
Ondersteunde landen en werkprocessen
POP supports selected European e-invoicing workflows depending on the country, endpoint, selected plan and configured integration.
- Duitsland: PEPPOL en ZUGFeRD gerichte documentworkflows, indien ondersteund door het geconfigureerde endpoint
- Frankrijk: workflows voor elektronische facturering via PEPPOL, indien ondersteund door het geconfigureerde endpoint
- Verenigd Koninkrijk: PEPPOL gebaseerde workflows voor elektronische facturering werden ondersteund door het geconfigureerde endpoint
- Italy and San Marino: structured XML invoice generation, SdI transmission starting from the Basic plan, and electronic signature or compliant archiving where enabled by the selected plan and workflow
- Nederland: de op PEPPOL gebaseerde workflows voor elektronische facturering werden ondersteund door het geconfigureerde endpoint
- Polen: KSeF heeft gestructureerde workflows voor e-facturering opgezet, inclusief XML-verzending naar KSeF, al vanaf het Basic-abonnement
- België: gestructureerde B2B workflows voor elektronische facturering, inclusief verzending via PEPPOL als dat mogelijk is
België heeft vanaf 1 januari 2026 verplichte gestructureerde B2B e-facturering ingevoerd voor binnenlandse transacties tussen BTW geregistreerde bedrijven. De invoering van KSeF in Polen gebeurt stapsgewijs per categorie belastingplichtigen. De wettelijke verplichtingen, termijnen en geaccepteerde kanalen verschillen per rechtsgebied, bedrijfstype en transactietype; je blijft zelf verantwoordelijk voor het controleren van de vereisten die op je specifieke situatie van toepassing zijn.
Geplande landen
POP breidt zijn dekkingsplan uit naar nieuwe markten, waaronder de VAE, Slowakije, Kroatië, Spanje, Roemenië, Hongarije en Griekenland.
Ondersteunde documentformats
- Gestructureerde XML e-facturen, inclusief UBL indien van toepassing
- PDF-kopieën van facturen als voor mensen leesbare weergaven
- XML en PDF creditnota’s, voor zover deze worden ondersteund door de geselecteerde workflow en het geselecteerde abonnement
- Fiscale ontvangstbewijzen, voor zover ondersteund door de ingestelde workflow
- ZUGFeRD documentbundels voor ondersteunde Duitse workflows
API-credits en -abonnementen
POP is beschikbaar in vijf abonnementen: Free, Basic, Growth, Pro en Enterprise. Het Free abonnement bevat 20 API-credits per maand.
A credit is the unit used to measure credit-consuming API operations, such as generating or validating XML, submitting a document to a supported network, applying an electronic signature or activating compliant archiving when enabled. Credit consumption depends on the operation performed, selected plan, country and workflow.
Voor betaalde functies ga je naar: https://popapi.io/pricing/.
Ondersteunde betalingsmethoden
- Contant geld
- Bankoverschrijving
- Check
- Betaalkaarten
- SEPA automatische incasso
Compabiliteit
POP is compatibel met de nieuwste versies van WordPress en WooCommerce:
- WooCommerce: 9.x.x of hoger, met HPOS ondersteuning
- PHP 7.4 of hoger
- WordPress 4.6 of hoger
Voor HPOS en optimale prestaties raden we aan om WordPress 6.x.x en WooCommerce 9.x.x of hoger te gebruiken.
Waarom POP
Facturering in de e-commerce wordt steeds gestructureerder, lokaler en beter gekoppeld aan nationale systemen. Een WooCommerce winkel moet bij het afrekenen misschien de juiste fiscale gegevens verzamelen, XML-facturen genereren, documenten indienen via SdI, PEPPOL of KSeF, creditnota’s beheren en factuurbestanden beschikbaar houden voor de boekhouding of klantenservice.
POP is opgezet om elektronische facturering in Europa makkelijker te maken voor e-commerce-teams: minder handmatig werk, minder losstaande tools en een duidelijker traject van bestelgegevens naar gestructureerde factuurdocumenten.
We kunnen naleving niet sexy maken, alleen makkelijker.
Bijdragen
“POP – European electronic invoicing for e-commerce (ex-WooPop)” is open-source software.
Draag bij aan de ontwikkeling ervan om de plugin steeds verder te verbeteren!
Vereisten
PHP: >= 7.4
WordPress: >= 4.6
Schermafbeeldingen




Blokken
Deze plugin heeft 1 blok.
- POP Checkout Fields
Installatie
In deze sectie wordt uitgelegd hoe je de plugin installeert en gebruikt. 1. Upload de map ‘woopop-electronic-invoice-free’ naar de map /wp-content/plugins/. 2. Activeer POP – European electronic invoicing for e-commerce (ex-WooPop) via de WordPress pagina ‘Plugins’.
FAQ
-
Is de POP plugin gratis?
-
Ja. POP biedt een gratis abonnement aan met 20 API-credits per maand.
Een tegoed is de eenheid waarmee API-bewerkingen worden gemeten die tegoed verbruiken. Sommige functies van de plugin zijn inbegrepen zonder dat er tegoed wordt verbruikt, terwijl bewerkingen zoals het genereren van XML, verzending, elektronische handtekeningen of archivering tegoed kunnen verbruiken, afhankelijk van de ingestelde workflow.
Om meer credits en geavanceerde compliancefuncties te ontgrendelen, kun je een betaald abonnement activeren.
-
Waarom gebruikt POP API-credits in plaats van ‘maandelijkse facturen’?
-
POP is een product voor het naleven van de regels rond e-facturering. Voor één factuur kunnen meerdere nalevingsstappen nodig zijn, zoals:
- XML genereren en valideren
- XML versturen naar een ondersteund netwerk zoals SdI, PEPPOL of KSeF
- Een elektronische handtekening aanbrengen, indien ingeschakeld
- Conforme archivering inschakelen, indien ingeschakeld
Each credit-consuming operation uses API credits according to the selected plan and configured workflow.
-
Kan ik facturen automatisch versturen naar ondersteunde e-factureringsnetwerken?
-
Ja. Vanaf het Basic abonnement kan POP worden geïntegreerd met ondersteunde netwerken zoals SdI, PEPPOL en KSeF, waardoor de verzending van gestructureerde XML-facturen rechtstreeks vanuit je e-commerce workflow wordt geautomatiseerd.
Available networks depend on the country, endpoint, selected plan and configured integration.
-
Kun je facturen die met POP zijn aangemaakt aanpassen?
-
Ja. Je kunt de PDF factuurtemplate aanpassen door je bedrijfslogo en een eigen footer-tekst toe te voegen.
Je kunt ook het voorvoegsel, het achtervoegsel en de oplopende nummering van de facturen instellen. -
Ondersteunt POP facturering voor buitenlandse klanten?
-
Ja. POP ondersteunt klanten uit de EU en daarbuiten en kan gestructureerde XML via ondersteunde netwerken doorsturen.
De wettelijke vereisten kunnen per rechtsgebied, transactietype en zakelijke situatie verschillen. Gebruikers moeten nagaan welke specifieke verplichtingen op hen van toepassing zijn. -
Kun je met POP creditnota’s aanmaken?
-
Ja. POP ondersteunt het aanmaken van creditnota’s, mits dit is ingeschakeld in het geselecteerde abonnement, het land en de workflow.
-
Wat gebeurt er als mijn credits op zijn?
-
Dit antwoord geldt voor de open-source versie van POP voor WordPress.
- Gratis abonnement: de dienst stopt zodra je credits op zijn.
- Betaalde abonnementen: overquota is toegestaan. Voor extra API-bewerkingen worden kosten in rekening gebracht volgens het overquotatarief van je abonnement.
Je kunt je abonnement op elk moment upgraden om je maandelijkse kredietlimiet te verhogen.
Houd er rekening mee dat de regels voor kredietbeheer op niet-open-source platforms kunnen verschillen. -
Kan ik POP alleen gebruiken om XML-facturen aan te maken zonder ze via het netwerk te versturen?
-
Ja. POP kan worden gebruikt voor het genereren en valideren van XML-facturen zonder dat je ze via het netwerk hoeft in te dienen.
Network submission, digital signature and compliant archiving are optional capabilities depending on your workflow, selected plan and country configuration.
-
Biedt de plugin klantenondersteuning?
-
Ja. Voor ondersteuningsverzoeken kun je rechtstreeks contact met ons opnemen via de ondersteuningslink in de plugin of een ticket aanmaken via onze officiële site.
-
Verzendt de plugin gegevens als hij is geactiveerd?
-
Ja. Wanneer je de plugin activeert, verzend deze de URL van je site naar de servers van POP, dezelfde servers waarmee de plugin al verbinding maakt voor e-facturering, zodat wij weten dat de installatie succesvol is afgerond. Dit gebeurt eenmalig, automatisch en wordt nooit herhaald. Er worden geen fiscale, persoonlijke of zakelijke gegevens meegestuurd.
Beoordelingen
Bijdragers & ontwikkelaars
“POP – Naleving van de Europese regels voor e-facturering in de e-commerce” is open source software. De volgende personen hebben bijgedragen aan deze plugin.
BijdragersInteresse in ontwikkeling?
Bekijk de code, haal de SVN repository op, of abonneer je op het ontwikkellog via RSS.
Changelog
6.9.12 – 6.9.13 – 03/08/2026
- Fixed: Aruba connection status is now updated only after a successful login; the plugin no longer appears connected when authentication fails or an error occurs.
- Added: the plugin now reports a one-time activation signal to POP so we can measure real installation reliability; only the site URL is sent, no fiscal or personal data.
6.9.11 – 29/07/2026
- Added: POP invoice documents are now exposed as WordPress abilities, so AI agents and assistants can search invoices by customer or address and retrieve cached invoice XML, PDF, and structured invoice data (including the active fiscal channel) by provider and document id.
- Added: POP invoice abilities are now available through WP-CLI via
wp popapi invoice search|get|xml|pdf, giving integration tools and agents a scriptable command-line surface for the same cached invoice data exposed through WordPress Abilities. - Fixed: The PEPPOL country list used for electronic invoicing no longer includes Spain, Northern Ireland, or Liechtenstein, which are not currently eligible for this channel; the list now matches the countries actually supported across the POP platform.
6.9.10 – 23/07/2026
- Fixed: The invoice generation link no longer appears in the Invoice Fields panel and the orders list for stores in a country with no supported official invoicing channel, where it previously showed but could not produce a valid document.
6.9.9 – 20/07/2026
- Fixed: SdI credit notes sent via POP are now correctly marked as sent after a successful submission; previously the status button did not appear after sending because the document UUID was stored on the parent order but read from the refund order.
6.9.8 – 16/07/2026
- Security: All admin AJAX actions now require a valid nonce and the
manage_woocommercecapability; background cron calls continue to work without a nonce as before. - Fixed: SDI invoice sending no longer remains blocked after the first create/send attempt; the internal concurrency lock is now always released so later manual or scheduled sends can run normally.
- Fixed: KSeF invoice status check no longer crashes with a PHP notice when the API response does not include a reference number; the variable is now always initialised before use.
- Fixed: Credit notes that reuse the invoice numbering series now pick the first free invoice number correctly; previously, when separate credit-note numbering was disabled, a credit note could reuse an already assigned invoice number instead of continuing the sequence.
- Fixed: The edit button for next credit-note numbers now correctly unlocks the field for manual input; previously the field stayed read-only even after clicking the pencil icon.
- Improved: PMPro and Cozmos admin order/payment screens now show cached generated XML/PDF files in a dedicated read-only panel and clear them automatically when billing data changes, so regenerated documents stay aligned with the latest saved data.
- Improved: On Cozmos PMS forms and account pages, store admins now see an explicit POP warning when the Paid Member Subscriptions module “Tax & EU VAT” is not active, clarifying why POP fiscal billing fields are unavailable.
6.9.7 – 06/07/2026
- Fixed: Bulk CSV order download no longer crashes with a date parse error; previously the export failed with a fatal error when order dates were stored as Unix timestamps instead of formatted strings.
- Fixed: Bulk XML download now generates invoices with complete customer data and order lines; previously documents created through the batch downloader were missing customer name, address, VAT number, and product lines because the admin list index does not store the full order payload.
- Fixed: Batch XML generation no longer fails with a server-side API error for customers without an SDI code; the SDI field is now always sent as a string, preventing a null type error on the POP API.
- Fixed: A crash in the XML payment summary calculation is resolved; line item totals coming from the API response are now cast to numbers before arithmetic, preventing a PHP 8 TypeError when the values arrive as strings.
6.9.6 – 06/07/2026
- Added: Shops can now activate Zoho (via POP) as their exclusive invoice channel from the Integrations page, with readiness checks from the POP account and dedicated manual/automatic document sending for invoices and credit notes.
- Fixed: Zoho credit notes are now correctly marked as sent after a successful sync; previously the document was created in Zoho but the order status was not updated.
- Fixed: Zoho document sync now respects the sandbox/live environment setting; previously Zoho always sent to the live Zoho account even when the POP sandbox mode was active, and sandbox dry runs now return a clear confirmation instead of an error.
6.9.5 – 25/06/2026
- Added: German shops can now generate and receive ZUGFeRD documents — the hybrid PDF containing embedded XML is created via the POP API and automatically attached to the completed order email; XML and standard PDF actions are replaced by a single ZUGFeRD download button in the admin order list and order detail.
- Added: German shops can now download all three ZUGFeRD artefacts — hybrid PDF, standard PDF, and embedded XML — as a single ZIP archive directly from the admin order list and order detail; the bundle is served from the local cache and consumes no additional API credits.
- Added: A dedicated ZUGFeRD section is now visible in the settings panel for German shops configured on the ZUGFeRD corridor, showing credit usage information for each document bundle generated.
- Fixed: Resending a completed order email from the WooCommerce order detail no longer deletes the cached document files for that order.
- Fixed: The invoice/document admin list now loads correctly even when WooCommerce refunds are present, and recent documents from different providers are ordered more reliably together in the same view without early pagination cutoffs.
6.9.4 – 15/06/2026
- Added: Polish shops can now send KSeF invoices directly from the WooCommerce order detail; the invoice is transmitted to the KSeF system via the POP API and the assigned KSeF reference number is stored on the order. Auto-send on order status change and manual status check are also available.
- Added: Invoice numbering can now be restarted intentionally from a chosen value in Numeration settings, even when keeping the same prefix, making it easier to reset test sequences before going live.
- Fixed: After a manual numbering reset, older documents in the same invoice series no longer force the next number forward; duplicate protection now applies only to documents created after the reset.
- Added: Manual numbering reset is now available for the receipt series as well, with the same boundary logic as for invoices.
- Fixed: The manual numbering reset checkbox was silently ignored when saving settings; the reset now applies correctly and the sequence restarts from the chosen value.
- Fixed: Receipt numbering now always uses its own separate sequence starting from 1; the previous option to share the invoice counter by setting the receipt number to zero has been removed as it produced incorrect document numbering.
- Fixed: Fatture in Cloud automatic sending now correctly uses the trigger status configured for each document type — invoices use the invoice trigger and receipts use the receipt trigger; previously both always checked the invoice trigger, causing receipts (and invoices on non-completed triggers) to be skipped silently.
- Fixed: Receipt orders processed through payment gateways that auto-complete orders (e.g. PayPal, Stripe) are now correctly scheduled for automatic Fatture in Cloud sending; previously these orders were skipped in receipt-only mode or when the receipt trigger differed from the invoice trigger.
- Fixed: Receipt documents (corrispettivi) now always carry the order creation date as the fiscal transaction date, in all sending flows (automatic batch, immediate on status change, and manual); invoices continue to use the emission date as required by SDI sequential numbering rules.
- Fixed: When the batch processes multiple receipts in sequence, the success message is no longer duplicated for each order; each document now reports its own single confirmation line.
- Fixed: Fatture in Cloud automatic sending now recovers missed invoice and receipt orders more reliably when the first background run is delayed, including shops using
processingas the trigger status. - Fixed: Orders still missing
_invoice_sentare now picked up correctly by the Fatture in Cloud recovery cron, preventing valid automatic documents from being skipped silently.
6.9.3 – 09/06/2026
- Added: When deactivating the plugin, a feedback modal now appears asking for an optional reason and comment before proceeding; the information is sent to POP to help improve the product, and deactivation always completes regardless of whether feedback is provided.
6.9.2 – 05/06/2026
- Fixed: The temporary order filter data is no longer loaded on every page of the WordPress admin; on large stores this option could reach several megabytes and was causing slow database queries and site crashes under normal traffic.
- Improved: Fatture in Cloud diagnostic log now traces the full scheduling and execution flow for both invoices and receipts, including order status transitions, payment method, and the reason when an automatic document send is skipped; requires WP_FATT_CLOUD_LOG enabled.
- Fixed: Webhook delivery via n8n connector (e.g. Zoho) now works correctly — the connector response is recognised and passed through instead of being treated as invalid XML, both when triggered manually and via scheduled cron.
- Fixed: Saving webhook settings without making any changes no longer shows a false error message; a save with no modifications now correctly returns success.
6.9.1 – 03/06/2026
- Added: A dedicated “Ricevute/Corrispettivi” automation section is now available in Fatture in Cloud settings, with its own trigger status and enable/disable toggle independent from invoice automation; receipt documents are sent immediately when the selected order status is assigned.
- Added: Receipt orders are now visible in the invoice admin list and show the document data section inside the order detail when Fatture in Cloud is active, regardless of order status.
- Added: Manual upload of receipt documents is now always allowed from the order detail, regardless of the order status.
6.9.0 – 27/05/2026
- Fixed: PMPro order items now report the correct unit price and VAT rate in the XML payload; when the PMPro global
$pmpro_default_countryis not initialised during API-based XML generation the rate lookup returned 0, causingunit_priceto show the gross amount instead of the net andrateto show0.00;taxRate()now falls back to calculating the aliquota directly from item totals (total_tax / subtotal × 100) for non-WooCommerce providers when the provider lookup returns zero, and the strict integer comparison0 === $vatincalcUnitPrice()is replaced with0.0 === floatval($vat)so the safety fallback triggers correctly when$vatis the string"0.00". - Added: SDI and PEPPOL integration settings now display Live and Sandbox environments as separate labelled sections, each with its own status indicators; PEPPOL identifier, endpoint value, UUID, address, city and zip-code fields are shown for both environments independently.
- Changed: Two new static helpers
Integrations::isSdiPopIntegrationActive()andIntegrations::isPeppolIntegrationActive()centralise the live-or-sandbox activation gate; all call sites inIntegraties,InvoiceApi,PeppolApiandWizardnow use these helpers instead of rawget_optioncomparisons. - Changed:
getSdiPOPIntegrationData()andgetPEPPOLPOPIntegrationData()return objects now expose separatelive_integration/sandbox_integrationboolean flags (pluslive_signature,live_storage,sandbox_signature,sandbox_storagefor SDI and sandbox PEPPOL identifier fields) so UI and consumers can distinguish the two environments without re-reading options. - Fixed: Various admin CSS adjustments — added
min-heightto inputs, action buttons and table-cell title column; correctedline-heighton action icon links for refund and order rows.
6.8.9 – 25/05/2026
- Fixed: Fatture in Cloud invoice sending now refreshes cached VAT rates safely before using standard-rate IDs, preventing stale shipping tax mappings from blocking document creation after VAT changes in Fatture in Cloud.
- Fixed: removed radio input and checkbox style that conflicted with WP 7 styling
6.8.8 – 19/05/2026
- Added: Admin notifications can now be shown or hidden by platform, so messages can target only WordPress or external platform contexts such as Shopify.
- Added: Shops configured for Poland now generate KSeF XML on the dedicated route and keep the saved XML files in a dedicated local directory.
- Fixed: Poland shops now show only the native actions expected by their configured route, and private KSeF customers now see PDF-only document actions instead of PEPPOL/UBL XML options and notices.
- Added: New environment setting (live/sandbox) in account panel to send the environment flag in POP API requests; default is “live”. The environment is shown in the admin menu title next to the plugin name.
- Added: New ReverseChargeSettings class to centralize conditional display logic for reverse-charge fields; ref_norm_rc (tax rule reference) is now shown only in Italy, San Marino and Spain, while other EU countries and extra-EU contexts show only nature_rc.
- Fixed: Poland shops now show reverse-charge fields with KSeF-ready labels and accepted values, while unused private and tax-reference fields are hidden and no longer saved on orders.
- Fixed: Reverse-charge settings in WooCommerce, PMPro and Cozmos now align with the new conditional logic, saving ref_norm_rc only when the field is displayed and avoiding empty values on orders.
- Fixed: PMPro checkout now saves reverse-charge metadata only when nature is not empty, preventing stale empty values on subsequent order processing.
- Added: New extra-EU zero-tax handling: when cart contains items shipped to non-EU countries, the reverse-charge process now applies the 0% tax rate without requiring reverse-charge validation, supporting export scenarios where VAT is not applicable.
- Fixed: Poland KSeF context now hides SDI fields and Tax Code like PEPPOL does, and the address format is updated to include invoice_type and vat_number correctly.
- Changed: Reverse-charge settings UI is now simplified, removing redundant country-specific fields that are handled by the new centralized logic.
6.8.7 – 08/05/2026
- Fixed: Failed include RefundOrderItem.php
6.8.6 – 07/05/2026
- Fixed: PMPro admin order save and invoice sent/undo actions now guard against recursive re-entry on the same order during internal meta/XML persistence, preventing memory exhaustion, stalled redirects and duplicate nested processing on
pmpro_updated_order. - Fixed: PMPro refunded orders now keep the original invoice row and the generated credit note as separate POP table documents; admin search/action routing now resolves the correct refund document context for XML/PDF generation, local cache reuse and bulk file handling instead of collapsing both documents onto the same source order id.
- Fixed: PMPro native SDI/PEPPOL actions now resolve invoice vs credit-note document context explicitly, so a UUID saved for the original invoice no longer disables send/state actions on the PMPro refund credit-note row that shares the same source order id.
- Fixed: Admin document search is now provider-aware; when a specific provider is selected, direct order-id lookup and filtered search results query only that provider instead of scanning every registered provider.
- Fixed: Fatture in Cloud line-item VAT-type resolution now prioritizes the XML/order fiscal
Naturabefore Italian0%fallback mappings, so cases such asN2.2no longer degrade to the generic domestic N4 path when the normative reference is missing; targeted helper tests cover exact, ambiguous and fallback cases. - Fixed: PMPro checkout no longer blocks company/freelance submissions with browser error
An invalid form control with name='billing_tax_code' is not focusablewhen tax code is disabled; PMPro now aligns CF required/visibility handling with the WooCommerce flow and clears stale browser custom-validation state when the field is hidden or excluded from validation. - Fixed: Credit-note XML refund assembly no longer assumes WooCommerce-only parent-order lookups; refund data building now resolves the parent order through the active provider and hardens fee-item data access for non-Woo provider adapters, improving compatibility for provider-based refund flows.
- Changed: Local frontend/admin asset versioning now uses the real file modification time for plugin-managed scripts and styles, including PMPro and Cozmos checkout assets, reducing stale-browser/cache issues after JS/CSS updates without requiring a plugin version bump.
6.8.5 – 28/04/2026
- Fixed: Shipping VAT-rate resolution is now hardened across standard invoices and shipping refund / credit note flows; shipping items can now recover their tax rate and tax-rate id from item tax data when
tax_classis empty, location matching now prefers city-specific rates over generic country-wide matches, and targeted tests cover the shared resolution path.
6.8.4 – 27/04/2026
- Changed: POP API requests that already send
license_keyin the JSON body now also send the same value in theX-API-Keyheader for channel, wizard, addon-allowlist, and document-generation endpoints while keeping backward-compatible body payloads unchanged. - Fixed: PMPro XML auto-saving now skips recursive re-entry when the current request is already the internal
format=xmlgeneration request for the same order/provider, preventing self-triggered loops during internal XML generation on shared POP/site domains. - Fixed: Invoice-number formatting/build fallback no longer degrades to the order ID when the raw progressive is missing during interrupted status-change/save flows; formatted-number generation is now centralized, recovery prefers the stored
order_number_invoiceor a valid parse from the existing formatted value, and missing progressives now fail explicitly with logs instead of persisting the order number as the visible invoice number. - Changed: PMPro legacy formatted-number fallback is aligned with core and no longer uses the order ID as a surrogate invoice number when no valid progressive is available.
- Fixed: Greece VIES checks now normalize the member-state code from
GRtoELin the shared VIES path, so Greek VAT numbers entered/stored with checkout countryGRare validated with the expected VIES country code; updated core helpers and validator flow insrc/Functions/Utils.phpandsrc/WooCommerce/Fields/InvoiceFields.php, with targeted coverage intests/ViesCountryCodeTest.php. - Changed: The account setup wizard popup
otpWindownow sizes itself dynamically from the opener browser window instead of using a fixed width, targeting about80%of the available width and centered positioning for better adaptation across screen resolutions; updatedassets/js/wizard.jsand regeneratedassets/js/wizard.min.js.
6.8.3 – 09/04/2026
- Fixed:
processFileBatch()now resolves the correct order provider from the stored batch payload and skips orphaned records safely, avoiding fatal errors when bulk XML data contains non-WooCommerce entries or deleted orders. - Changed: Bulk XML download gating is now aligned between UI and runtime; the feature remains Growth+, the AJAX endpoint now enforces the same rule server-side, and paid-plan users below Growth see an explicit
From Growthbadge instead of the generic paid-only label. - Fixed: XML directory saving is now enabled from the Basic plan as intended, matching the settings UI and restoring actual file creation for
createXMLOnProviderOrderCompleted(). - Changed: XML auto-saving is now provider-aware in core and is wired for WooCommerce, PMPro and Cozmos payment flows, so completed-provider orders can save XML files without relying on WooCommerce-only assumptions.
- Changed: Added localized
From %splan badge strings in core language catalogs and regenerated compiled translations.
6.8.2 – 07/04/2026
- Fixed:
transferee_client.personal_data.tax_id_vat.country_idandtransferee_client.place.country_idnow receive the customer country reliably during XML/PDF payload assembly;CreateXmlinitializes$transfereeCountryIdbefore the payload is built, avoiding undefined-variable notices and empty country values in generated documents. - Changed: PMPro order billing resolution is now more defensive for address, city, state, postcode and country, with fallback lookup across POP order metas (
billing_*), WordPress user metas and legacy PMPro user metas (pmpro_b*) when theMemberOrder->billingobject is incomplete.
6.8.1 – 07/04/2026
- Fixed: PMPro bridge now restores pre-6.8.0 addon bootstrap timing by firing
wc_el_inv-after_initafter plugin bootstrap, so PMPro callbacks are registered before checkout/gateway order flows emit their hooks. - Fixed: PMPro addon filter loading is now merged explicitly across
filtersAlways,filtersFront,filtersAdmin, andfiltersAjax, preventing loss of sharedinchooks such as invoice/date assignment and fiscal-meta sync. - Fixed: PMPro order success handling now backfills missing POP fiscal metas (
billing_choice_type,billing_invoice_type,billing_sdi_type,billing_vat_number,billing_company,billing_tax_code) even when the success transition happens later via Stripe/webhook and the original checkoutPOSTis no longer available. - Fixed: When PMPro front-end document-type choice is disabled, the effective default now becomes
invoiceinstead of inheriting the receipt-oriented field default. - Fixed: PMPro provider billing-company resolution now prioritizes the POP order meta
billing_companyover stale PMPro billing object values, so updated company names entered at checkout are reflected consistently in orders and generated documents. - Changed: PMPro Council Directive price-label formatting now uses the current site language instead of the account country, appending
+IVAonly for Italian and+VATfor all other languages. - Changed: Core helper
getCurrentLanguage()is now normalized and WPML-aware, usingisWpmlActive()withICL_LANGUAGE_CODEwhen available and otherwise falling back reliably to the current WordPress locale. - Added: Targeted PMPro/WPML language-label tests covering WordPress locale fallback and WPML current-language precedence.
- Added: Centralized diagnostic log helpers in core for shared path resolution, bootstrap, write-status tracking and protected admin log viewing.
- Fixed: Fatture in Cloud, Aruba and SdI via PEC now prepare their event-log directory/file on activation and surface path/permission issues immediately in addon settings.
- Changed: Addon event logs are now opened through a nonce-protected admin endpoint instead of direct public
/wp-content/*.logURLs, reducing false 404s caused by cache, rewrite rules or WAF policies. - Added: Targeted diagnostic-log tests covering bootstrap, write flow, early conflict detection and protected viewer URL generation.
- Added: Unified POP API overquota payload (
pop_api_overquota) with shared normalization helpers, localized titles/messages/CTA labels, and admin/order persistent state stored in the global optionwc_el_inv_pop_api_overquota_state. - Fixed: POP API overquota business blocks no longer terminate with legacy
wp_die()in programmable flows; AJAX/admin and addon consumers now receive a structured payload, while_blankdocument generation renders a dedicated HTML fallback page. - Changed: Overquota handling is now aligned across core and indirect addon consumers (
getXmlFromOrder() -> CreateXml -> popApi()), with shared detection/extraction helpers in PHP and a single SweetAlert2 renderer inassets/js/admin.js. - Fixed: Core AJAX flows and Fatture in Cloud, Aruba, and SdI via PEC addon UIs now intercept
pop_api_overquotabefore generic error handling and render the shared dialog instead of degrading to “invalid XML” or generic API errors. - Added: Persistent overquota notices on POP XML settings (
page=wc_el_inv-options-page&tab=xml) and WooCommerce order screens, dismissible per page view but automatically shown again until the global overquota state is cleared on a successful document flow. - Fixed: Overquota business copy is now clearer across reason-code states, including explicit cause/unblock guidance for plan limit, disabled overquota, settlement required, cap reached, payment-method and overdue-balance cases.
- Fixed: Updated translation catalogs (
el-inv.pot,it_IT) and rebuilt theit_IT.mofile for the refined overquota titles/messages, CTA labels (Open POP,Contact support) and step label (Next step). - Added: Extended CloudApi quota/overquota test coverage for normalized payloads, global option persistence/cleanup, admin notice rendering, settlement-required branching and unpaid-overquota fallback CTA mapping.
- Fixed: PMPro Council Directive tax hooks now initialize correctly even when the PMPro bridge is loaded after
init, restoringpmpro_format_price,pmpro_taxandpmpro_vat_by_countryon checkout. - Added: Targeted bootstrap-hardening coverage for the PMPro Council Directive snippet when it is included after
init. - Fixed: Cozmos PMS admin payment form no longer fatals when
pms_in_tax_eu_vat_enabled()is unavailable; the bridge now falls back to local tax settings when the PMS VAT helper is not loaded. - Added: PMPro order view (
pmpro-ordersview page) now shows read-only POP “Invoice Fields” and “Invoice Data” sections after the main order details, so saved billing/fiscal data is visible without entering edit mode. - Fixed: PMPro and Cozmos now align saved fiscal meta (
nature_rc,ref_norm_rc,order_vies_check) more closely with the WooCommerce provider flow, includingcompany_no_vieshandling and San Marino support during order/meta persistence. - Fixed: Cozmos VIES checks now call the shared validator with the correct VAT/country argument order, avoiding false negatives that could block the correct fiscal meta assignment.
- Changed: Legacy
stripTags()has been removed and replaced by explicit text helpers that separate HTML-to-plain-text extraction from SDI and PEPPOL normalization policies. - Changed: SDI text normalization now uses deterministic ASCII-safe business tokens for disallowed symbols (
& -> AND,% -> PCT,# -> NUM,€ -> EUR) together with stronger transliteration for accented and extended Latin characters. - Added: Targeted text-normalization tests covering HTML cleanup, SDI-safe replacements, extended Latin transliteration, control-character filtering and conservative PEPPOL business-text preservation.
- Fixed: SdI via PEC filename progression is now centralized and persisted in the visible order custom field
invoice_progressive_file_number, with a new unique 5-character code reserved on each real transmission and reinvio. - Changed: Local
ProgressivoInviogeneration has been removed from the plugin XML payload so SdI transmission progressives remain owned exclusively by the API.
6.8.0 – 13/03/2026
- Fixed: Registered
wc_el_inv_swal2globally in admin sowc_el_inv_admindependencies resolve correctly outside POP settings pages without forcing SweetAlert2 enqueue on every admin screen. - Fixed: Restored
POP Checkout Fieldsblock visibility in the block inserter by registeringpop-checkout-block-editorbeforeregister_block_type(). - Fixed: Simplified POP checkout block editor dependencies to valid Gutenberg/Woo Blocks handles, removing missing dependency issues that prevented block loading.
- Fixed: Hardened
assets/js/pop-block.jsagainst missingwc_el_inv_admin/wc_el_inv_invoiceglobals by using localized fallback data for messages and field positioning. - Changed: Free-plan premium settings now remain visible with disabled UI, including
Paid onlybadges, while server-side save and runtime enforcement prevent unavailable features from being used onfree. - Fixed: Free-plan endpoint cards now show an explicit upgrade message with plans CTA, with updated locale catalogs.
- Fixed: Premium runtime enforcement now blocks VIES, reverse charge, XML directory saving, automatic sending and webhook execution on
freewhile preserving stored values for paid-plan reactivation. - Changed: Membership entrypoints
PMProandCozmoscan now coexist without forced mutual reset, with integration bootstrap updated to support both providers in the same installation. - Fixed: PMPro and Cozmos addon bootstrap now supports late loading after
init, restoring correct field/provider initialization after movingwc_el_inv-after_initto the proper lifecycle point. - Fixed: Provider enqueue is now re-run after membership addon loading so late-loaded providers are registered before downstream order/tax flows use them.
- Fixed: Composer autoloaders for core and local addons now use explicit unique suffixes, preventing class-name collisions when multiple POP addons are loaded together.
- Changed: Plan-based gating has been realigned for
basic,growthandproacross settings, runtime checks and integration cards, includingPaid onlyvisibility, upgrade messages, country-specific PEPPOL notices and dependency notices for Fatture in Cloud receipts/warehouse cards. - Fixed:
basicnow correctly enables credit notes, XML directory, reverse charge/VIES, POP SdI/PEPPOL automations, webhooks and activation ofSdI/PEPPOL, while unsupported endpoints show the explicit upgrade message. - Fixed:
growthand higher plans now consistently show the PEPPOL country-specific notice whenever the plan allows activation but the configured country is not eligible. - Added: Pro-only dependency notices for
Fatture in Cloud (receipts)andFatture in Cloud (warehouse management)when the base FIC integration is not active, with localized strings across supported languages. - Fixed:
to/*addon bootstrap hardening now covers late loading afterinitfor Fatture in Cloud, Aruba, SdI PEC, FIC Receipts and FIC Stock, including immediate execution of internalinitjobs registered via addon loaders. - Added: Targeted tests for post-
initaddon loader behavior and test bootstrap action stubs; full local suite passing. - Fixed: Fatture in Cloud payment-account handling now avoids undefined-property warnings on missing
payAccountIDmappings and re-validates payment account data after filters before building the API payload.
6.7.5 – 11/03/2026
- Fix: SweetAlert2 admin assets are now loaded only on POP plugin pages, preventing conflicts with other admin plugins that use different SweetAlert2 versions.
6.7.4 – 11/03/2026
- Change: admin SweetAlert2 confirm and notification buttons now use plugin-consistent styling
- Fix: PMPro applies stamp duty after rivalsa so stamp duty does not affect rivalsa calculation
- Change: PMPro admin order shows stamp duty and rivalsa values as read-only reference fields with a checkout consistency notice
- Fix: PMPro admin order save repairs taxes only when tax calculation is enabled, the order is not sent and totals are inconsistent
- Fix: XML stamp duty by customer force-apply remains limited to invoice orders and excludes credit notes
- Change: Integrations > Entrypoint cards are now visible independently from allowed-addon license checks; activation remains gated by allowed add-ons and account configuration.
- Add: New WooCommerce Entrypoint card (native integration) with documentation link and active/disabled visual state based on WooCommerce availability.
- Change: Integrations tooltips now show a dedicated pre-wizard message when account setup is incomplete, while preserving context-specific messages after wizard completion.
- Fix: VIES VAT normalization now supports alphanumeric EU VAT formats in both WooCommerce checkout and PMPro VIES checks.
- Change: PMPro Council Directive tax-rate check now uses normalized VAT/country values before VIES validation.
- Change: Settings > Numeration helper text updated from “Recommended 4 (you can leave it blank)” to “Enter a value from 1 to 6.” with updated locale catalogs.
- Fix: Invoice next-number candidate scan now continues when a recent WooCommerce order is outside the active series, instead of stopping early.
- Fix: Shared numeration yearly scope now also applies when “Reset the numbers at each year change” is enabled (even if year suffix is disabled), preventing historical previous-year numbers from affecting current-year assignment.
- Fix: Updated translation catalogs (it_IT, fr_FR, es_ES) and rebuilt locale binaries (.mo) for new integration and numeration strings.
6.7.3 – 04/03/2026
- Add: Native response helpers
safeJsonDecodeandprefixNativeFlowMessageto centralize robust JSON parsing and channel-prefixed diagnostics. - Change: SDI/PEPPOL create-and-send user-facing errors now use clear channel prefixes (
SDI:/PEPPOL:) with simplified messages, while technical detail remains in logs/payload fields. - Fix: SDI (
InvoiceApi::createAndSendInvoice) response handling is now hardened for invalid/malformed JSON and missing properties, with safer UUID extraction and no contract-breaking output changes. - Fix: PEPPOL (
PeppolApi::createAndSendUblInvoice) response handling is now hardened for invalid/malformed JSON and mixed response shapes, including guarded access to nesteddatafields. - Fix: PEPPOL state check (
PeppolApi::stateInvoice) now safely parses mixed response bodies and falls back gracefully when body is not valid JSON. - Add:
CloudApiJSON parser helper (parsePopApiJsonBody) for internal no-breaking normalization and decode-error tracking. - Fix:
CloudApierror path now returns consistent JSON-safe fallback payloads when upstream body is not valid JSON (error,status_code,decode_error,raw) without changing successful v2 response formats. - Fix:
CloudApiintegration JSON handling now …
