You need to use a request to send the response
up to his back-end, validate it and return one HTML with the value to be displayed.
The first step is to create a function AJAX
. Let’s use the function wp ajax.
In your file functions.php
<?php
/* Sua chave secreta do Google reCaptcha */
define('RECAPTCHA_SECRET', 'Your-Secret');
/*
* Adiciona ações para captura via AJAX
* Para acessa-las basta enviar uma requisição
* para https://www.YOUR-SITE.com/wp-admin/admin-ajax.php?aciton=nome-da-acao
*/
add_action('wp_ajax_carrega_post', 'carrega_post');
add_action('wp_ajax_nopriv_carrega_post', 'carrega_post');
/*
* Função responsável por verificar o response do capcha
* E liberar o conteúdo do POST
*/
function carrega_post() {
/* Cria um contexto do tipo HTTP POST com o valor do response */
$context = stream_context_create([
'http' => [
'method' => 'POST',
'content' => http_build_query([
'secret' => RECAPTCHA_SECRET,
'response' => filter_input(INPUT_POST, 'response', FILTER_SANITIZE_STRING),
])
]
]);
/* Faz uma requisição do tipo POST para o servidor da Google */
$result = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify", FILE_BINARY, $context));
/* Verifica se o valor do captcha é válido */
if ( $result->success ) {
/*
* Aqui você pode fazer sua regra de
* negócio para capturar o que
* você deseja
*/
$post = (new WP_Query( intval($_POST['postID']) ))->posts[0];
echo "Conteúdo do post \"{$post->post_title}\" liberado";
wp_die();
}
}
In your file single php. or similar (will depend on your structure), just put the captcha
and add a connection form. I will post with Fetch
and XMLHttpRequest
, will be at your discretion.
<?php
/**
* Template test
*
* @author Valdeir Psr < http://www.valdeirpsr.com.br >
* @version 1.0
*/
get_header(); ?>
<div id="g-recaptcha"></div>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback"></script>
<script>
function onloadCallback() {
/* Cria o captcha na DIV indicada */
grecaptcha.render('g-recaptcha', {
'sitekey' : 'Your-Code',
'callback' : 'verificaCaptcha'
});
}
/* Função responsável por receber o responseCode e fazer a requisição */
function verificaCaptcha(response) {
alert("Aguarde...");
/* Cria um formulário */
let form = new FormData();
form.append("response", response);
form.append("postID", "<?php the_ID(); ?>");
/* Cria uma requisição no formato POST com os dados acima */
let request = new Request("<?php echo home_url() ?>/wp-admin/admin-ajax.php?action=carrega_post", {
method: "POST",
body: form,
cache: "no-cache"
});
/* Envia a conexão e retorna os dados */
fetch(request)
.then( response => {
return response.text()
} )
.then( text => alert(text) );
}
</script>
<?php get_footer();
Example with XMLHttpRequest
:
/* Função responsável por receber o responseCode e fazer a requisição */
function verificaCaptcha(response) {
alert("Aguarde...");
/* Cria um formulário */
let form = new FormData();
form.append("response", response);
form.append("postID", "<?php the_ID(); ?>");
let xhr = new XMLHttpRequest();
xhr.addEventListener("load", result => {
alert( result.target.response )
})
xhr.open("POST", "<?php echo home_url() ?>/wp-admin/admin-ajax.php?action=carrega_post", true);
xhr.send(form);
}
A demonstration in the download part: https://sanet.cd/blogs/hakunamatata/va_flaix_fm_aniversario.2515094.html
– Matheus Vitor