Подтверждение формы регистрации пользователя WooCommerce с помощью Google reCaptcha
Я использую следующий код в functions.php, чтобы проверить отправку формы с Google ReCaptcha
function adv_validate_re_captcha_field( $username, $email, $wpErrors )
{
$remoteIP = $_SERVER['REMOTE_ADDR'];
$recaptchaResponse = $_POST['g-recaptcha-response'];
$response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', [
'body' => [
'secret' => '#####################',
'response' => $recaptchaResponse,
'remoteip' => $remoteIP
]
] );
$response_code = wp_remote_retrieve_response_code( $response );
$response_body = wp_remote_retrieve_body( $response );
if ( $response_code == 200 )
{
$result = json_decode( $response_body, true );
if ( ! $result['success'] )
{
$wpErrors->add( 'recaptcha', __( 'Error message', 'woocommerce' ) );
}
}
}
add_action( 'woocommerce_register_post', 'adv_validate_re_captcha_field', 10, 3 );
Работает просто отлично. Проблема в том, что я хочу проверить форму только на одной из страниц, где форма отображается. Например, он используется в файле woocommerce / myaccount / form-login.php, где reCaptcha отображается со следующим кодом:
<script src='https://www.google.com/recaptcha/api.js'></script>
<div class="g-recaptcha" data-sitekey="###"></div>
Я не хочу проверять форму на любой другой странице.
1 ответ
Перейдите в wp-content -> plugins -> woocommerce-> templates -> папку myaccount и скопируйте файл form-login.php в "you-child-theme-folder" -> woocommerce -> myaccount
Теперь вы можете редактировать этот шаблон, откройте файл form-login.php и поместите эти две строки ниже, где вы хотите, чтобы капча отображалась
<script src='https://www.google.com/recaptcha/api.js'></script>
<div class="g-recaptcha" data-sitekey="###"></div>