如何将TarteAuCitron(RGPD / ePR)与ContactForm7集成的reCAPTCHA一起使用?

问题描述 投票:0回答:1

我在客户的网站上使用脚本tarteaucitron.js来管理第三方cookie和脚本。该网站是WordPress驱动的。

我们有一个使用ContactForm7扩展创建的联系表单和集成的reCAPTCHA。

我想让TarteAuCitron处理reCAPTCHA脚本而不是ContactForm7加载它。我知道TarteAuCitron能够加载reCAPTCHA,但我不知道如何将它与ContactForm7设置和WordPress脚本系统结合使用。

wordpress recaptcha contact-form-7
1个回答
0
投票

我找到了办法。在WordPress操作挂钩(wp_footer)中,我将联系表单7排队的reCAPTCHA脚本出列。然后插入自定义TarteAuCitron服务和服务调用(对于reCAPTCHA v2和v3不同),然后是Contact Form 7引导脚本:

// remove recaptcha script
wp_dequeue_script('google-recaptcha');

// enqueue recaptcha service
// $service contains the definition script of the TarteAuCitron service named 'recaptchacf7'
wp_add_inline_script('tarteaucitron', $service, 'after');

// enqueue service call
wp_add_inline_script('tarteaucitron', '(tarteaucitron.job = tarteaucitron.job || []).push("recaptchacf7");', 'after');

使用reCAPCHA v3,棘手的部分是检索Contact Form 7引导脚本,该脚本没有以标准方式排队,而只是在wp_footer动作期间编写。我们需要阻止其立即插入,并将其插入服务定义脚本中,以便以后激活,如果网站用户选择启用它。我在ob_start()ob_get_clean() PHP函数的帮助下做到了这一点:

if (function_exists('wpcf7_recaptcha_onload_script')) {
    array_push(wp_scripts()->done, 'google-recaptcha');
    ob_start();
    wpcf7_recaptcha_onload_script();
    $bootstrap = preg_replace('/<\/?script[^>]*>/', '', ob_get_clean());
    array_pop(wp_scripts()->done);
}

我将代码包装在一个WordPress插件中,可以在这里找到:cf7-tac-recaptcha。它包括reCAPTCHA v2和v3的服务定义脚本。没有更多的配置。

© www.soinside.com 2019 - 2024. All rights reserved.