2017-02-14 9 views
0

私はWordPressサイトで働いています。基本的には、私はダウンロードリンク(PDF)を公開しており、ウェブクローラがこのコンテンツにアクセスするのを止めたいと考えています。これはGoogleのreCAPTCHAに私を導いた。これを単独で使用できますか?ユーザーが正しくクリック/回答すると、ページのリンクが有効になります。これを行うにはWordPressでページを編集するのに問題があります。ありがとう。reCAPTCHAが成功すると、リンクを有効にしますか?

-Rudy。

答えて

1

私はあなたが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> 
+0

ありがとう、@motie。私はWPの初心者ですが、最初のコードブロックはテーマ内の 'functions.php'ファイルにあるべきですか? –

+0

また、各リンクに異なるreCAPTCHAを適用している場合、これは面倒かもしれません。 –

+0

@RudyM、関数にスクリプトを追加すると動作します。 recaptchaでは、すべてのリンクで同じものを使用できます。一度に複数のリンクを送信および表示するようにコードスニペットを適合させるだけで済みます。ハンドラには – motia

関連する問題