GetWeb.cz
Forum Replies Created
-
Forum: Plugins
In reply to: [WPCF 7 reCaptcha Defer] grecapcha not definedHi,
we had the same issue using this plugin but it can be reproduced only when on slow internet connection. The reason is that this plugin assumes that reCaptcha API will be loaded in 200ms. The fix has to be added to the plugin code, so hopefully plugin author will find this thread and implement it in the next release.
Meanwhile to hotfix the issue, replace the content of this file:
/rm-wpcf7-recaptcha-defer/public/js/rm-wpcf7-recaptcha-defer-recaptcha.js
With the following code:
// Compare version number function isNewerVersion (oldVer, newVer) { const oldParts = oldVer.split('.') const newParts = newVer.split('.') for (var i = 0; i < newParts.length; i++) { const a = ~~newParts[i] // parse int const b = ~~oldParts[i] // parse int if (a > b) return true if (a < b) return false } return false } // EDIT: Google reCaptcha async loading if(typeof grecaptcha === 'undefined') { grecaptcha = {}; } grecaptcha.ready = function(cb){ if(typeof grecaptcha.render === 'undefined') { const c = '___grecaptcha_cfg'; window[c] = window[c] || {}; (window[c]['fns'] = window[c]['fns']||[]).push(cb); } else { cb(); } } // END EDIT // Main reCaptcha event jQuery(document).ready(function($) { var captchaLoaded = false; $( document ).ready(function() { //Load reCAPTCHA script when CF7 form field is focussed $('.wpcf7-form input').on('focus', function() { // If we have loaded script once already, exit. if (captchaLoaded) { return; } // Variable Intialization console.log('========= reCAPTCHA script loading ========'); var head = document.getElementsByTagName('head')[0]; var recaptchaScript = document.createElement('script'); var cf7script = document.createElement('script'); // Add the recaptcha site key here. // console.log('KEY: ' + wpcf7_recaptcha.sitekey); // Dynamically add Recaptcha Script recaptchaScript.type = 'text/javascript'; recaptchaScript.src = 'https://www.recaptcha.net/recaptcha/api.js?render=' + wpcf7_recaptcha.sitekey + '&ver=3.0'; // Dynamically add CF7 script cf7script.type = 'text/javascript'; if(isNewerVersion('5.1.9', wpcf7_recaptcha.version)) { // console.log('cf7 newer version'); // EDIT: Defer addEventsAndStuff function after grecaptcha is ready cf7script.text = "let addEventsAndStuff = (t) => { var e; wpcf7_recaptcha = { ...null !== (e = wpcf7_recaptcha) && void 0 !== e ? e : {} }; const c = wpcf7_recaptcha.sitekey, { homepage: n, contactform: a } = wpcf7_recaptcha.actions, o = t => { const { action: e, func: n, params: a } = t; grecaptcha.execute(c, { action: e }).then((t => { const c = new CustomEvent(\"wpcf7grecaptchaexecuted\", { detail: { action: e, token: t } }); document.dispatchEvent(c) })).then((() => { \"function\" == typeof n && n(...a) })).catch((t => console.error(t))) }; if (grecaptcha.ready((() => { o({ action: n }) })), document.addEventListener(\"change\", (t => { o({ action: a }) })), \"undefined\" != typeof wpcf7 && \"function\" == typeof wpcf7.submit) { const t = wpcf7.submit; wpcf7.submit = function(e) { let c = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; o({ action: a, func: t, params: [e, c] }) } } document.addEventListener(\"wpcf7grecaptchaexecuted\", (t => { console.log(); const e = document.querySelectorAll(\'form.wpcf7-form input[name=\"_wpcf7_recaptcha_response\"]\'); for (let c = 0; c < e.length; c++) e[c].setAttribute(\"value\", t.detail.token) })) };grecaptcha.ready(addEventsAndStuff);"; } else { // console.log('cf7 older version'); cf7script.text = "!function(t,e){var n={execute:function(e){t.execute(\""+wpcf7_recaptcha.sitekey+"\",{action:e}).then(function(e){for(var t=document.getElementsByTagName(\"form\"),n=0;n<t.length;n++)for(var c=t[n].getElementsByTagName(\"input\"),a=0;a<c.length;a++){var o=c[a];if(\"g-recaptcha-response\"===o.getAttribute(\"name\")){o.setAttribute(\"value\",e);break}}})},executeOnHomepage:function(){n.execute(e.homepage)},executeOnContactform:function(){n.execute(e.contactform)}};t.ready(n.executeOnHomepage),document.addEventListener(\"change\",n.executeOnContactform,!1),document.addEventListener(\"wpcf7submit\",n.executeOnHomepage,!1)}(grecaptcha,{homepage:\"homepage\",contactform:\"contactform\"});"; } // Add Recaptcha Script head.appendChild(recaptchaScript); // Add CF7 Script AFTER Recaptcha. Timeout ensures the loading sequence. setTimeout(function() { head.appendChild(cf7script); }, 200); //Set flag to only load once captchaLoaded = true; }); }); })
There is an additional check for existence of grecaptcha API and deferred loading of events.
- This reply was modified 1 year, 7 months ago by GetWeb.cz.
Hi,
we were able to reproduce this issue using version 1.2.7 and ACF Pro 5.9.4. I think the problem is that all forms are loaded in the __construct method of ACFGravityformsField\Field class:
public function __construct() { $this->name = 'forms'; $this->label = __('Forms', 'gravityforms'); $this->category = __('Relational', 'acf'); $this->defaults = [ 'return_format' => 'form_object', 'multiple' => 0, 'allow_null' => 0 ]; // Get our notices up and running $this->notices = new Notices(); if (class_exists('GFAPI')) { $this->forms = GFAPI::get_forms(); } // Execute the parent constructor as well parent::__construct(); }
We fixed it temporarily by replacing the condition in __construct method:
if (class_exists('GFAPI') && is_admin()) { $this->forms = GFAPI::get_forms(); }
Ideally
$this->forms
should be replaced with method which loads forms dynamically when needed.Forum: Plugins
In reply to: [Advanced Custom Fields: Gravity Forms Add-on] Conflict with Coupons Add-OnHi,
we have hot-fixed this issue by editing the plugin code. I believe proper fix will be included in next version of this plugin if it is ever updated.
wp-content/plugins/acf-gravityforms-add-on/resources/Notices.php: replace the __construct method:
public function __construct() { // if (class_exists('GFAPI')) { // $this->forms = GFAPI::get_forms(); // } }