Linux 软件免费装
Banner图

ErreD EU Order Withdrawal for WooCommerce

开发者 draison
recessodigitale
更新时间 2026年8月15日 17:18
PHP版本: 8.2 及以上
WordPress版本: 7.1
版权: GPLv2 or later
版权网址: 版权信息

标签

woocommerce consumer cancellation withdrawal recesso

下载

0.5.4 0.5.9 0.6.0 0.5.10 0.7.0

详情介绍:

From 19 June 2026, EU Directive 2023/2673 requires online stores across the European Union to provide a digital withdrawal function: a way to cancel a distance contract online that is at least as easy to use as the purchase flow itself. A single "cancel" button is not enough. The law requires a clearly labelled, continuously available function, a two-step confirmation, and an acknowledgement on a durable medium whose timestamp fixes the legal moment of communication. ErreD EU Order Withdrawal for WooCommerce implements that function end to end — not just the button, but the declaration flow, the two-step confirmation, the durable-medium receipt, the eligibility rules and the merchant review tools needed to actually comply. It ships the Italian transposition out of the box (art. 54-bis of the Codice del Consumo, introduced by D.Lgs. 209/2025) with the legally-fixed label «recedere dal contratto qui», and it is fully translatable for other EU markets. The plugin does not create a right of withdrawal: it provides the online channel to exercise an existing one, honouring the legal exceptions (e.g. art. 59 in Italy). It is built security-first, is WooCommerce High-Performance Order Storage (HPOS) native, and works fully offline (no external service calls). For consumers For merchants Built to standard This plugin encodes legal and security intent; it is not legal advice. The mapping of the art. 59 exceptions to your catalogue and the durable-medium content must be validated by a qualified legal professional before relying on them.

安装:

  1. Upload the plugin to the /wp-content/plugins/ directory, or install it through the WordPress plugins screen.
  2. Activate the plugin through the 'Plugins' screen in WordPress.
  3. WooCommerce 8.2 or newer (with High-Performance Order Storage) is required.
  4. Visit WooCommerce → Recesso digitale: settings to configure the withdrawal window, the window start trigger and your product/category exclusions.

屏幕截图:

  • Step two: the explicit "conferma recesso" confirmation.
  • The acknowledgement screen shown after confirmation.
  • The admin requests screen: status filter, free-text search and per-request actions.
  • The request detail: audit timeline, durable-medium receipt (PDF) and status processing.

升级注意事项:

0.7.0 Customers can follow their withdrawal requests, and the receipt PDF, from My Account. Fixes a withdrawal page that was deleted or unpublished silently sending every withdrawal link to your home page. Recommended for all sites. No data migration required. 0.6.1 Fixes two broken links in the requests screen: Export CSV reporting an expired link, and the durable-medium receipt refusing to open from the request detail panel. Both affected every use, not just occasional ones. Recommended for all sites. No data migration required. 0.6.0 Checkout consents now work in the Checkout block, My Account gains a "Right of withdrawal" tab, and the settings screen is far more configurable. Fixes missing order notes on decisions taken from the "Set status" dropdown. Adds one optional database column, applied automatically. 0.5.10 Compatibility release for WordPress 7.1 and WooCommerce 11, with the admin screen aligned to the new 40px control size. Also updates the bundled Dompdf library to 3.1.6, which carries security fixes. Recommended for all sites. No data migration required. 0.5.4 Admin menu entries now default to English for non-Italian sites; Italian labels are unchanged via the bundled translation. No data migration required. 0.5.3 Safer uninstall: only the page the plugin itself auto-created can be removed when deleting data on uninstall; a page you selected yourself in settings is never touched. No data migration required. 0.5.2 A single, correctly-working withdrawal button for guests and members, a tidier styled confirmation step, and admin improvements: abandoned (unconfirmed) requests are hidden and restartable, and the menu badge counts all open requests with the standard styling. No data migration required. 0.5.1 Bundles the full JS/CSS source alongside the compiled assets and links the public development repository, updates the bundled Dompdf to 3.1.5, and hardens the admin receipt download and the product withdrawal-status save. No data migration required. 0.5.0 Adds a withdrawal-status column to the orders screen and replaces the request detail panel's action buttons with a single "Set status" dropdown plus a "Save status" button. No data migration required. 0.4.0 Richer per-product/category withdrawal status (art. 59 exceptions), a post-activation welcome notice, a reorganised settings screen, and a redesigned Annex I.B model form. No data migration required. 0.3.1 Fixes the in-place schema upgrade (empty requests list / blank withdrawal submission after updating to 0.3.0) and prevents the withdrawal form from white-screening on a transient error. 0.3.0 Adds art. 59 product/category configuration, checkout consents, the Annex I.B model form, status emails, admin actions/stats/CSV export, GDPR tools and more. Adds two optional database columns (applied automatically). Review the new settings under Recesso digitale → Settings. 0.2.0 Clearer withdrawal page (checkbox product picker with thumbnails and per-product quantities) and a fuller durable-medium acknowledgement that lists the selected products. No data migration required. 0.1.0 Initial release.

常见问题:

Does this plugin decide whether an order can be withdrawn?

No. The plugin provides the channel and records the request; the merchant accepts or rejects each one. The ordinary 14-day period is shown as advisory information (it does not hide the function), and the merchant can pre-exclude specific products or categories (art. 59). Rejecting a request requires a reason, which is recorded and emailed to the consumer. The mapping of the art. 59 exceptions to your catalogue must still be validated by a legal professional.

Does it work for guest-checkout orders?

Yes. Guests receive a per-order, single-purpose signed link (HMAC, verified in constant time and rate-limited). A bare order id or order key is never sufficient to submit a withdrawal, and responses are uniform to prevent order enumeration.

Does the withdrawal flow require JavaScript?

No. The two-step flow is server-rendered and works with JavaScript disabled; JavaScript only enhances the admin experience.

What is the "durable medium"?

A withdrawal acknowledgement sent by email together with a stored PDF receipt, kept in a protected location and downloadable only through a capability- or token-checked endpoint. The receipt records the content of the request and the exact date and time of transmission.

Do the checkout consents work with the Checkout block?

Yes. They are registered through WooCommerce's Additional Checkout Fields API, so WooCommerce renders, validates and stores them natively in the block checkout — no extra JavaScript is loaded. That API arrived in WooCommerce 8.9: on older versions the block checkout simply shows no consents, and the classic [woocommerce_checkout] shortcode keeps working on every supported version.

Can a consent appear only for the products that need it?

Yes. Enable "Show each consent only when the cart contains a product classified for it" under Checkout consents. Each consent then follows the "Withdrawal status" you set on the product or its category: the digital-content box appears only with art. 16(m) items in the cart, the service box only with art. 14(4)(a) items. The option is off by default, so updating the plugin never changes what your checkout shows. Either consent can also be made a condition of placing the order, and both are off by default. For the Article 14(4)(a) service-start consent that default is deliberate: asking for the service to begin inside the withdrawal period is the customer's request to make, and it only entitles you to a proportionate payment if they later withdraw. Require it only where your service always begins inside that window — a live session, a booking for the next few days — so an order without the request is one you cannot fulfil.

Can customers see the requests they have sent?

Yes. The My Account "Right of withdrawal" tab lists them with the date they were sent, the order, the scope, the current status, any note you wrote when deciding, the receipt verification code and a link to the receipt PDF that keeps working for as long as the account does. Orders they can still withdraw from are listed in the same table. The tab is on by default and can be turned off under Withdrawal link visibility. Guest-checkout customers have no account, so their route stays the signed link in their emails.

My withdrawal links stopped working. What happened?

Most likely the page hosting the withdrawal form was deleted, moved to the trash or unpublished. When that happens the plugin stops showing withdrawal links rather than pointing them somewhere useless, and tells you so on the settings screen and in an admin notice. Select or restore the page under General and the links come back.

Does it support WooCommerce Subscriptions?

Optionally. If WooCommerce Subscriptions is active, a confirmed withdrawal cancels the related subscription by transitioning its status — it never deletes subscription data. With Subscriptions absent, the plugin is unaffected.

Does the plugin make external network calls?

No. It functions fully offline and loads no third-party scripts, fonts or assets.

What happens to my data on uninstall?

Nothing is removed unless you opt in via the "Delete all data on uninstall" setting. When enabled, the plugin removes its tables, options and the flow page on uninstall.

更新日志:

0.7.0 Customers can now follow their withdrawal requests from their account, and a withdrawal page that has been deleted or unpublished no longer fails silently. 0.6.1 Superseded by 0.7.0, which contains these fixes. Never released separately. Two links in the requests screen were built with a helper that HTML-escapes the URL it returns. That is correct when printing a link into a page, and wrong for a URL handed to the admin app as data and set straight onto a button: the browser then sent amp;request instead of request, so the server never saw the parameters and refused. Both are fixed, and both are now covered by tests that fail against the old form. These are the only two places where the plugin builds a URL server-side and hands it to JavaScript. 0.6.0 0.5.10 0.5.9 0.5.5 0.5.4 0.5.3 0.5.2 0.5.1 0.5.0 0.4.0 0.3.1 0.3.0 0.2.0 0.1.0