Linux 软件免费装
Banner图

BeziWorld Withdrawal for WooCommerce

开发者 beziworld
更新时间 2026年7月11日 03:03
捐献地址: 去捐款
PHP版本: 7.4 及以上
WordPress版本: 7.0
版权: GPLv2 or later
版权网址: 版权信息

标签

woocommerce withdrawal consumer-rights eu-compliance right-of-withdrawal

下载

2.47.0 2.47.1 2.48.0 2.54.0 2.55.0 2.56.0 2.57.0 2.58.0 2.59.0 2.60.0 2.61.0 2.62.0 2.63.0 2.64.0 2.65.0 2.66.0 2.67.0 2.68.0 2.69.0 2.70.0 2.71.0 2.72.0 2.73.0 2.74.0 2.75.0 2.76.0 2.77.0 2.78.0 2.79.0 2.80.0 2.81.0 2.82.0 2.83.0 2.84.0 2.49.0 2.85.0 2.15.5 2.44.0 2.45.0 2.46.0 2.86.0 2.20.0 2.27.0 2.30.0 2.50.0 2.51.0 2.52.0 2.53.0 1.0.2 1.2.0 2.16.0 2.15.4 2.17.0 2.18.0 2.19.0 2.22.0 2.23.0 1.1.0 2.21.0 2.24.0 2.25.0 2.26.0 2.28.0 2.29.0 2.31.0 2.32.0 2.33.0 2.34.0 2.35.0 2.36.0 2.37.0 2.38.0 2.39.0 2.40.0 2.42.0 2.41.0 2.43.0

详情介绍:

Add a compliant withdrawal button ("right of withdrawal" / "Widerrufsbutton" / "odstąpienie od umowy") to your WooCommerce store. BeziWorld Withdrawal for WooCommerce is a free, GPL-licensed plugin that gives EU shops the dedicated, one-click withdrawal-from-contract function required by the EU Modernisation Directive (Directive (EU) 2023/2673, amending the Consumer Rights Directive via Article 11a), in force since 19 June 2026. The directive requires online shops selling to EU consumers to provide a dedicated, one-click withdrawal function inside the shop interface — separate from any generic returns/RMA page. This plugin delivers that function and the surrounding workflow: item-level partial withdrawals, a durable-medium acknowledgement, automatic refunds, and a tamper-evident audit trail. This plugin is a technical tool; it does not provide legal advice and does not by itself guarantee legal compliance. Responsibility for meeting the applicable consumer-law obligations remains with the shop operator. How the directive applies depends on your country's transposition (for example, the dedicated withdrawal-function obligation is in force in Germany, France, Italy and the Netherlands, but had not been transposed in Poland at the time of writing). Consult a qualified lawyer for your jurisdiction. This plugin is an independent project. It is not affiliated with, endorsed by or sponsored by WooCommerce or Automattic Inc. "WooCommerce" is a trademark of its respective owner and is used here only to describe compatibility. What this plugin gives you Built-in features (no premium upgrade required) Theme overrides Every customer-facing template can be overridden by your theme. Drop a copy of any file from templates/ into your-theme/beziworld-withdrawal-for-woocommerce/<same-path>.php and the plugin will use your version. External services This plugin performs no analytics, telemetry or remote downloads, and phones nothing home. Everything runs inside your WordPress installation. The single exception is entirely optional and off by default: if you enter a notification Webhook URL in the settings (for Slack, Discord or your own endpoint), the plugin sends a small JSON payload to that URL when a withdrawal is submitted and when it changes status (received, refunded, rejected). The payload contains the event name and the withdrawal and order identifiers (and the order number). No webhook is configured by default and nothing is sent unless you set a URL; the destination is the address you choose.

安装:

  1. Activate WooCommerce 8.0 or newer if it is not already active.
  2. Upload the plugin via Plugins → Add New → Upload Plugin, or unzip into /wp-content/plugins/.
  3. Activate the plugin through the Plugins screen.
  4. A Withdraw from contract page is created automatically — link it from your terms of sale.
  5. Go to WooCommerce → Withdrawal Settings to review the defaults (button labels, refund policy, eligibility rules, storefront notices).
  6. The plugin is now live. Logged-in customers see the Withdrawal tab inside My Account; guests can use the public page with the [bzww_withdrawal_form] shortcode.

屏幕截图:

  • Item-level partial withdrawal form — pick which items and how many units to return.
  • Admin list of withdrawal statements with bulk actions and CSV export.
  • Settings page — customer-facing labels, refund policy and eligibility rules.

升级注意事项:

2.86.0 Order emails now confirm the Article 16(m) digital-content consent to the consumer (Article 8(7) durable medium). Safe upgrade. 2.85.0 The customer UI now uses CSS logical properties for correct right-to-left (RTL) layout. LTR unchanged; safe upgrade. 2.84.0 Adds a print/save button and print styles to the success page. Safe upgrade. 2.83.0 Adds a refund SLA report (on-time % against the 14-day deadline, aging buckets). Safe upgrade. 2.82.0 Adds a select-all/none toggle and selected-item count to the withdrawal form for large orders. Safe upgrade. 2.81.0 The notification webhook now fires on received/refunded/rejected too, not only on submission. Opt-in; safe upgrade. 2.80.0 Adds a REST API v2 with withdrawal status, cancel and schema endpoints. v1 unchanged; safe upgrade. 2.79.0 Multi-shipment orders now start the withdrawal window from the last parcel delivered (Art. 9(2)(b)). Single-shipment unaffected; safe upgrade. 2.78.0 Adds search and a date-range filter to the withdrawals admin list. Safe upgrade. 2.77.0 Adds a "Resend acknowledgement" action on the withdrawal admin screen. Safe upgrade. 2.76.0 Adds an Import / export tab for moving plugin settings between sites as JSON. Safe upgrade. 2.75.0 Adds a wp bzww doctor read-only health-check command. Safe upgrade. 2.74.0 Adds an extensible custom-field-type registry (developer filters). Built-in field types unchanged; safe upgrade. 2.73.0 More precise Netherlands transposition citation in the Jurisdiction panel. Safe upgrade. 2.72.0 Adds a one-time post-update "what's new" admin notice. Safe upgrade. 2.71.0 Readme/listing SEO and new FAQ entries. No functional change; safe upgrade. 2.70.0 Adds a one-time, dismissible review invitation shown only after real usage. Safe upgrade. 2.69.0 Adds rate limiting to the certificate document endpoint and an order-scoped guest-submission limit. Recommended update. 2.68.0 Stronger CSV formula-injection protection and a masked webhook secret field. Recommended update. 2.67.0 Gender-neutral, consistent Polish wording in the customer-facing texts and emails. Safe upgrade. 2.66.0 Adds a one-click evidence-pack ZIP (declaration, acknowledgement, PDF certificate, audit chain) to each withdrawal. Safe upgrade. 2.65.0 Security hardening headers on the certificate document and added IDOR test coverage. Recommended update. 2.64.0 Withdrawal is no longer offered on subscription renewal orders (only the original order). A setting can re-enable it. Safe upgrade. 2.63.0 Field manager gets move up/down ordering controls and a Required-needs-Shown guard. Safe upgrade; no-JS fallback preserved. 2.62.0 Compliance panel "Fix this" deep-links and confirmation prompts before bulk refunds/rejections/deletions. Safe upgrade. 2.61.0 Dark-mode, high-contrast and forced-colours support, plus site-wide styling for the access button. Safe upgrade. 2.60.0 Accessibility: the status timeline now conveys state with symbols and screen-reader text, not colour alone. Safe upgrade. 2.59.0 Consumers can now withdraw before delivery (Article 9); the 14-day deadline starts on delivery. Recommended update. A setting restores the old behaviour if needed. 2.58.0 Clearer, neutral explanations and a recovery link on the "withdrawal not available" screen. Safe upgrade. 2.57.0 The block-checkout digital-content consent now shows only for carts with digital items. Safe upgrade; server-side enforcement unchanged. 2.56.0 The withdrawal notice now also appears on the block cart. Safe upgrade; classic themes unaffected. 2.55.0 Adds a configurable return address and instructions (Article 6(1)(i)) shown to consumers. Safe upgrade. 2.54.0 Adds email preview, test-send and a placeholder-token guard to the email editors. Safe upgrade. 2.53.0 Adds an append-only, tamper-evident audit chain per withdrawal, with an admin badge and a verify-chain CLI command. Safe upgrade. 2.52.0 Adds a real downloadable PDF of the acknowledgement certificate and a friendlier presentation of the verification code. Safe upgrade. 2.51.0 The confirmation email now attaches a self-contained HTML acknowledgement as a durable-medium record. New attachment only; safe upgrade. 2.50.0 Eligibility no longer refuses a withdrawal when the configured start date is missing; it falls back through the other order dates. Only ever lengthens the window; safe upgrade. 2.49.0 Adds an optional Article 10 twelve-month window extension for consumers who were not informed of the right of withdrawal. Off by default; existing deadlines are unchanged unless enabled. 2.48.0 More consistent Polish wording ("wtyczka") and internal translation-quality tooling. No behaviour change; safe upgrade. 2.47.0 Consistent consumer-facing withdrawal-status wording across the account list and timeline, plus a Polish consent-record wording fix. No behaviour change; safe upgrade. 2.46.0 Corrects two Polish interface mistranslations (field "Order/Kolejność"; the Refunds vs Returns tabs). Cosmetic, no behaviour change; safe upgrade. 2.45.0 Internal translation-toolchain improvement and a new mistranslation guard. No changes to your settings or the customer-facing flow; safe upgrade. 2.20.0 The withdrawal/confirmation buttons now default to the exact statutory wording for your site language (DE/FR/IT/PL/ES/NL/EN). Custom labels you set are unchanged. 2.19.0 Adds a withdrawal form field manager (toggle, reorder, require and add custom fields) and a redesigned responsive, tabbed settings screen. Your existing form behaviour, including the IBAN field, is preserved. 2.18.0 Clarifies that the plugin is a technical tool and not legal advice, adds suggested privacy-policy text, and declares the WooCommerce supported-version range. No configuration needed. 2.17.0 Adds a merchant notification email on new withdrawals (on by default, sent to the admin address), a visual editor for every email body, and editable withdrawal-form wording. Safe upgrade; existing emails and forms keep their current text. 2.16.0 Adds an optional expiry for guest withdrawal links (off by default). No action needed unless you want to enable it. 2.15.5 Polishes the settings-screen layout. No configuration needed. 2.15.4 Lets shop managers (not just administrators) save the plugin settings. No configuration needed. 2.15.3 Improves personal-data erasure so in-progress withdrawals are retained until finalised. No configuration needed. 2.15.2 Corrects the timezone handling of recorded delivery dates in the deadline calculation. No configuration needed. 2.15.1 Security fix for the acknowledgement-certificate feature. Updating is recommended. 2.15.0 Documentation-only release: inline developer hook reference. No code changes. 2.14.0 Adds an overdue-refund count to the stats CLI command and REST endpoint. No configuration needed. 2.13.0 Surfaces overdue-reimbursement warnings on the main dashboard widget. No configuration needed. 2.12.0 Corrects Polish plural forms for counted strings. No configuration needed. 2.11.0 Adds a reimbursement-deadline warning on the Withdrawals screen. No configuration needed. 2.10.0 Adds per-status counts to the Withdrawals admin list filters. No configuration needed. 2.9.0 Adds a read-only /wp-json/bzww/v1/stats REST endpoint for monitoring. No configuration needed. 2.8.0 Adds a "Top reasons" breakdown to the dashboard widget. Reasons are recorded from this version onward. 2.7.0 Adds a wp bzww stats WP-CLI command. No configuration needed. 2.6.0 Adds a withdrawal-rate figure to the dashboard widget. No configuration needed. 2.5.0 Adds average refund and average time-to-refund to the dashboard widget. No configuration needed. 2.4.0 Adds a "Record delivery date" order action that sets the start of the withdrawal window. Optional; no change to existing behaviour. 2.3.0 Adds a configurable deadline basis (completed / order / payment date) and optional grace days. Default behaviour (order completed date) is unchanged. 2.2.0 Adds optional Slack/Discord/generic webhook notifications on withdrawal submission. Off by default. 2.1.0 Adds optional Article 16(m) digital-content consent capture at the classic checkout. Off by default; no change unless enabled. 2.0.0 Milestone release consolidating the 1.x compliance toolkit and adding an onboarding Help tab. No breaking changes — safe to upgrade; your settings and records are preserved. 1.5.0 Adds a compliance readiness checklist to the settings screen and refines frontend styling for default themes. 1.4.0 Adds a printable/PDF-ready acknowledgement certificate linked from the confirmation email and the consumer's confirmation screen. 1.3.0 Adds a one-click Annex I.A/I.B legal-text generator and an optional two-step confirmation screen, plus default-theme styling refinements. 1.2.0 Adds always-visible withdrawal access (footer link + optional sticky bar), an optional validated IBAN refund field, and WCAG 2.1 AA accessibility improvements. 1.1.0 Adds a tamper-evident SHA-256 receipt code to the withdrawal acknowledgement, clearer receipt-only wording, and spam/rate-limit hardening on the public forms. Recommended for all sites. 1.0.2 Follow-up maintenance release addressing the PHPCS escape-output finding on the settings page reported during WordPress.org review. 1.0.1 Maintenance release addressing WordPress.org plugin-directory review feedback (escaping discipline, no inline scripts). 1.0.0 Initial release.

常见问题:

Is this plugin enough to make my shop compliant with EU 2023/2673?

The plugin covers the technical building blocks: a dedicated withdrawal function, a clearly labelled button, immediate confirmation on a durable medium, item-level selection, and a refund mechanism within 14 days. You still need to update your terms of sale, your privacy policy and the order summary copy. Whether — and exactly how — the dedicated withdrawal-function obligation applies depends on your country's transposition of Directive (EU) 2023/2673: it is in force in Germany, France, Italy and the Netherlands, while in Poland it had not been transposed at the time of writing (so the function is voluntary there for now). The plugin does not provide legal advice and does not by itself guarantee compliance. Consult a lawyer for the specifics of your jurisdiction.

Is a withdrawal button mandatory? (Ist der Widerrufsbutton Pflicht?)

It depends on your country's transposition of Directive (EU) 2023/2673 (Article 11a). A dedicated withdrawal function is mandatory in Germany (§356a BGB, with an Abmahnung risk if missing), France, Italy and the Netherlands; in Poland the obligation had not been transposed at the time of writing, so it is voluntary there for now but still strengthens your consumer-law position. The plugin shows a jurisdiction-aware status and never makes a single global "mandatory" claim.

Does the 14-day withdrawal apply to a shop in Poland? (odstąpienie 14 dni)

Yes — the 14-day right of withdrawal for distance contracts applies to Polish consumers under existing consumer law, independently of whether the newer dedicated-button obligation has been transposed. The plugin calculates the 14-day deadline (rolling weekends and Polish public holidays forward) and lets the consumer withdraw from the conclusion of the contract; the deadline starts on delivery.

Does it work with the block (Store API) checkout and block themes?

Yes. The statutory notices render on the block cart and block checkout, and the Article 16(m) digital-content consent is captured on the block checkout — not only the classic shortcode checkout. The customer-facing UI adapts to block themes, dark mode and high-contrast settings.

How do guests (logged-out customers) submit a withdrawal?

The plugin auto-creates a public page on activation with the [bzww_withdrawal_form] shortcode. Guests visit that page, enter their order number and the email used at checkout. After verification, the plugin issues a single-use token and shows the same withdrawal form a logged-in customer would see. The link is also embedded in the order confirmation email for one-click access.

Does it support multi-shipment orders?

Yes. The 14-day clock starts after the last parcel is delivered. Because WooCommerce core does not track shipment-level delivery, the plugin uses the order completion timestamp by default and exposes a bzww/order/delivered_at filter so a shipping/tracking plugin can override it.

How are digital products handled?

Per Article 16(m) CRD, sealed digital products and downloadable software are excluded by default. Products flagged as Virtual + Downloadable in WooCommerce are skipped automatically.

Can a customer cancel a pending withdrawal?

Yes. While a statement is in the pending state the customer sees a "Cancel this withdrawal" button on the success page in My Account.

Does it work with HPOS / custom order tables?

Yes. The plugin declares full HPOS compatibility on activation.

Where are records stored?

In a private custom post type, bzww_withdrawal. Each statement is one post with meta fields holding order id, items, amount, IP and user-agent.

How do I add public holidays for a country other than Poland?

Use the bzww/eligibility/holidays filter to return an array of Y-m-d strings. The plugin will roll the 14-day deadline forward when it lands on one of those dates.

Can I customise the withdrawal period?

Yes. WooCommerce → Withdrawal Settings → Withdrawal period (days) — set anywhere between 14 and 60 days. The default is the 14 days mandated by EU law; the minimum cannot go below the statutory 14.

Can the admin adjust the refund amount before issuing?

Yes. Each withdrawal detail page has an editable Refund amount input pre-filled with the calculated value. Override it to deduct a restocking fee or to account for the condition of returned goods.

Where can I learn about the available hooks?

The plugin is built to be extended. The main filters and actions are listed below; all pass the relevant order or withdrawal so you can tailor behaviour without touching plugin files. Eligibility & deadlines (filters)

  • bzww/eligibility/excluded_statuses — order statuses excluded from withdrawal.
  • bzww/eligibility/deadline — the computed withdrawal deadline (DateTime).
  • bzww/eligibility/holidays — extra non-working days for weekend/holiday roll-over.
  • bzww/order/delivered_at — override the delivery date the deadline is based on.
  • bzww/rules/order, bzww/rules/item — allow or deny a specific order or line item.
  • bzww/withdrawal/deny_duplicate — whether to block a second statement for the same order.
Refunds (filters)
  • bzww/refund/deadline_days — statutory reimbursement deadline in days (default 14).
  • bzww/refund/args — arguments passed to the WooCommerce refund.
  • bzww/refund/cheapest_shipping — override the cheapest-delivery amount (Art. 13(2)).
Lifecycle (actions)
  • bzww/withdrawal/submitted ( $withdrawal_id, $request, $order )
  • bzww/withdrawal/cancelled ( $withdrawal_id )
  • bzww/withdrawal/status_changed ( $withdrawal_id, $previous, $current )
  • bzww/withdrawal/transition_to_{status} ( $withdrawal_id, $previous )
  • bzww/refund/before, bzww/refund/after, bzww/refund/failed
  • bzww/plugin/booted ( $plugin )
Security, presentation & integration (filters)
  • bzww/submit/rate_limit, bzww/submit/rate_window, bzww/lookup/rate_limit, bzww/lookup/rate_window — throttling.
  • bzww/request/client_ip — resolved client IP behind proxies.
  • bzww/lookup/resolve_order — custom guest order lookup.
  • bzww/csv/columns, bzww/csv/row — admin CSV export shape.
  • bzww/webhook/payload — outbound webhook body.
  • bzww/templates/theme_directory, bzww/templates/located — template overrides.
  • bzww/placement/html, bzww/placement/tokens, bzww/access/label, bzww/access/url — front-end placement.
  • bzww/checkout/digital_consent_text, bzww/assets/should_enqueue, bzww/model_form/policy_html, bzww/model_form/model_form_html.
A REST endpoint GET /wp-json/bzww/v1/stats (capability manage_woocommerce) and the wp bzww CLI commands are also available for monitoring and automation.

更新日志:

2.86.0 2.85.0 2.84.0 2.83.0 2.82.0 2.81.0 2.80.0 2.79.0 2.78.0 2.77.0 2.76.0 2.75.0 2.74.0 2.73.0 2.72.0 2.71.0 2.70.0 2.69.0 2.68.0 2.67.0 2.66.0 2.65.0 2.64.0 2.63.0 2.62.0 2.61.0 2.60.0 2.59.0 2.58.0 2.57.0 2.56.0 2.55.0 2.54.0 2.53.0 2.52.0 2.51.0 2.50.0 2.49.0 2.48.0 2.47.1 2.47.0 2.46.0 2.45.0 2.44.0 2.43.0 2.42.0 2.41.0 2.40.0 Earlier versions The changelog for versions 2.39.0 and earlier (back to 1.0.0) is available in the readme.txt of each tagged release under https://plugins.svn.wordpress.org/beziworld-withdrawal-for-woocommerce/tags/ .