Qual è il metodo preferito per scrivere plugin abilitati per AJAX?


49

Mi chiedo quale sia il metodo preferito per gestire le chiamate AJAX. Si dovrebbe usare lo stesso file php plugin per elaborare il POST o uno separato? Qual è più pulito o più sicuro?

Risposte:


47

il modo "più sicuro e più pulito" sarebbe usare admin-ajax.php che viene fornito con wordpress e wp_ajaxhook per chiamare la tua funzione di elaborazione dal tuo file plugin e usare wp-nonce per verificare l'integrità della chiamata.

per esempio:

la tua chiamata ajax JQuery sarebbe

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

quindi nel tuo file plugin aggiungi

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

* se desideri che gli utenti e gli ospiti registrati accedano alla tua funzione tramite Ajax, aggiungi entrambi i ganci. * ACTION_NAME deve corrispondere al valore dell'azione nel tuo POST ajax.

quindi nella tua funzione assicurati solo che la richiesta provenga da una fonte valida

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

Spero che sia di aiuto


1
Questa implementazione è valida solo per l'amministrazione? Che dire del lato utente? Voglio nascondere / wp-admin / e modificare l'URL
dell'amministratore
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.