renzojohnson/cf7-asset-optimizer

Only loads Contact Form 7 scripts and styles on pages that contain a form. Performance optimization for CF7.

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

Type:wordpress-plugin

pkg:composer/renzojohnson/cf7-asset-optimizer

v1.0.0 2026-02-24 23:33 UTC

This package is auto-updated.

Last update: 2026-02-24 23:34:26 UTC


README

Latest Version PHP Version License

Only loads Contact Form 7 scripts and styles on pages that actually contain a form. Zero configuration.

Fixes Contact Form 7 #1278 — CF7 enqueues its JS, CSS, reCAPTCHA, Turnstile, and Stripe scripts on every single page, even pages with no form. This plugin detects whether the current page has a CF7 form and dequeues all CF7 assets when no form is present.

Author: Renzo Johnson

Requirements

  • PHP 8.4+
  • WordPress 6.4+
  • Contact Form 7 5.0+

Installation

Via Composer

composer require renzojohnson/cf7-asset-optimizer

Manual

Download and upload to /wp-content/plugins/cf7-asset-optimizer/, then activate.

As mu-plugin

Copy cf7-asset-optimizer.php to /wp-content/mu-plugins/.

How It Works

The plugin hooks into CF7's own wpcf7_load_js and wpcf7_load_css filters to conditionally disable asset loading. On pages without a form, it also dequeues module scripts (reCAPTCHA, Turnstile, Stripe, SWV).

Detection

The plugin checks for CF7 forms in:

  • [contact-form-7] shortcode in post content
  • [contact-form] shortcode (legacy alias)
  • contact-form-7/contact-form-selector Gutenberg block
  • CF7 widgets in sidebar areas
  • CF7 shortcodes inside text widgets
  • CF7 blocks inside block widgets

Assets Dequeued

When no form is detected, these handles are dequeued:

Handle Source
contact-form-7 Main CF7 JS
contact-form-7-html5-fallback Datepicker fallback
swv Schema-based Validation
wpcf7-recaptcha reCAPTCHA v3 handler
google-recaptcha Google reCAPTCHA API
cloudflare-turnstile Cloudflare Turnstile API
wpcf7-stripe Stripe JS
contact-form-7 (style) Main CF7 CSS
contact-form-7-rtl (style) RTL CSS
jquery-ui-smoothness (style) jQuery UI theme
wpcf7-stripe (style) Stripe CSS

Edge Cases

For forms rendered via PHP templates or dynamic shortcodes not in post content:

// Force-load CF7 assets on specific pages
add_filter('cf7ao_has_form', function (?bool $has_form): ?bool {
    if (is_page('custom-form-page')) {
        return true;
    }
    return $has_form;
});

Testing

composer install
vendor/bin/phpunit

Links

License

MIT License. Copyright (c) 2026 Renzo Johnson.