Jaka jest preferowana metoda pisania wtyczek obsługujących AJAX?


49

Zastanawiam się, jaka jest preferowana metoda obsługi wywołań AJAX. Czy należy używać tego samego pliku php wtyczki do przetwarzania POST, czy osobnego? Który jest czystszy lub bezpieczniejszy?

Odpowiedzi:


47

„bezpieczniejszym i czystszym” sposobem byłoby użycie admin-ajax.php, który jest dostarczany z wordpress i wp_ajaxhook, aby wywołać funkcję przetwarzania z pliku wtyczki i użyć wp-nonce do sprawdzenia integralności połączenia.

na przykład:

Twoje wywołanie JQuery ajax byłoby

<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>

następnie dodaj plik wtyczki

//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');

* jeśli chcesz, aby zalogowani użytkownicy i goście mieli dostęp do twojej funkcji przez ajax, dodaj oba zaczepy. * ACTION_NAME musi być zgodny z wartością akcji w Twoim POST ajax.

następnie w swojej funkcji upewnij się, że żądanie pochodzi z prawidłowego źródła

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

Mam nadzieję że to pomoże


1
To wdrożenie jest dobre tylko dla administratora? Co ze stroną użytkownika? Chcę ukryć / wp-admin / i zmienić adres URL administratora, więc żądanie ukrytego adresu URL nie będzie dobre
inferusvv
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.