Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/11/2016, 15:08
Juanjo87
 
Fecha de Ingreso: enero-2016
Mensajes: 19
Antigüedad: 8 años, 10 meses
Puntos: 0
como validar reCaptcha en custom un form?

Muy buenas a todos.

Pues llevo todo el día intentando validar el recaptcha de google en wordpress.

Estoy creando un formulario de registro nuevo, para que los usuarios puedan registrase desde el frontend a través de ajax, y hasta aqui parece que todo bien.El Problema viene cuando le e metido el reCatchap, el cual funciona perfectamente pero, me falta validarlo a traves del servidor para que no se pueda enviar el formulario hasta que se maruqe el recaptcha.

esto es lo que tengo.

En el function:

Código PHP:
<?php 
    
function st_handle_registration(){
 
if( 
$_POST['action'] == 'register_action' ) {
 
$error '';
 
 
$uname trim$_POST['username'] );
 
$email trim$_POST['mail_id'] );
 
$pswrd $_POST['passwrd'];
 
$cptcha trim($_POST['captcha'] );
 
 
if( empty( 
$_POST['username'] ) )
 
$error .= '<p class="error">Introduce un nombre de usuario</p>';
  
 
 
if( empty( 
$_POST['mail_id'] ) )
 
$error .= '<p class="error">Introduce un email</p>';
 elseif( !
filter_var($emailFILTER_VALIDATE_EMAIL) )
 
$error .= '<p class="error">El email es incorrecto</p>';
 
if( empty( 
$_POST['passwrd'] ) )
 
$error .= '<p class="error">La contraseña no puede estar en blanco</p>';
  elseif (!
preg_match('/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/'$_POST['passwrd'])) 
  
$error .= '<p class="error">La contraseña requiere al menos una mayúscula, una minúscula, un número o carácter especial y mínimo 8 caracteres</p>';
 
   if( empty( 
$_POST['captcha'] ) )

 
$error .= '<p class="error">Introduce captcha</p>';
 
if( empty( 
$error ) ){
 
$status wp_create_user$uname$pswrd ,$email$cptcha );
 
if( 
is_wp_error($status) ){
 
$msg '';
 
 foreach( 
$status->errors as $key=>$val ){
 
 foreach( 
$val as $k=>$v ){
 
 
$msg '<p class="error">'.$v.'</p>';
 }
 }
 
echo 
$msg;
 
 }else{
 
$msg '<p class="success">Registro completado</p>';
 
 echo 
$msg;
 }
 
}
 else{
 
echo 
$error;
 }
 die(
1);
 }
}
add_action'wp_ajax_register_action''st_handle_registration' );
add_action'wp_ajax_nopriv_register_action''st_handle_registration' );


 
    
?>
    
    
<?php     
    
function st_ajaxurl(){ ?>
 
<script>
 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'?>';
 
</script>
 <?php 
}
add_action('wp_head','st_ajaxurl');

?>
como veis, estoy intentando validarlo de la misma forma que ls otros campo, (usuario,contraseña, email) pero lógicamente no me funciona, pues el recaptcha seria mas como un checkbox no un input tipo text.
Entonces mi pregunta es, como seria la forma de hacerlo?

Esto donde quiero que aparezca:
Código HTML:
<form method="post" name="st-register-form">
 
 <div class="form-label"><label for="st-username"></label></div>
 <div class="field"><input type="text" placeholder="Usuario" autocomplete="off" name="username" id="st-username" /></div>
 

 
<div class="form-label"><label for="st-psw"></label></div>
 <div class="field"><input type="password" placeholder="Contraseña"  name="password" id="st-psw" /></div>
 
 <div class="form-label"><label for="st-email"></label></div>
 <div class="field"><input type="text" placeholder="E-mail"  autocomplete="off" name="mail" id="st-email" /></div>

<div for="st-captcha" class="g-recaptcha" name="captcha" data-sitekey="CLAVE"></div>
 


<div class="frm-button"><input type="button" id="register-me" value="Register" /></div>
 <div id="error-message"></div>
  <div class="indicator">loading...</div>
</form>