Який кращий спосіб запису плагінів з підтримкою AJAX?


49

Мені цікаво, який кращий метод стосується дзвінків AJAX. Чи слід використовувати один і той же PHP-файл плагіну для обробки POST або окремого? Що чистіше чи безпечніше?

Відповіді:


47

"безпечнішим і чистішим" способом буде використання адмін-ajax.php, який постачається з wordpress та wp_ajaxгаком, для виклику вашої функції обробки з вашого файла плагіна та використання wp-nonce для перевірки цілісності виклику.

наприклад:

ваш дзвінок Ajax JQuery був би

<script type="text/javascript" >
jQuery(document).ready(function($) {

    var data = {
        action: 'ACTION_NAME',
            Whatever: '1234',
            _ajax_nonce: '<?php echo wp_create_nonce( 'my_ajax_nonce' ); ?>'

    };

    // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
    // If you need it on a public facing page, uncomment the following line:
    // var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    jQuery.post(ajaxurl, data, function(response) {
        alert('Got this from the server: ' + response);
    });
});
</script>

потім додайте у свій файл плагіна додавання

//if you want only logged in users to access this function use this hook
add_action('wp_ajax_ACTION_NAME', 'my_AJAX_processing_function');

//if you want none logged in users to access this function use this hook
add_action('wp_ajax_nopriv_ACTION_NAME', 'my_AJAX_processing_function');

* якщо ви хочете, щоб користувачі та гості отримували доступ до вашої функції через ajax, тоді додайте обидві гачки. * ACTION_NAME має відповідати значенню дії у вашій пошті ajax.

то у своїй функції просто переконайтеся, що запит надходив із дійсного джерела

function my_AJAX_processing_function(){
   check_ajax_referer('my_ajax_nonce');
   //do stuff here...
}

Сподіваюся, що це допомагає


1
Ця реалізація корисна лише для адміністратора? Що з користувачем? Я хочу приховати / wp-admin / та змінити адміністраторську URL-адресу, тому запит на приховану URL-адресу буде непоганим
inferusvv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.