私はあなたがrecaptchaの確認の後に動的にリンクを表示したいと思います。
recaptchaがパスした後にリンクをフェッチするajaxを作成できます。 はこれを行うために、私たちはWordPressのAJAX要求、wp-ajax使用します。
まず、あなたは、AJAXハンドラにサーバ側
add_action('wp_ajax_get_hidden_pdf_link', 'search_hidden_pdf_link');
// add this line to handle requests of non logged in users
add_action('wp_ajax_nopriv_get_hidden_pdf_link', 'search_hidden_pdf_link');
function search_hidden_pdf_link() {
// the response will be ajax response
header('Content-Type: application/json;charset=utf-8');
if(recaptcha_fails()){
// writing the failure response
echo json_encode(array('object' => 'error'));
wp_die();
}
$secret_pdf_link = generate_pdf_link();
// writing the succcess response
echo(json_encode(array('object' => 'success', 'link' => $secret_pdf_link)));
wp_die();
}
とフロントエンドに、あなたはAjaxフォームを作成し、リクエストを登録しますリンクを尋ねて表示します。
<a href="#" id="hidden-pdf-link">PDF Link</a>
<form id="pdf-link-form" action="<?php echo admin_url('wp-ajax.php'); ?>">
<!-- some input that tells the backend which pdf to fetch -->
<input type="hidden" name="public_pdf_id" value="<?php echo $pdf_id; ?>">
<!-- the ajax request identifier, it is the suffix inside the action -->
<input type="hidden" name="action" value="get_hidden_pdf_link">
<div class="g-recaptcha" data-sitekey="your_site_key"></div>
</form>
<script>
$(document).ready(function() {
$('#pdf-link-form').submit(function (event) {
event.preventDefault();
form = $(this);
$.ajax({
type: 'POST',
url: form.attr('action'),
data: form.serializeArray()
}).done(function (result) {
if(result.object == 'success'){
$('#hidden-pdf-link').attr('href', result.link);
form.remove();
alert('you can access the pdf')
} else {
alert('you are not allowed to access my pdf!!');
}
})
});
});
</script>
ありがとう、@motie。私はWPの初心者ですが、最初のコードブロックはテーマ内の 'functions.php'ファイルにあるべきですか? –
また、各リンクに異なるreCAPTCHAを適用している場合、これは面倒かもしれません。 –
@RudyM、関数にスクリプトを追加すると動作します。 recaptchaでは、すべてのリンクで同じものを使用できます。一度に複数のリンクを送信および表示するようにコードスニペットを適合させるだけで済みます。ハンドラには – motia