Personalize My Order
Personalize My Order lets you collect product customization details from customers after they place an order — without blocking the checkout flow.
Once an order is paid, the customer receives a secure, time-limited link by email. They visit a dedicated customization page on your store, fill in the fields you’ve configured for each product, and submit. You see everything neatly displayed on the WooCommerce order detail page.
Key features:
- Secure tokenized URLs — HMAC-SHA256 signed, time-limited (configurable expiry), works for both guests and logged-in customers
- Per-product custom fields — configure different fields for each product, or set global fallback fields that apply to all products
- 13 field types — text, textarea, select, radio, checkbox, file, number, email, URL, date, color, range, and tel
- Local file uploads — uploaded files are stored securely in your WordPress uploads directory (
wp-content/uploads/persmyor-uploads/); directory listing is blocked via.htaccess - Partial saves / autosave — customers can save a draft and come back later; the form autosaves on tab close
- Per-item completion tracking — each order item is tracked independently as pending, partial, or complete
- Admin display — submitted values shown inline on the order detail page, with a dedicated meta box and a status column on the orders list
- My Account integration — customers can review and complete pending customizations from their My Account page
- CAPTCHA protection — optionally require Google reCAPTCHA v2 or Cloudflare Turnstile on the customization form’s Submit and Save Draft actions, verified server-side
- Developer hooks — filter fields per product or act when an order is fully customized
Configuration
General
- Token expiry — number of days before the customization link expires (default: 30)
- Send email on order — toggle the customization email sent to the customer after payment
Global fields
Define fallback fields that apply to all products that don’t have their own field configuration. Use the drag-and-drop field builder to add, reorder, and remove fields.
Per-product fields
On any product edit page, a Customization Fields meta box lets you configure fields specific to that product. These take priority over global fields.
CAPTCHA Protection
Go to WooCommerce → Settings → Personalize My Order → CAPTCHA Protection to require a CAPTCHA challenge before a customer can Submit or Save Draft on the customization form.
- Provider — Disabled, Google reCAPTCHA v2, or Cloudflare Turnstile
- Site Key / Secret Key — enter the key pair for your chosen provider
- Widget Theme — Light, Dark, or Auto (reCAPTCHA v2 doesn’t support Auto and falls back to Light)
- Test this key — load a live widget and verify your Site Key/Secret Key pair against the provider directly from the settings page, before saving
The CAPTCHA token is verified server-side on every Submit and Save Draft request; if the secret key isn’t configured, verification is skipped so the form is never accidentally blocked.
Field types
The following field types are supported in the field builder:
- text — single-line text input
- textarea — multi-line text input
- select — dropdown with predefined options
- radio — radio button group
- checkbox — single checkbox or multi-checkbox group
- file — file upload (stored in your server’s uploads directory); supports
accept(MIME types) andmax_size(in MB) - number — numeric input; supports
min,max,step - email — email address with format validation
- url — URL with format validation
- date — date picker
- color — color picker
- range — range slider; supports
min,max,step - tel — telephone number input
How it works
- Customer places an order on your WooCommerce store.
- A secure HMAC-signed token is generated and stored against the order.
- After payment, the customer receives an email with a unique customization link (also appended to standard WooCommerce customer emails).
- The customer opens the link, fills in the form for each ordered product, and submits.
- Submitted values are saved as WooCommerce order item meta.
- The admin sees the customization data on the order detail page, along with uploaded file links and a completion status badge.
- When all items are complete, an order note is added and the
persmyor_order_fully_customizedaction fires.
Developer hooks
Filters
persmyor_product_fields
Modify the resolved field definitions for a product before the form is rendered or data is validated.
add_filter( 'persmyor_product_fields', function( $fields, $product_id, $product ) {
// Add, remove, or modify fields
return $fields;
}, 10, 3 );
Actions
persmyor_order_fully_customized
Fires when every customizable item in an order has been submitted with status complete. Receives the WC_Order object.
add_action( 'persmyor_order_fully_customized', function( $order ) {
// e.g. trigger production workflow
} );<h3>External services</h3>
This plugin can optionally connect to a CAPTCHA provider to help protect the customer-facing customization form from bots. Both integrations are off by default (”Disabled”) and only run once a store admin picks a provider and enters a Site Key / Secret Key under WooCommerce → Settings → Personalize My Order → CAPTCHA Protection.
Google reCAPTCHA v2 (only used if you select it as the provider) * What it’s used for: displaying the reCAPTCHA widget on the customization form and verifying the customer’s response before accepting a Submit or Save Draft action. * What data is sent, and when: when a provider is selected and a customer loads the customization form, the widget script is loaded from Google’s servers; when the customer submits the form, the CAPTCHA token, the customer’s IP address, and your Secret Key are sent to Google for verification. * This service is provided by Google: Terms of Service, Privacy Policy.
Cloudflare Turnstile (only used if you select it as the provider) * What it’s used for: displaying the Turnstile widget on the customization form and verifying the customer’s response before accepting a Submit or Save Draft action. * What data is sent, and when: when a provider is selected and a customer loads the customization form, the widget script is loaded from Cloudflare’s servers; when the customer submits the form, the CAPTCHA token, the customer’s IP address, and your Secret Key are sent to Cloudflare for verification. * This service is provided by Cloudflare: Terms of Service, Privacy Policy.
In the plugin’s own settings page, a ”Test this key” tool lets you verify a Site Key/Secret Key pair before saving. The corresponding provider script is only loaded in your browser when you click Load Test Widget, and only for the provider you’re testing.
