如何仅在页面上有表单时加载 CF7 CSS & JS

How to load CF7 CSS & JS only when form is on the page

我想加速我的网站。我只想在表单是页面之一时加载联系表单 7 css & js。我找到了解决方案,但它们对我来说并不是 100%。为什么?因为它们是基于我所在的页面。我想换一种方式。我正在使用 gutenberg 创建我的网站,但我不知道表单在哪里。将来我可能会出现在联系页面、主页或子页面上。所以我的想法是只有当表单在页面中时才加载 css & js。任何页面。那么有什么办法吗?我正在考虑使用简单的 ACF Checkbox 来做到这一点。当用户想要放置 CF7 shortcode/form 时,他需要点击复选框,例如 Website have form。也许有更优雅的方式?

您可以简单地使所有 Contact Form 7 脚本出队,然后检查短代码。

从您的主题中将此添加到您的 functions.php:

function contactform_dequeue_scripts() {
    $load_scripts = false;

    if( is_singular() ) {
        $post = get_post();

        if( has_shortcode($post->post_content, 'contact-form-7') ) {
            $load_scripts = true;
            
        }
    }

    if( ! $load_scripts ) {
        wp_dequeue_script( 'contact-form-7' );
        wp_dequeue_script('google-recaptcha');
        wp_dequeue_style( 'contact-form-7' );
    }
}
add_action( 'wp_enqueue_scripts', 'contactform_dequeue_scripts', 99 );

我无法使上一个答案中的脚本起作用。

但是下面的方法有效:

function contactform7_dequeue_scripts() {
    $check_cf7 = false;

    if( is_page('contact') ) {
        $check_cf7 = true;
    }

    if( !$check_cf7 ) {
        wp_dequeue_script( 'contact-form-7' );
        wp_dequeue_style( 'contact-form-7' );
        wp_dequeue_script( 'cf7-conditional-fields' );
        wp_dequeue_style( 'cf7-conditional-fields' );
    }
}
add_action( 'wp_enqueue_scripts', 'contactform7_dequeue_scripts', 77 );