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
1.0.3
- Fixed: "Domain Path" header pointed to a
/languages folder that wasn't shipped in the plugin package; the folder is now included.
- Fixed: Stable tag in this readme didn't match the plugin file's Version header, which could prevent WordPress.org from serving update packages correctly.
- Fixed: Removing every row from the Global Fields or per-product Fields builder and saving would leave old saved fields in place instead of clearing them, since no data is submitted for an empty field list.
1.0.2
- Fixed: The Google reCAPTCHA and Cloudflare Turnstile scripts were being loaded on every WooCommerce settings page (not just this plugin's own tab), and regardless of whether CAPTCHA was enabled. These scripts are no longer preloaded at all — they're now injected only when an admin explicitly clicks "Load Test Widget" on the plugin's own CAPTCHA settings tab.
- New: Documented the optional reCAPTCHA/Turnstile external services, including what data is sent and links to each provider's terms and privacy policy — see the "External services" section of this readme.
1.0.1
- New: CAPTCHA protection for the customization form — choose Google reCAPTCHA v2 or Cloudflare Turnstile under WooCommerce → Settings → Personalize My Order → CAPTCHA Protection. The widget is shown on both Submit and Save Draft, and the token is verified server-side on every request.
- New: "Test this key" live panel in the CAPTCHA settings — load the widget and verify the currently-typed Site Key/Secret Key pair against the provider directly, without saving first.
- New: Configurable widget theme (Light/Dark/Auto).
- Improved: Settings page visual refresh — cleaner section headers, spacing, and layout.
- Improved: Customization form UI polish, including a subtle fade-in transition when switching between item tabs.
1.0.0
Initial release — no upgrade steps required.