Crovly

WordPress

Protect WordPress forms with Crovly captcha. 22+ integrations, all free.

Installation

  1. Download the latest release from GitHub
  2. Upload the crovly folder to /wp-content/plugins/
  3. Activate the plugin in Plugins → Installed Plugins
  4. Go to Settings → Crovly

Configuration

Enter your keys from the Crovly dashboard:

SettingDescription
Site KeyYour public site key (crvl_site_...)
API KeyYour private API key (crvl_secret_...)
ThemeAuto (match system), Light, or Dark
Error MessageCustom message on verification failure (optional)
Skip Logged-inNone, Admins only, or All logged-in users
IP AllowlistIPs that bypass captcha (one per line)

Supported Integrations

All integrations are free — no premium gating. The settings page dynamically shows only integrations for plugins you have installed and active.

WordPress Core

FormSetting Key
Loginlogin
Registrationregister
Lost Passwordlostpassword
Commentscomment

WooCommerce

Requires WooCommerce to be installed and active. A single toggle protects all WooCommerce forms:

  • Checkout (before "Place Order" button)
  • Login form
  • Registration form
  • Lost password form
  • Pay for order page

Form Builders

PluginForms Protected
Contact Form 7All forms (auto-injected before submit button)
WPFormsAll forms
Gravity FormsAll forms
Elementor ProRegistered as a "Crovly Captcha" field type
Ninja FormsAll forms
Fluent FormsAll forms
Formidable FormsAll forms
ForminatorAll forms
JetpackContact forms

Page Builders

PluginForms Protected
Divi BuilderContact Form module, Login module

Membership & Community

PluginForms Protected
BuddyPressRegistration, Activity Post
bbPressNew Topic, Reply
Ultimate MemberLogin, Register, Password Reset
MemberPressCheckout, Login
Paid Memberships ProCheckout

E-Commerce & Payments

PluginForms Protected
Easy Digital DownloadsCheckout, Login, Register
GiveWPDonation forms

Other

PluginForms Protected
Mailchimp for WPSignup forms
wpDiscuzComment forms
wpForoNew Topic, Reply

How It Works

  1. Plugin loads widget.js from the Crovly CDN on protected pages
  2. Widget renders in the form and runs Proof of Work in the background
  3. On form submit, the token is sent with the form data (crovly-token)
  4. Plugin calls api.crovly.com/verify-token from your server to validate
  5. If verification fails, the form submission is rejected with an error

Fail-Open Behavior

If the Crovly API is unreachable (network error), the plugin allows the request through to prevent locking users out. This is a deliberate safety measure.

Shortcode

Add the captcha widget to any page, post, or widget area:

[crovly]
[crovly theme="dark"]

PHP Functions

For theme developers and custom integrations:

// Render the widget (echo)
<?php crovly_render(); ?>

// Verify the token (returns bool)
<?php
if (!crovly_verify()) {
    wp_die('Captcha verification failed.');
}
?>

Or using the class directly:

// Render
Crovly_Plugin::instance()->render_widget();

// Get HTML (returns string, doesn't echo)
$html = Crovly_Plugin::instance()->get_widget_html();

// Verify
$passed = Crovly_Plugin::instance()->verify_token();

Custom Form Integration

For forms not covered by the built-in integrations:

1. Add the widget to your form template:

<?php if (function_exists('crovly_render')): ?>
    <?php crovly_render(); ?>
<?php endif; ?>

2. Verify in your form handler:

if (function_exists('crovly_verify') && !crovly_verify()) {
    wp_die('Captcha verification failed.', 'Error', [
        'response' => 403,
        'back_link' => true,
    ]);
}

Advanced Settings

IP Allowlist

Add trusted IPs (one per line) that skip captcha verification entirely. Useful for:

  • Office/corporate IPs
  • Staging servers
  • Monitoring services

Skip for Logged-in Users

OptionBehavior
NoneVerify everyone (recommended)
Admins onlySkip for users with manage_options capability
All logged-inSkip for all authenticated users

Troubleshooting

Widget not appearing:

  • Ensure the plugin is activated and Site Key is set
  • Check that the form type is enabled in Settings → Crovly
  • Verify no caching plugin is serving a stale page
  • For form builder plugins, ensure the plugin is active (settings only show active plugins)

"Captcha verification failed" on every submit:

  • Verify your API Key is correct in Settings → Crovly
  • Check server can reach api.crovly.com (not blocked by firewall)
  • Test with test_always_pass as the Site Key to isolate the issue

Plugin integration not showing in settings:

  • The integration only appears when the target plugin is installed and active
  • Install and activate the plugin first, then refresh the Crovly settings page

WooCommerce widget position:

  • The widget appears before the "Place Order" button by default
  • Some themes with custom checkout templates may need adjustment

On this page