{"id":343819,"date":"2026-07-30T09:44:44","date_gmt":"2026-07-30T09:44:44","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/withdrawal-form-builder\/"},"modified":"2026-07-30T14:31:58","modified_gmt":"2026-07-30T14:31:58","slug":"chriskak-service-product-withdrawal-manager","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/chriskak-service-product-withdrawal-manager\/","author":23152406,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.0.1","stable_tag":"3.0.1","tested":"7.0.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Chriskak Service & Product Withdrawal Manager","header_author":"Christos Kakoulakis","header_description":"Product and service withdrawal requests with WooCommerce account buttons and a configurable form builder.","assets_banners_color":"dde6e4","last_updated":"2026-07-30 14:31:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/christos-kakoulakis.gr\/withdrawal-plugin.php\/","header_author_uri":"https:\/\/christos-kakoulakis.gr","rating":0,"author_block_rating":0,"active_installs":0,"downloads":43,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.0.1":{"tag":"3.0.1","author":"chriskak","date":"2026-07-30 14:31:58"}},"upgrade_notice":{"3.0.1":"<p>The withdrawal settings page can now be opened directly from the WordPress Plugins screen.<\/p>"},"ratings":[],"assets_icons":{"icon-1.png":{"filename":"icon-1.png","revision":3628738,"resolution":"1","location":"assets","locale":"","width":128,"height":128},"icon-2.png":{"filename":"icon-2.png","revision":3628736,"resolution":"2","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3628735,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.0.1"],"block_files":[],"assets_screenshots":{"Screenshot-1.png":{"filename":"Screenshot-1.png","revision":3628744,"resolution":"1","location":"assets","locale":"","width":1727,"height":855},"Screenshot-4.png":{"filename":"Screenshot-4.png","revision":3628739,"resolution":"4","location":"assets","locale":"","width":1720,"height":665}},"screenshots":[]},"plugin_section":[],"plugin_tags":[258660,2253,4959,245590,286],"plugin_category":[45],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-343819","plugin","type-plugin","status-publish","hentry","plugin_tags-cancellation","plugin_tags-form-builder","plugin_tags-services","plugin_tags-withdrawal","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_committers-chriskak"],"banners":{"banner":"https:\/\/ps.w.org\/chriskak-service-product-withdrawal-manager\/assets\/banner-772x250.png?rev=3628735","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/chriskak-service-product-withdrawal-manager_dde6e4.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/chriskak-service-product-withdrawal-manager\/assets\/Screenshot-1.png?rev=3628744","caption":""},{"src":"https:\/\/ps.w.org\/chriskak-service-product-withdrawal-manager\/assets\/Screenshot-4.png?rev=3628739","caption":""}],"raw_content":"<!--section=description-->\n<p>Chriskak Service &amp; Product Withdrawal Manager provides a shortcode-based withdrawal form that can work with or without WooCommerce.<\/p>\n\n<p>Administrators can:<\/p>\n\n<ul>\n<li>Configure the withdrawal period.<\/li>\n<li>Add standalone services.<\/li>\n<li>Reorder and customize standard form fields.<\/li>\n<li>Edit customer and administrator email content.<\/li>\n<li>Review and cancel withdrawal requests.<\/li>\n<li>Record a cancellation reason and notify the customer.<\/li>\n<li>Track WooCommerce orders with a dedicated Withdrawal requested status.<\/li>\n<li>Customize the WooCommerce withdrawal button text.<\/li>\n<\/ul>\n\n<p>When WooCommerce is active, signed-in customers see a withdrawal button beside each eligible order in My Account and on the order details page. The button opens the configured form page with that order selected. The withdrawal period is calculated from the delivery date stored on the order.<\/p>\n\n<p>For standalone services, visitors select a configured service and provide the contract date. Guest submissions require email confirmation before a withdrawal request is created.<\/p>\n\n<p>The form is added with:<\/p>\n\n<pre><code>[ckspwm_service_products_withdrawal_form]\n<\/code><\/pre>\n\n<p>This plugin does not connect to third-party services or include tracking. Email is sent through the WordPress mail system or the WooCommerce mailer available on the site.<\/p>\n\n<p>Important: The included withdrawal wording is a general example and does not constitute legal advice. Site owners should review their legal obligations with a qualified professional.<\/p>\n\n<h3>How to Use<\/h3>\n\n<h4>Initial setup<\/h4>\n\n<ol>\n<li>Activate Chriskak Service &amp; Product Withdrawal Manager.<\/li>\n<li>Create a new WordPress page for the withdrawal form.<\/li>\n<li><p>Add the following shortcode to the page:<\/p>\n\n<p>[ckspwm_service_products_withdrawal_form]<\/p><\/li>\n<li><p>Publish the page.<\/p><\/li>\n<li>Open WooCommerce &gt; Withdrawal settings. Without WooCommerce, open Settings &gt; Product and service withdrawals.<\/li>\n<li>Select the published page under Withdrawal form page.<\/li>\n<li>Configure the withdrawal period, notification email address, form content and email templates.<\/li>\n<\/ol>\n\n<h4>WooCommerce product withdrawals<\/h4>\n\n<p>When WooCommerce is active, the plugin can display a Withdrawal button beside eligible customer orders under My Account &gt; Orders and on the order details page.<\/p>\n\n<p>An order is eligible when:<\/p>\n\n<ul>\n<li>It belongs to the signed-in customer.<\/li>\n<li>Its status is Completed.<\/li>\n<li>It has a valid delivery date.<\/li>\n<li>It is within the configured withdrawal period.<\/li>\n<li>No previous withdrawal request exists for that order.<\/li>\n<\/ul>\n\n<p>The plugin adds a Delivery date field to the WooCommerce order editor. When an order becomes Completed, the current date is stored automatically if no delivery date exists. Administrators can correct this date manually.<\/p>\n\n<p>When the customer selects Withdrawal, the configured form page opens with the eligible order preselected.<\/p>\n\n<p>After submission:<\/p>\n\n<ul>\n<li>A withdrawal request is stored in WordPress.<\/li>\n<li>The customer and administrator receive email notifications.<\/li>\n<li>An order note is created.<\/li>\n<li>The WooCommerce order status changes to Withdrawal requested.<\/li>\n<li>Duplicate requests for the same order are prevented.<\/li>\n<\/ul>\n\n<h4>Standalone service withdrawals<\/h4>\n\n<p>WooCommerce is not required for service withdrawals.<\/p>\n\n<p>To configure services:<\/p>\n\n<ol>\n<li>Open the plugin settings.<\/li>\n<li>Find Available services.<\/li>\n<li>Enter one service per line.<\/li>\n<li>Save the settings.<\/li>\n<\/ol>\n\n<p>Visitors can select a service and enter its purchase or contract date. The plugin validates the date against the configured withdrawal period.<\/p>\n\n<p>Guest visitors must confirm their email address through a secure, time-limited verification link before the request is created.<\/p>\n\n<h4>Customizing the form<\/h4>\n\n<p>The Shortcode form builder allows administrators to:<\/p>\n\n<ul>\n<li>Reorder fields.<\/li>\n<li>Edit field labels.<\/li>\n<li>Edit placeholders.<\/li>\n<li>Show or hide optional fields.<\/li>\n<li>Mark configurable fields as required.<\/li>\n<li>Customize the withdrawal statement and submit button.<\/li>\n<\/ul>\n\n<p>Essential system fields remain enabled to ensure that requests can be validated securely.<\/p>\n\n<h4>Customizing the WooCommerce button<\/h4>\n\n<p>Use WooCommerce withdrawal button text to change the call-to-action displayed in the customer account.<\/p>\n\n<p>The default button text is:<\/p>\n\n<pre><code>Withdrawal\n<\/code><\/pre>\n\n<h4>Managing withdrawal requests<\/h4>\n\n<p>Administrators can find submitted requests under:<\/p>\n\n<ul>\n<li>WooCommerce &gt; Withdrawals when WooCommerce is active.<\/li>\n<li>Settings &gt; Withdrawals in standalone mode.<\/li>\n<\/ul>\n\n<p>Each request includes the customer details, selected order or service, relevant dates, statement and optional comments.<\/p>\n\n<p>Administrators can cancel a request by:<\/p>\n\n<ol>\n<li>Opening the request.<\/li>\n<li>Entering a cancellation reason.<\/li>\n<li>Selecting Cancel withdrawal and email customer.<\/li>\n<li>Updating the request.<\/li>\n<\/ol>\n\n<p>The cancellation reason is stored, the customer receives an email notification and a WooCommerce order is restored to its previous status when applicable.<\/p>\n\n<h4>Email configuration<\/h4>\n\n<p>The settings page provides editable email subjects and content for:<\/p>\n\n<ul>\n<li>New customer orders.<\/li>\n<li>Guest email verification.<\/li>\n<li>Withdrawal confirmations.<\/li>\n<li>Withdrawal cancellations.<\/li>\n<\/ul>\n\n<p>Supported placeholders are displayed below each email field.<\/p>\n\n<p>Email delivery depends on the WordPress mail configuration. For reliable production delivery, configure WordPress with a trusted SMTP or transactional email provider.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Withdrawal requests may contain names, email addresses, phone numbers, order or service information, dates and customer comments.<\/p>\n\n<p>The plugin integrates with the WordPress personal data export and erasure tools. It also adds suggested text to the WordPress privacy policy guide.<\/p>\n\n<h4>Important legal notice<\/h4>\n\n<p>The default withdrawal wording is provided as a general example only. It does not constitute legal advice or guarantee compliance with any specific law. Site owners should review their withdrawal policy and business requirements with a qualified legal professional.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin stores information submitted through the withdrawal form in the site's WordPress database. This may include contact details and order or service information.<\/p>\n\n<p>Pending guest verification data is stored temporarily for up to 30 minutes. Confirmed requests remain stored until an authorized administrator deletes them or uses the WordPress personal data erasure tool.<\/p>\n\n<p>The plugin adds suggested privacy-policy text and registers personal data exporter and eraser callbacks under Tools &gt; Export Personal Data and Tools &gt; Erase Personal Data.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>chriskak-service-product-withdrawal-manager<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP through Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate Chriskak Service &amp; Product Withdrawal Manager.<\/li>\n<li>Open WooCommerce &gt; Withdrawal settings when WooCommerce is active, or Settings &gt; Product and service withdrawals otherwise.<\/li>\n<li>Add <code>[ckspwm_service_products_withdrawal_form]<\/code> to a page.<\/li>\n<li>Select that page in the Withdrawal form page setting, then configure the withdrawal period, notification address, services, email templates, and form fields.<\/li>\n<li>If WooCommerce is active, record the delivery date on eligible orders. Completing an order records the current date when no delivery date exists.|<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20woocommerce%20required%3F\"><h3>Is WooCommerce required?<\/h3><\/dt>\n<dd><p>No. The plugin supports standalone services. WooCommerce order integration is enabled automatically when WooCommerce is active.<\/p><\/dd>\n<dt id=\"can%20guests%20submit%20a%20withdrawal%20request%3F\"><h3>Can guests submit a withdrawal request?<\/h3><\/dt>\n<dd><p>Guests can submit requests for configured services. They must confirm ownership of the submitted email address before the request is created.<\/p><\/dd>\n<dt id=\"how%20is%20the%20deadline%20calculated%3F\"><h3>How is the deadline calculated?<\/h3><\/dt>\n<dd><p>The configured number of days is added to the WooCommerce delivery date or standalone service contract date. The date and eligibility are validated again on the server.<\/p><\/dd>\n<dt id=\"where%20are%20requests%20stored%3F\"><h3>Where are requests stored?<\/h3><\/dt>\n<dd><p>Requests are stored as a private WordPress custom post type. They are visible to authorized administrators under WooCommerce &gt; Withdrawals, or Settings &gt; Withdrawals in standalone mode.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20data%20to%20third%20parties%3F\"><h3>Does the plugin send data to third parties?<\/h3><\/dt>\n<dd><p>No. The plugin does not send data to external APIs or analytics services. Site email delivery depends on the mail configuration and plugins selected by the site owner.<\/p><\/dd>\n<dt id=\"what%20personal%20data%20is%20stored%3F\"><h3>What personal data is stored?<\/h3><\/dt>\n<dd><p>The plugin may store the customer's name, email address, phone number, account ID, selected order or service, relevant dates, comments, and withdrawal status. It integrates with the WordPress personal data export and erasure tools.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20plugin%20is%20deleted%3F\"><h3>What happens when the plugin is deleted?<\/h3><\/dt>\n<dd><p>Withdrawal records and settings are retained by default to avoid deleting business or legal records unexpectedly. Site owners can erase customer data with the WordPress privacy tools before deleting the plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.0.1<\/h4>\n\n<ul>\n<li>Added a Settings action link on the WordPress Plugins screen that opens the withdrawal settings page.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Renamed the plugin to the distinctive Chriskak Service &amp; Product Withdrawal Manager identity.<\/li>\n<li>Changed the plugin slug and text domain to <code>chriskak-service-product-withdrawal-manager<\/code>.<\/li>\n<li>Replaced all declarations, storage keys, hooks, assets, and shortcode identifiers with the unique <code>ckspwm<\/code> prefix.<\/li>\n<li>Changed the shortcode to <code>[ckspwm_service_products_withdrawal_form]<\/code>.<\/li>\n<li>Removed the external Author URI to clarify personal ownership by WordPress.org user <code>chriskak<\/code>.<\/li>\n<\/ul>\n\n<h4>2.5.1<\/h4>\n\n<ul>\n<li>Prevented duplicate withdrawal buttons when a theme already renders WooCommerce order actions on the order-details page.<\/li>\n<li>Retained the plugin's order-details button as a fallback for themes that do not render those actions.<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>Added a sanitized setting for the WooCommerce withdrawal button CTA.<\/li>\n<li>Set the default My Account and order-details button text to Withdrawal.<\/li>\n<li>Completed a security and translation-readiness review.<\/li>\n<li>Hardened the custom WooCommerce order status visibility.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>Added the WooCommerce Withdrawal requested order status.<\/li>\n<li>Orders automatically enter Withdrawal requested when an order withdrawal is submitted.<\/li>\n<li>Cancelling a withdrawal restores the order's previous status.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Renamed the plugin, files, identifiers, shortcode, and text domain to Chriskak Service &amp; Product Withdrawal Manager.<\/li>\n<li>Added withdrawal buttons beside eligible WooCommerce orders in My Account and order details.<\/li>\n<li>Added a setting for the page containing the withdrawal form shortcode.<\/li>\n<li>Added secure order preselection when customers follow a WooCommerce account button.<\/li>\n<li>Fixed REST and block-editor shortcode rendering and added scoped editor preview styles.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Added email confirmation for guest service withdrawals.<\/li>\n<li>Added WordPress personal data export, erasure, and privacy-policy integration.<\/li>\n<li>Improved output escaping and eligible-order query performance.<\/li>\n<li>Added complete WordPress.org plugin metadata and release documentation.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added withdrawal cancellation with an administrator-provided reason.<\/li>\n<li>Added configurable cancellation emails.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Made WooCommerce optional.<\/li>\n<li>Added standalone services and guest submissions.<\/li>\n<li>Added the sortable shortcode form builder.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added configurable customer order emails.<\/li>\n<li>Changed all source strings to English and added translation support.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Create configurable product and service withdrawal forms with WooCommerce account buttons, deadline tracking, and email notifications.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/343819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=343819"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/chriskak"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=343819"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=343819"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=343819"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=343819"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=343819"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=343819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}