Settings

Configure email verification options by navigating to WooCommerce → Email Verification.

How to Enable Signup Verification?

Signup verification requires customers to verify their email address before their account is created.

  • Go to WooCommerce → Email Verification.
  • Toggle Enable Signup Verification to ON.
  • Click Save Changes.
How it works

When a customer submits the registration form, they receive an OTP via email. The account is only created after successful verification of the OTP.

How to Enable Checkout Verification?

Checkout verification ensures customers verify their email before placing an order.

Enabling Checkout Verification — 48 second walkthrough.
  • Go to WooCommerce → Email Verification.
  • Toggle Enable Checkout Verification to ON.
  • Select the Checkout Verification Type:
    • Popup: Opens a popup window for OTP entry
    • Inline: Displays verification field directly on the checkout page
  • Click Save Changes.

Additional Checkout Options

OptionWhat it doesDefault
Enable on cart pageShows the verification step earlier, on the cart page — in addition to checkout, not instead of it.Off
Free orders onlyRequire verification only when the order total is $0, to stop $0 placeholder orders being used to skip verification elsewhere.Off
Create account during checkoutOnly verify when the customer opts to create an account at checkout (inline mode only). Guest checkouts bypass verification.Off
Disable Store API CheckoutBlocks WooCommerce’s Store API so it can’t be used to bypass verification. This also disables WooCommerce Blocks-based checkout and any headless/REST storefront — only use it if your store runs entirely on the classic shortcode checkout.Off

How to Enable Login Authentication?

Login authentication adds an extra security layer by requiring OTP verification for suspicious login attempts.

Enabling Login Authentication — 55 second walkthrough.
  • Go to WooCommerce → Email Verification.
  • Scroll to the Login Authentication section.
  • Toggle Enable Login Authentication to ON.
  • Enable Require OTP verification for unrecognized login.
  • Select the conditions that trigger verification:
    • Login from a new device
    • Login from a new location
    • Last login more than X days ago (15, 30, or 60 days)
  • Click Save Changes.

How to Require OTP on Every Login?

By default, login authentication only asks for a code when a sign-in looks unfamiliar. If you would rather treat every sign-in the same way — for example on a store that has just been through a spam attack, or one holding sensitive wholesale pricing — turn on Require OTP on every login. Every customer is then emailed a one-time code at every sign-in, no matter how familiar the device or location.

  • Go to WooCommerce → Email Verification.
  • Scroll to the Login Authentication section.
  • Make sure Enable Login Authentication is ON.
  • Toggle Require OTP on every login to ON.
  • Click Save Changes.
Important
This option overrides everything below it. While it is ON, the unrecognized-login conditions and Smart suspicious-login detection are ignored and hidden from the screen — none of them can change the outcome, because every login is challenged. Your saved settings are kept intact, so turning the option back OFF restores the previous conditions exactly as they were.
Note
Administrators, editors and shop managers are never prompted for a code, so you cannot lock yourself out of the admin with this setting.

Smart Suspicious-Login Detection

Instead of challenging every new device or location change, Smart suspicious-login detection scores each sign-in — using signals like a new device, a new country, a burst of failed password attempts, or a long idle period — and only asks for a code when the sign-in looks genuinely risky. When this is on, it replaces the manual “new device / new location / X days” conditions above.

  • Go to WooCommerce → Email Verification.
  • Scroll to the Login Authentication section.
  • Toggle Smart suspicious-login detection to ON.
  • Choose a Detection sensitivity:
    • Low — only clearly risky sign-ins
    • Balanced — recommended default
    • Strict — challenges on weaker signals
  • Click Save Changes.

How to Configure OTP Settings?

Customize the OTP behavior for all verification types.

Configuring the OTP settings — 40 second walkthrough.
  • Go to WooCommerce → Email Verification.
  • Locate the General Settings section.
  • Configure the following options:
SettingOptionsDefault
OTP Length4-digit or 6-digit code4-digit
OTP ExpirationNever, 10 min, 15 min, 30 min, 1 hour, 24 hours, or 72 hoursNever
Resend LimitAllow 1 Attempt, Allow 3 Attempts, or Disable ResendAllow 1 Attempt
Resend Limit MessageCustom message shown when the resend limit is reached“Too many attempts, please contact us for further assistance”
Success MessageMessage shown after successful verificationPlugin default success message
blank

Advanced: Paid-Order Gatekeeping

The Require a paid order to finish verification option (also called Paid-Order Gatekeeping) adds a third state to the standard verification flow. After a customer has confirmed their email via OTP, their account is held in a pending paid order state — counted as verified for login and checkout, but not yet fully activated — until their first genuinely paid WooCommerce order completes. CEV Pro provides this state and fires a completion hook on the paid order, so your own coupon, marketing-list, or membership integrations can decide when to release any perks they were holding back.

Requirements

Requires Customer Email Verification Pro to be installed and active, with WooCommerce also active. This feature is off by default and only takes effect once you explicitly enable it.

What it does (and what it doesn’t)

CEV Pro keeps things deliberately minimal. With this option ON, the plugin:

  • Adds a third verification state – pending paid order – alongside the existing verified and unverified states.
  • Writes that state at OTP success. When a new customer confirms their email, their account is marked pending paid order instead of verified.
  • Flips the state to fully verified when the customer’s first genuinely paid order reaches processingcompleted, or payment complete status.
  • Fires the cev_paid_order_gatekeeping_completed action hook at the moment of the flip, so your own integrations can release any perks they were holding back (welcome coupons, marketing-list opt-ins, membership upgrades, etc.).
  • Shows the state in the admin – the Users list verification column displays an orange clock badge for pending-paid-order customers (distinct from the green verified tick and the red unverified cross).
  • Protects pending customers from automatic cleanup – the auto-delete unverified and re-engagement reminder crons skip them, because their email is already confirmed.

The hook fires with the user ID and where the flip came from:

add_action( 'cev_paid_order_gatekeeping_completed', function ( $user_id, $source ) {
    // $source is 'paid_order' (customer's first paid order completed)
    // or 'admin' (an admin used Force activate below).
}, 10, 2 );

What CEV Pro does not do on its own:

  • It does not hold back the WooCommerce welcome / account-created email — that is sent normally at registration.
  • It does not restrict login, checkout, browsing, or any standard WooCommerce flow. A pending-paid-order customer can shop and check out exactly like any verified customer.
  • It does not automatically restrict coupons, discounts, or promotional campaigns. If you want those to wait for the paid order, listen to the hook from your own code or theme.

The three verification states

  • Verified – email confirmed and (when this option is on) first paid order completed. Used for the strict Verified KPI in the Analytics dashboard and the green tick in the admin user list.
  • Pending paid order – email confirmed via OTP, but no paid order yet. Counted as verified for login and checkout. Shown as an orange clock in the admin and as a separate bucket in the Analytics Verification Status widget.
  • Unverified – email has not been confirmed at all (same as before).

How to enable Paid-Order Gatekeeping

  • Go to WooCommerce → Email Verification.
  • Open the Advanced section in the settings sidebar.
  • Toggle Require a paid order to finish verification to ON.
  • Click Save Changes.
blank

The setting takes effect immediately for new signups. Existing customers keep their current verification status — they are not retroactively moved into pending paid order.

What counts as a “paid order”

  • Any order with a total greater than zero that reaches the processingcompleted, or payment complete status counts. This covers all standard payment paths: automatic-capture gateways (Stripe, PayPal, etc.) as well as manual gateways like Cash on Delivery, Bank Transfer (BACS), Cheque, and admin-created orders.
  • Free / zero-total orders do NOT count. A $0 order (after coupons, member discounts, or free trials) does not satisfy the requirement. This prevents a spammer from unlocking perks with a $0 placeholder order.
  • Cancelled, failed, refunded, or pending-payment orders do NOT count. Only successfully paid orders flip the status.

Admin override — Force activate

If you need to manually flip a pending-paid-order customer to fully verified — for example, you took payment offline, or you’re activating a VIP / staff account — you can do it from the WP Users screen.

  • Go to Users → All Users.
  • Select the customers you want to fully activate.
  • From the Bulk actions dropdown, choose Force activate (skip paid-order requirement) and click Apply.

The selected pending customers are flipped to fully verified, and the same cev_paid_order_gatekeeping_completed hook fires with $source = 'admin', so any of your integrations that listen for it run as if the customer had completed a paid order. Customers who weren’t pending are skipped silently.

Troubleshooting

  • Customer’s OTP keeps getting rejected — confirm they’re using the most recently sent code (each resend invalidates the previous one) and that it hasn’t passed the OTP Expiration you configured above.
  • Verification email never arrives — check spam/junk first, then confirm your site’s outgoing mail (WordPress’s default mail relies on the server’s mail function, which many hosts throttle or block; an SMTP plugin is recommended). Also check the Resend Limit hasn’t already been reached for that address.
  • Customer is stuck “unverified” despite entering a correct code — see Customer Management to look up their record, or manually mark them verified from the Users list.
  • No verification popup appears on a Blocks-based checkout page — checkout verification is designed for the classic shortcode checkout. If your store uses the WooCommerce Checkout block, see Using Email Verification with the WooCommerce Checkout Block.