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');
?>
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>