Quelle est la méthode préférée pour écrire des plugins compatibles AJAX?


49

Je me demande quelle est la méthode préférée pour traiter les appels AJAX. Faut-il utiliser le même fichier plugin php pour traiter le POST ou un fichier séparé? Lequel est plus propre ou plus sûr?

Réponses:


47

la méthode "plus sûre et plus propre" consisterait à utiliser admin-ajax.php fourni avec wordpress et wp_ajaxhook pour appeler votre fonction de traitement à partir de votre fichier de plug-in et à utiliser wp-nonce pour vérifier l'intégrité de l'appel.

par exemple:

votre appel ajax JQuery serait

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

puis dans votre fichier plugin ajoutez

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

* Si vous souhaitez que les utilisateurs connectés et les invités accèdent à votre fonction via ajax, ajoutez les deux points d'ancrage. * ACTION_NAME doit correspondre à la valeur de l'action dans votre POST ajax.

alors, dans votre fonction, assurez-vous que la demande provient d'une source valide

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

J'espère que cela t'aides


1
Cette implémentation n'est valable que pour le côté administrateur? Qu'en est-il de l'utilisateur? Je souhaite masquer / wp-admin / et modifier l'URL d'administration. La demande d'URL masquée ne sera donc pas bonne
inferusvv
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.