2017-02-14 3 views
0

Я работаю над сайтом WordPress. В основном я публикую ссылки для скачивания (PDF) и хотел бы, чтобы веб-искатели не обращались к этому контенту. Это привело меня к reCAPTCHA Google. Могу ли я использовать это в одиночку, так что, когда пользователь щелкает/отвечает правильно, ссылки на странице будут активированы? У меня возникли проблемы с редактированием страницы в WordPress для этого. Благодарю.Активировать ссылку на успех reCAPTCHA?

-Rudy.

ответ

1

Я понимаю, что вы хотите динамически показывать ссылку после проверки recaptcha.

Вы можете создать ajax, который извлекает ссылку после проверки перехватчиков recaptcha. Для этого мы будем использовать запросы AJAX в WordPress, 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(); 
} 

и на переднем конце, вы создаете форму АЯКС, который запрашивает и отображает ссылку.

<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