plugin-icon

Recesso Manager for WooCommerce

作者 giazam·
Collect, document and manage right-of-withdrawal declarations for WooCommerce orders.
版本
1.6.32
最近更新:
Jul 25, 2026

Recesso Manager for WooCommerce helps WooCommerce store owners collect, document and manage online right-of-withdrawal declarations from customers.

The plugin adds a public form where customers can identify an order, select eligible products and quantities, confirm the declaration and receive an e-mail receipt with content, date and time of the online transmission.

In the WordPress admin area, merchants can review declarations, manage the received/accepted/rejected status, add private notes, resend e-mails, export data, and see linked declarations from the WooCommerce order edit screen.

The plugin supports guest checkout, configurable allowed WooCommerce order statuses, optional product/category exclusions, WPML/Polylang translation workflows and WooCommerce HPOS.

Recesso Manager for WooCommerce is a technical workflow tool. It does not provide legal advice, does not guarantee legal compliance, does not calculate or trigger refunds, does not create shipping labels, does not manage couriers and does not automatically change WooCommerce order status.

Author and contact

Developed by Giacomo Zamprogno.

Website: https://www.giazam.it Contact e-mail: giacomo.zamprogno@gmail.com

Legal disclaimer

Recesso Manager for WooCommerce provides a technical workflow to help store owners collect, record and manage online withdrawal declarations for WooCommerce orders.

The plugin does not provide legal advice, does not replace a qualified legal consultant and does not guarantee that a store, its policies, its contractual documents or its withdrawal process are legally compliant.

Store owners remain responsible for verifying applicable laws, withdrawal deadlines, product exclusions, customer communications, refund handling, data retention and all legal, tax and operational obligations.

Accessibility

Version 1.6.5 includes an accessibility-focused pass inspired by WCAG 2.2 principles for the plugin-owned interface. The public form uses associated labels, fieldsets, legends, table captions, keyboard-operable native controls, visible focus styles, announced error/status messages and responsive tables that preserve text labels on small screens.

Requirements

  • WordPress 6.4 or higher.
  • PHP 8.1 or higher.
  • WooCommerce 8.2 or higher.
  • WooCommerce is declared as a required plugin through the Requires Plugins: woocommerce header.
  • Database permissions to create custom tables.

The plugin uses WooCommerce CRUD APIs and declares compatibility with WooCommerce High-Performance Order Storage (HPOS).

Configuration

The settings page includes:

  • Withdrawal form page.
  • Informational withdrawal period in days.
  • Allowed WooCommerce order statuses for technical access to the withdrawal flow.
  • Optional excluded product categories.
  • Merchant notification recipients.
  • E-mail sender name and address.
  • Customer receipt subject and intro text.
  • Merchant notification subject and intro text.
  • Privacy checkbox text with a %s placeholder for the privacy policy link.
  • Privacy policy page.
  • Optional terms/withdrawal information page snapshot.
  • Optional e-mail footer text with safe HTML.
  • Optional WooCommerce e-mail and My Account links.
  • Predefined rejection reasons.
  • Merchant reminder settings.
  • Data retention settings.

Allowed order statuses are loaded from WooCommerce, including custom statuses added by other plugins. The setting only controls technical access to the form and does not determine whether the right of withdrawal legally applies.

Product and category exclusions are technical exclusions from the public form. They should be configured only after verifying the concrete legal and operational case.

The withdrawal period value is informational only. The plugin does not automatically accept or reject declarations based on dates, because it does not know the actual product delivery date. The merchant remains responsible for verifying terms and applicability.

Configurable texts, privacy wording, e-mail content, rejection reasons and operational procedures should be reviewed with a qualified legal consultant before production use.

Shortcodes

[rmwc_withdrawal_form]

Displays the full withdrawal workflow.

[rmwc_withdrawal_link]

Displays a link to the configured form page.

[rmwc_withdrawal_link text="Exercise the right of withdrawal"]

Customizes the link text.

If no form page is configured, the shortcode does not generate a broken URL. Administrators may see a discreet notice; visitors see no output.

Customer workflow

  1. The customer enters billing e-mail address and order number, unless they start from a logged-in My Account order action.
  2. The plugin verifies the order and allows only orders whose WooCommerce status is enabled in the plugin settings.
  3. The customer selects products and quantities.
  4. The plugin shows a summary.
  5. The customer must confirm the withdrawal statement and privacy checkbox.
  6. The customer submits the withdrawal declaration.
  7. The plugin creates a unique request code, saves the statement and historical item data, adds a private order note and attempts to send e-mails.
  8. If previous partial withdrawal declarations exist, the customer can submit a further declaration only for remaining quantities.

The essential workflow works without JavaScript.

Admin workflow

The Recesso Manager menu contains:

  • Withdrawals.
  • Settings.
  • Event log.
  • Instructions.
  • Configuration status.

The merchant can view declarations, filter by status, search by code/order/customer/e-mail/product/note, inspect selected products and quantities, review clearer event logs, add private internal notes, resend customer receipts, resend merchant notifications, accept or reject declarations and export CSV files.

Accepting or rejecting a declaration sends a decision e-mail to the customer. A rejection reason is required for rejected declarations.

Multilingual and translation support

The plugin works on monolingual sites and is prepared for WPML, Polylang Pro and Loco Translate workflows.

Fixed plugin interface strings use the standard WordPress gettext/i18n system with the recesso-manager-for-woocommerce text domain. On WordPress.org, translations are handled through translate.wordpress.org and delivered by the standard WordPress translation update system.

Configurable texts entered in Recesso Manager > Settings are edited in the site source/default language. Runtime translations are handled as follows:

  • WPML: configurable texts are registered for WPML String Translation.
  • Polylang Pro: configurable texts are registered with Polylang string translations when the Polylang API is available.
  • Loco Translate: fixed gettext strings can be customized locally; texts saved in settings remain site configuration values unless translated by a runtime multilingual plugin.

Multilingual page handling:

  • the configured form, privacy and terms pages are stored as default/source-language page IDs;
  • current-language page translations are resolved when generating frontend links;
  • the language active at submission time is saved in the declaration;
  • the historical declaration statement, customer receipt and decision e-mails are generated in the submission language;
  • merchant notifications and internal reminders use the site default/source language.

Recommended setup:

  1. Create the form page in the default/source language and add [rmwc_withdrawal_form].
  2. Translate that page and keep the shortcode in each translation.
  3. Translate the privacy and terms/withdrawal pages.
  4. Translate configurable plugin strings in WPML String Translation or Polylang string translations.
  5. Use translate.wordpress.org or local gettext tools only for fixed plugin interface strings.
  6. Check Recesso Manager > Configuration status.

E-mail compatibility

The plugin sends e-mails with the standard WordPress wp_mail() function. It does not configure SMTP, include a custom PHPMailer library or call WP Mail SMTP APIs. SMTP plugins can therefore intercept mail normally.

A successful wp_mail() result means that WordPress accepted the message for sending. It does not prove final mailbox delivery.

Data storage and retention

The plugin creates these custom tables:

  • {$wpdb->prefix}rmwc_requests
  • {$wpdb->prefix}rmwc_request_items
  • {$wpdb->prefix}rmwc_request_logs

Default retention settings:

  • withdrawal declarations: 10 years;
  • business/documentary logs: 10 years;
  • technical/security logs: 180 days;
  • automatic technical log cleanup: enabled;
  • automatic declaration deletion: disabled/manual.

Automatic cleanup only deletes technical and security logs older than the configured retention period. Withdrawal declarations and business/documentary logs are not deleted automatically.

On plugin deletion, data is preserved by default. Administrators can explicitly enable complete data deletion before uninstalling from Recesso Manager > Settings > Data retention. Complete deletion requires selecting the destructive uninstall option and entering the confirmation phrase shown in the settings page. When enabled, uninstall removes custom tables, plugin options and temporary transients. This operation is irreversible and should only be used after checking retention obligations and taking a backup.

Privacy

The plugin stores personal data connected to withdrawal declarations, including billing e-mail address, customer name, order number, selected products and quantities, withdrawal statement, privacy acceptance text, request status, merchant decision notes, internal admin notes, e-mail status and management logs.

The plugin integrates with WordPress privacy tools:

  • personal data exporter for withdrawal declarations matching an e-mail address;
  • personal data eraser that reports retained documentary records instead of deleting them automatically.

Deletion requests should be assessed manually by the site owner according to the store retention policy and applicable legal/contractual obligations.

The plugin also adds suggested text to the WordPress privacy policy guide.

External services

The WordPress.org-ready build does not load third-party JavaScript, images, tracking pixels or external anti-spam services. E-mail delivery uses WordPress wp_mail(). Optional anti-spam integrations should be implemented by separate add-ons and documented by those add-ons.

No Contact Form 7 integration is required or used.

Security notes

The plugin uses WordPress nonces, server-side validation, rate limiting, opaque temporary tokens, idempotency keys, prepared database queries, late escaping and WooCommerce CRUD APIs.

Order lookup errors are intentionally generic and do not disclose whether the order number, e-mail address or order status is the failing condition.

Limitations

The plugin does not:

  • determine whether a withdrawal is legally valid;
  • check product delivery dates;
  • apply withdrawal exceptions automatically;
  • manage return shipping;
  • generate return labels;
  • calculate refunds;
  • create WooCommerce refunds;
  • change stock;
  • change WooCommerce order status automatically;
  • provide legal advice or guarantee compliance.

Developer documentation

Recesso Manager for WooCommerce exposes a small public developer API through WordPress actions and filters. The supported public hook prefix is rmwc_. Use these hooks from a custom plugin or child theme; do not edit the plugin files directly.

The plugin intentionally keeps the API focused on integration points that are useful without turning the plugin into an RMA, shipping or refund system. Hook callbacks should avoid changing the historical meaning of declarations that have already been submitted.

Order and item filters

  • rmwc_resolve_order_id – Customize how the customer-entered order number is resolved to a WooCommerce order ID. Parameters: $order_id, $order_number, $billing_email.
  • rmwc_allowed_order_statuses – Customize which WooCommerce order statuses can enter the withdrawal flow. The settings UI loads statuses dynamically from WooCommerce. Default: completed. Parameters: $statuses.
  • rmwc_item_is_withdrawable – Include or exclude a specific order item from the public withdrawal form. Parameters: $is_withdrawable, $item, $order, $product.
  • rmwc_visible_item_meta – Customize public order item metadata saved internally with the declaration. Parameters: $public_meta, $item, $order.

Validation and declaration filters

  • rmwc_final_confirmation_validation – Run additional server-side validation before the final declaration is saved. Return true to continue, false to block with a generic error, or WP_Error to block with a specific error message. Parameters: $valid, $flow, $order.
  • rmwc_request_code – Customize the generated declaration code after the database row has been created. Parameters: $code, $request_id, $request_data.
  • rmwc_statement_text – Customize the historical declaration text saved at submission time. Parameters: $text, $order, $selected_items, $customer_name, $language. Use this with caution because it changes the documentary statement stored for new declarations.

Status, label and log filters

  • rmwc_allowed_review_statuses – Customize the internal management statuses. Default statuses are received, accepted and rejected. Parameters: $statuses. Use with caution because custom statuses may require custom UI handling.
  • rmwc_review_status_labels – Customize human-readable management status labels. Parameters: $labels.
  • rmwc_email_status_labels – Customize human-readable e-mail status labels. Parameters: $labels.
  • rmwc_log_scope_for_event – Customize the event-log scope assigned to an event. Parameters: $scope, $event_type.
  • rmwc_log_event_type_labels – Customize human-readable event labels shown in the event log. Parameters: $labels.

E-mail filters

  • rmwc_customer_email_subject – Customize the customer receipt subject. Parameters: $subject, $request.
  • rmwc_customer_email_body – Customize the customer receipt HTML body. Parameters: $body, $request, $items.
  • rmwc_merchant_email_subject – Customize the merchant notification subject. Parameters: $subject, $request.
  • rmwc_merchant_email_body – Customize the merchant notification HTML body. Parameters: $body, $request, $items.
  • rmwc_customer_decision_email_subject – Customize the customer decision e-mail subject. Parameters: $subject, $request, $review_status, $decision_note.
  • rmwc_customer_decision_email_body – Customize the customer decision e-mail HTML body. Parameters: $body, $request, $items, $review_status, $decision_note.
  • rmwc_merchant_pending_reminder_email_subject – Customize the merchant pending-reminder subject. Parameters: $subject, $request.
  • rmwc_merchant_pending_reminder_email_body – Customize the merchant pending-reminder HTML body. Parameters: $body, $request, $items.

WooCommerce link filters

  • rmwc_wc_email_link_email_ids – Choose which WooCommerce e-mail IDs receive the automatic withdrawal link. Default: customer_completed_order. Parameters: $email_ids.
  • rmwc_wc_email_link_language – Customize the language used for the automatic link in WooCommerce e-mails. Parameters: $language, $order, $email.
  • rmwc_my_account_link_language – Customize the language used for the link in the My Account order list. Parameters: $language, $order.
  • rmwc_my_account_detail_link_language – Customize the language used for the link in the My Account order detail page. Parameters: $language, $order.
  • rmwc_my_account_allow_billing_email_fallback – Control whether a logged-in customer can use the order billing e-mail as fallback in the My Account flow. Parameters: $allow, $order, $user_id.

Rate limit and retention filters

  • rmwc_rate_limit_max_attempts – Customize failed lookup attempts before temporary blocking. Default: 5. Parameters: $attempts.
  • rmwc_rate_limit_window – Customize the rate-limit window in seconds. Default: 15 * MINUTE_IN_SECONDS. Parameters: $seconds.
  • rmwc_rate_limit_block_duration – Customize the temporary block duration in seconds. Default: 30 * MINUTE_IN_SECONDS. Parameters: $seconds.
  • rmwc_log_cleanup_scopes – Choose which log scopes are automatically cleaned. Default: technical and security. Parameters: $scopes.
  • rmwc_log_cleanup_batch_size – Customize the log cleanup batch size. Parameters: $batch_size.
  • rmwc_log_cleanup_max_batches – Customize the maximum number of cleanup batches per run. Parameters: $max_batches.

Actions

  • rmwc_before_request_created – Fires before a declaration is inserted. Parameters: $request_data, $item_rows, $order.
  • rmwc_request_created – Fires after a declaration has been created. Parameters: $request_id, $order, $selected_items.
  • rmwc_review_status_changed – Fires after the merchant changes the management status. Parameters: $request_id, $old_status, $new_status, $decision_note, $actor_user_id.
  • rmwc_customer_receipt_sent – Fires after the customer receipt has been accepted by wp_mail(). Parameters: $request_id, $customer_email.
  • rmwc_customer_receipt_failed – Fires after the customer receipt send attempt fails. Parameters: $request_id, $error_message.
  • rmwc_merchant_notification_sent – Fires after the merchant notification has been accepted by wp_mail(). Parameters: $request_id, $recipients.
  • rmwc_merchant_notification_failed – Fires after the merchant notification send attempt fails. Parameters: $request_id, $error_message.
  • rmwc_customer_decision_email_sent – Fires after the decision e-mail has been accepted by wp_mail(). Parameters: $request_id, $customer_email, $review_status.
  • rmwc_customer_decision_email_failed – Fires after the decision e-mail send attempt fails. Parameters: $request_id, $error_message, $review_status.
  • rmwc_merchant_pending_reminder_sent – Fires after a merchant reminder has been accepted by wp_mail(). Parameters: $request_id, $recipients.
  • rmwc_merchant_pending_reminder_failed – Fires after a merchant reminder send attempt fails. Parameters: $request_id, $error_message.
  • rmwc_technical_logs_cleaned – Fires after automatic technical/security log cleanup. Parameters: $deleted_count, $threshold_gmt, $scopes.

Examples

Allow processing orders as well as completed orders:

add_filter( 'rmwc_allowed_order_statuses', static function ( $statuses ) { return array( 'completed', 'processing' ); } );

Run a custom integration after a declaration is created:

add_action( 'rmwc_request_created', static function ( $request_id, $order, $selected_items ) { /* Send data to your internal system. */ }, 10, 3 );
目前已測試版本
WordPress 7.0.2
此外掛程式已可供下載,並可用於你 系統。