• Как получить обработчик событий элемента?

    @arturfed Автор вопроса
    Вообще это на вордпрессе, и у стороннего плагина повешен обработчик именно так. Мне надо из другого плагина найти эти обработчики. Менять код стороннего плагина не хочется. Есть ли варианты как найти обработчики повешенные через document и функцию on?
  • Как получить обработчик событий элемента?

    @arturfed Автор вопроса
    Да, так работает, но мне нужно именно повесить через document, так как страница обновляется/изменяется динамически...
  • Как добавить google invisible recaptcha на checkout (woocommerce) страницу?

    @arturfed Автор вопроса
    Так же - хук не срабатывает, только теперь еще выдает ошибку "Sorry, your session has expired". Сама функция "process_checkout" из "class-wc-checkout.php" срабатывает (туда добавил лог функцию, чтоб проверить). То есть do_action( 'woocommerce_checkout_process' ) - выполняется а хук нет. Как так?

    Думал может неправильно форму отправляю и закоментировал последние 2 строки, оставил только:

    require_once($_SERVER['DOCUMENT_ROOT'] . '/logger.php');
    
    $logger = new logger($_SERVER['DOCUMENT_ROOT'].'/logs/checkout.html');
    $logger->ConsoleMsg('start log');
    
    function bh_wc_checkout_verify()
    {
    
        global $logger;
        $logger->ConsoleMsg('bh_wc_checkout_verify()');
    
      
    
    }
    
    
    add_action('woocommerce_checkout_process', 'bh_wc_checkout_verify');


    Тогда в логах видно, что функция process_checkout (class-wc-checkout.php) отрабатывает раньше загрузки моего плагина, то есть в этом случае понятно почему хук не срабатывает, но почему в первом случае не работает не пойму никак...
  • Как добавить google invisible recaptcha на checkout (woocommerce) страницу?

    @arturfed Автор вопроса
    Что там я должен увидеть? Не срабатывает у меня хук и все, хоть ты тресни. Вот код плагина (урезал его для простоты:
    require_once($_SERVER['DOCUMENT_ROOT'] . '/logger.php');
    
    $logger = new logger($_SERVER['DOCUMENT_ROOT'].'/logs/checkout.html');
    $logger->ConsoleMsg('start log');
    
    $options = get_option('bh_admin_options');
    
    $bh_captcha_count = 0;
    $site_key = $options['site_key'];
    
    function bh_wc_checkout_verify($data,$errors)
    {
    
        global $logger;
        $logger->ConsoleMsg('bh_wc_checkout_verify()');
    
      
    
    }
    
    function form_field()
    {
        global $bh_captcha_count;
    
        $bh_captcha_count++;
    
        echo '<div id="recaptcha' . $bh_captcha_count . '" class="bh-recaptcha"></div>';
    }
    
    function bh_enqueueScripts()
    {
        global $site_key;
    
        $inlineScript = "
    var renderInvisibleReCaptcha = function() {
    
    
        for (var i = 0; i < document.forms.length; ++i) {
            var form = document.forms[i];
            var holder = form.querySelector('.bh-recaptcha');
    
            if (null === holder)  continue;
    
    		holder.innerHTML = '';
    
             (function(frm){
    			var cf7SubmitElm = frm.querySelector('.wpcf7-submit');
                var holderId = grecaptcha.render(holder,{
                    'sitekey': '{$site_key}', 'size': 'invisible', 'badge' : 'bottomleft',
                    'callback' : function (recaptchaToken) {
    					if((null !== cf7SubmitElm) && (typeof jQuery != 'undefined')){jQuery(frm).submit();grecaptcha.reset(holderId);return;}
    					 frm.submit();
                    },
                    'expired-callback' : function(){grecaptcha.reset(holderId);}
                });
    
    			if(null !== cf7SubmitElm && (typeof jQuery != 'undefined') ){
    				jQuery(cf7SubmitElm).off('click').on('click', function(clickEvt){
    					clickEvt.preventDefault();
    					grecaptcha.execute(holderId);
    				});
    			}
    			else
    			{
    				frm.onsubmit = function (evt){evt.preventDefault();grecaptcha.execute(holderId);};
    			}
    
    
            })(form);
        }
    };
    ";
    
    
        $language = trim(pll_current_language());
    
        $lang = ($language) ? "?hl=$language" : "";
    
        $googleApiUrl = 'https://www.google.com/recaptcha/api.js?onload=renderInvisibleReCaptcha&render=explicit';
        empty($lang) ?: $googleApiUrl .= "&hl=$lang";
    
        wp_enqueue_script('invisible-recaptcha', $googleApiUrl, array(), null, true);
    
        wp_add_inline_script('invisible-recaptcha', $inlineScript, 'before');
    
    
        add_filter('script_loader_tag', function ($tag, $handle) {
            if ('invisible-recaptcha' !== $handle)
                return $tag;
    
            return str_replace(' src', ' async defer src', $tag);
        }, 99, 2);
    
    }
    
    add_action('woocommerce_after_checkout_validation', 'bh_wc_checkout_verify', 10, 2);
    add_action('woocommerce_checkout_after_order_review', 'form_field');
    add_action( 'wp_enqueue_scripts', 'bh_enqueueScripts' );


    В лог файле только 'start log', хук не срабатывет. Почему? Или вы про последнее решение править woocommece файлы?