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($email, FILTER_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>