在reCAPTCHA成功后激活链接?

时间:2017-02-14 18:47:42

标签: wordpress recaptcha

我正在使用WordPress网站。基本上,我发布下载链接(PDF),并希望阻止网页抓取工具访问此内容。这让我想到了Google的reCAPTCHA。我可以单独使用它,以便当用户正确点击/回答时,页面上的链接将被激活吗?我在WordPress中编辑页面时遇到了问题。感谢。

-Rudy。

1 个答案:

答案 0 :(得分:1)

我知道你想在重新验证之后动态显示链接。

您可以创建一个ajax,用于在recaptcha验证通过后获取链接。 为此,我们将使用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>