Linux 软件免费装
Banner图

Conformitico Recesso 54-bis for WooCommerce

开发者 conformitico
更新时间 2026年9月10日 22:53
PHP版本: 7.4 及以上
WordPress版本: 7.1
版权: GPLv2 or later
版权网址: 版权信息

标签

woocommerce gdpr compliance withdrawal consumer-rights

下载

1.0.0 1.1.0

详情介绍:

From 19 June 2026, EU Directive 2023/2673 requires every online retailer in the European Union to offer a digital withdrawal function that is at least as easy to use as the purchase flow. This plugin ships the complete set of building blocks an EU store needs to put that function in place — and works as a self-contained tool with or without WooCommerce. It is built with Italian e-commerce in mind (the "diritto di recesso" rules of art. 52 ff. of the Codice del Consumo and the new art. 54-bis), but the interface is in English and the plugin is fully translation-ready, so a shop that also sells across the EU can deliver the same workflow in several languages. Works out of the box, everything included. Activate and you are live: no setup required, no PRO version, no feature locked behind a paywall. Guest orders, configurable deadline, translations, audit log and GDPR tools are all part of the free plugin. Multilingual by design Core features WooCommerce features (auto-enabled when WooCommerce is active) Standalone mode The form, shortcode, request log, email notifications, SHA-256 receipt hash, Annex I.B model and GDPR integration all run without WooCommerce. The plugin always lives under its own top-level Recesso 54-bis menu with a Settings submenu — the same path with or without WooCommerce. Activating WooCommerce later lights up the store features; deactivating it leaves the standalone features intact. Shortcodes Built for production A note on legal compliance This plugin is a technical tool, not legal advice. It provides building blocks to help you implement the right-of-withdrawal function, but it cannot guarantee compliance on its own: that depends on your business model, your catalogue and your jurisdiction. Review the texts and the workflow with a consumer-law advisor before relying on them.

安装:

  1. Upload the plugin folder to /wp-content/plugins/, or install the ZIP from Plugins → Add New → Upload Plugin.
  2. Activate the plugin from the Plugins screen.
  3. That's it: the "Withdraw from contract" button is live in My Account for orders in Processing and Completed status, and a "Right of withdrawal" page with the form and a sample legal template is published.
  4. Optional: run the two-step quick setup from the activation notice (or from Recesso 54-bis → Overview) to confirm the notification email and the eligible order statuses.
  5. Review the sample legal text of the withdrawal page and link the page from your footer.

屏幕截图:

  • Two-step confirmation screen (Art. 11a(3)): read-only summary of the declaration with the dedicated "Confirm withdrawal" button.
  • Withdrawal request log in the WordPress admin.
  • Per-request detail screen with status management and the captured checkout consents (text, accepted/declined, timestamp, IP, user agent).
  • Checkout consents tab of the settings page (WooCommerce active): each consent can be switched on globally and its exact wording edited.
  • Per-product and per-category "Withdrawal status" dropdown with the category-inheritance notice.
  • Excluded-product notice on the product page and the mandatory digital-content consent (Art. 16(m)) at the WooCommerce checkout.
  • Annex I.B model withdrawal form rendered as a collapsible block below the public form, with its printable view.

升级注意事项:

1.1.0 Two-step quick setup, revised Italian translation and new display name. Nothing to reconfigure: existing settings and requests are preserved. 1.0.0 First public release.

常见问题:

Do I need to configure anything after activation?

No — the plugin works right after activation with sensible defaults: the "Withdraw from contract" button appears for orders in Processing and Completed status (with WooCommerce), or the "Right of withdrawal" page is published (without it), and notifications go to the site admin email. The optional two-step quick setup, reachable from the activation notice or from Recesso 54-bis → Overview, only lets you confirm the notification email and the eligible order statuses — everything else can be fine-tuned later under Settings, with no obligation to do so.

Does the form reject requests after the 14-day deadline?

No, not by default. The 14-day period legally starts when the goods are delivered (or, for digital content, when the download begins) — a date the shop cannot detect automatically — so auto-rejecting on the order or completion date could turn away customers who are still within their legal window. Instead the plugin flags requests that look past the approximate window in the admin notification and lets you check the real delivery date and decide. You can tune the advisory calculation (order date vs. completion date, plus grace days) under Recesso 54-bis → Settings. If your start date is reliable (services, digital content, shop pickup, predictable carriers) you can switch the Deadline enforcement setting from Advisory to Strict, which hides the button and blocks new requests once the deadline plus grace days has passed. Advisory is the default and the safe choice for goods with unpredictable delivery.

How do I mark products excluded from the right of withdrawal (Article 16)?

Use the single Withdrawal status dropdown, available per category and per product:

  1. By category: edit a category under Products → Categories and pick a status — for example Other Article 16 exception for perishable or custom-made goods, or Digital content (Art. 16(m)) for sealed digital content. Every product in that category and its descendants inherits it.
  2. By product: edit the product, open the General tab and pick a status. The default is Inherit from category; pick any other value (including Standard) to override for that product only.
When a request lands on an order with excluded items, the plugin flags it but never auto-rejects it, because a partial withdrawal over the non-excluded items can still be valid — the admin reviews and decides.

The excluded-product notice does not appear with my page builder. What can I do?

Page builders such as Divi, Elementor, Bricks or ShopLentor render their own single-product template and skip the standard WooCommerce hook where the notice is injected. Drop the [r54b_avviso_esclusione] shortcode into your product layout (most builders have a "Shortcode" element) and the notice will print for the current product whenever it is flagged as excluded. With no attributes it resolves the product being viewed; pass id="123" to target a specific product.

How do the checkout consent checkboxes work (Art. 16(m) and Art. 14(4)(a))?

When the cart contains flagged products, the plugin can inject two consent checkboxes at checkout:

  • Mandatory (Art. 16(m)) for digital content: the customer must accept it to complete the order; without it recorded, the customer keeps the 14-day right even after accessing the content.
  • Optional (Art. 14(4)(a)) for services started within the window: if accepted, the trader may charge a pro-rated amount on an early withdrawal; without it, an early withdrawal forces a full refund.
The exact text shown, the accepted/declined state, timestamp, IP and user agent are stored on the order. Both checkboxes can be enabled or disabled and fully re-worded under Recesso 54-bis → Settings → Checkout consent.

I sell to businesses (B2B). Can I exclude them?

The right of withdrawal protects consumers (natural persons acting outside their trade or profession), not business buyers, but the plugin never decides that for you. Enable Consumer self-declaration under Recesso 54-bis → Settings and the form shows a required checkbox where the buyer declares they purchased as a consumer; a business that cannot declare it self-excludes, and the declaration is stored with the request as proof. It is off by default. The r54b_show_consumer_check filter lets you decide per order (VIES validation, a customer-type field, etc.).

Does it include the Annex I.B model withdrawal form?

Yes. It is generated dynamically from your shop name, address and contact email, with an optional trader phone from settings. It appears as a collapsible block below the public form and has a printable view on the same page. Providing this model is a pre-contractual information obligation under Art. 6(1)(h) of Directive 2011/83/EU; the online function added by Directive 2023/2673 complements but does not replace it.

What is the verification code in the customer email?

It is a SHA-256 hash computed from the request data (post ID, customer name, email, order reference, scope, order date and submission timestamp). The customer keeps the email as tamper-evident proof on a durable medium. If a dispute arises later, recompute the hash from the stored fields with the r54b_compute_receipt_hash() helper and confirm the original submission was not altered.

Where are requests stored and who can manage them?

Each request is a private custom post type entry (r54b_richiesta), not publicly accessible from the frontend, managed under the top-level Recesso 54-bis menu. Because each request holds personal data (name, email, IP), you choose under Recesso 54-bis → Settings → Permissions which roles, besides the administrator, may view and manage them. The administrator always has access.

Does it support HPOS (High-Performance Order Storage)?

Yes. The plugin declares HPOS compatibility on load.

Does the plugin work without WooCommerce?

Yes. The form, shortcode, request log, email notifications, SHA-256 receipt hash, Annex I.B model and GDPR integration all run as a standalone tool under their own Recesso 54-bis menu. When WooCommerce is active, the plugin adds order/email validation, the My Account endpoint, the email notice, private order notes and the Article 16 product/category exclusions on top.

Can I customise the emails?

Yes. Under Recesso 54-bis → Settings you can set the sender ("From name" and "From address") and edit the body of the accepted, rejected and completed status emails; left empty, each falls back to the bundled default. All strings remain translatable through the text domain. Emails are sent in plain text.

Which hooks does the plugin expose for developers?

Filters:

  • r54b_grace_days — extra days added to the advisory deadline.
  • r54b_allowed_statuses — order statuses (without the wc- prefix) for which the button and email notice are offered.
  • r54b_email_ids — WooCommerce email IDs where the withdrawal notice is injected (return an empty array to remove it).
  • r54b_allow_unverified_order — return true to accept submissions whose order number cannot be matched to a real order.
  • r54b_pre_resolve_wc_order — short-circuit the order resolver (return a WC_Order, false, or null to fall through).
  • r54b_resolve_wc_order — late filter receiving the resolved order and the raw reference, for auditing or last-chance overrides.
  • r54b_validation_result — the order/email validation result before the request proceeds; return valid => false with an error code to reject (e.g. a captcha integration).
  • r54b_show_consumer_check — whether the "bought as a consumer" checkbox is shown, with the current field values.
Actions:
  • r54b_after_status_change — fires after a status change (individual or bulk). Arguments: request ID, new status, optional admin comment.
  • r54b_after_form — fires inside the public form wrapper, right after </form>, so modules can inject content below the form. Used internally by the Annex I.B model form.
  • r54b_form_before_submit — fires inside the form, right before the submit button, so an integrator can render a captcha/anti-spam widget or an extra field posted with the form.

Is this plugin enough to comply with EU Directive 2023/2673?

It covers the functional building blocks the directive imposes EU-wide from 19 June 2026: a discoverable digital withdrawal function, eligibility by order status with an advisory deadline flag, Article 16 exclusions with subcategory inheritance, durable-medium proof via the SHA-256 receipt hash, the Annex I.B model form and the checkout consent checkboxes for the Art. 16(m) and Art. 14(4)(a) exceptions, plus operational tooling such as the status lifecycle and native GDPR integration. Legal compliance ultimately depends on your business model, catalogue and jurisdiction; the plugin provides the technical building blocks, not legal advice — consult a consumer-law specialist for your specific case.

Can I get my withdrawal texts reviewed by a lawyer?

Yes. The plugin generates sample legal texts (the withdrawal page, Article 59 exclusion notices, checkout consents and emails) and reminds you to have them reviewed before publishing. Conformitico — the team behind this plugin, lawyers and technicians — offers professional review and tailoring of those texts, and drafts your Terms & Conditions to match. See Recesso 54-bis → Legal services in the admin. These are optional paid services; the plugin stays free and fully functional on its own.

更新日志:

1.1.0 1.0.0