| 开发者 | beziworld |
|---|---|
| 更新时间 | 2026年7月11日 03:03 |
| 捐献地址: | 去捐款 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
wp bzww list, wp bzww refund, wp bzww cancel, wp bzww received, wp bzww stats/wp-json/bzww/v1/ for headless and mobile clients[bzww_withdrawal_policy] and [bzww_model_form] shortcodestemplates/ 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.
/wp-content/plugins/.[bzww_withdrawal_form] shortcode.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.
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.
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.
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.
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.
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.
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.
Yes. While a statement is in the pending state the customer sees a "Cancel this withdrawal" button on the success page in My Account.
Yes. The plugin declares full HPOS compatibility on activation.
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.
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.
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.
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.
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.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)).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/failedbzww/plugin/booted ( $plugin )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.GET /wp-json/bzww/v1/stats (capability manage_woocommerce) and the wp bzww CLI commands are also available for monitoring and automation.
event value (withdrawal.received / withdrawal.refunded / withdrawal.rejected). The last dispatch attempt is recorded for basic visibility. Still opt-in and off by default./wp-json/bzww/v2/ adds GET /withdrawals/{id} (status lookup), POST /withdrawals/{id}/cancel (cancel a pending withdrawal) and GET /schema (resource introspection). Access uses the same owner-or-guest-token rule as the rest of the flow. The existing v1 endpoints are unchanged.bzww/order/delivery_dates filter; single-shipment orders are unaffected.wp bzww doctor command runs a read-only health check of the plugin's configuration — WooCommerce active, the withdrawal page published, Action Scheduler available, the Polish translation present, the webhook signed, the withdrawal period at least the statutory 14 days — and reports pass/warning/failure per item, cutting support back-and-forth.bzww/form/field_types filter lets a plugin or the Pro add-on register additional field types (they appear in the field-manager picker automatically), and a bzww/form/render_custom_field filter lets it render their markup — without forking the plugin. The built-in text/paragraph/checkbox/dropdown types are unchanged.prefers-color-scheme), a higher-contrast variant (prefers-contrast) and Windows High Contrast / forced-colours support. The site-wide "Withdraw from contract" access button is now styled on every page (its stylesheet loads site-wide when the footer link or sticky bar is enabled), so it no longer degrades to a plain link off the withdrawal pages.bzww/checkout/cart_has_digital filter lets integrations override the determination.{return_address} and {return_instructions} placeholders, so the consumer is told where to send goods being returned. The address falls back to your WooCommerce store address when left blank.wp bzww verify-chain <id> command reports the chain status from the command line.bzww/email/attach_acknowledgement filter.bzww/eligibility/deadline_basis_fallback filter.bzww/eligibility/info_provided filter.[bzww_accessibility_statement] shortcode. The compliance-readiness panel now includes an accessibility-statement row.bzww/returns/registered action and bzww/returns/carrier_options filter that a separate Pro add-on can hook for carrier integrations and return labels.wp bzww verify and the admin integrity badge automatically check against the recorded version.