Was ist die bevorzugte Methode zum Schreiben von AJAX-fähigen Plugins?

49

Ich frage mich, was die bevorzugte Methode für den Umgang mit AJAX-Aufrufen ist. Sollte man die gleiche Plugin-PHP-Datei verwenden, um den POST zu verarbeiten, oder eine separate? Was ist sauberer oder sicherer?

James
quelle

Antworten:

47

Der "sicherere und sauberere" Weg wäre, admin-ajax.php zu verwenden, das mit WordPress und wp_ajaxHook geliefert wird, um Ihre Verarbeitungsfunktion aus Ihrer Plugin-Datei aufzurufen und wp-nonce zu verwenden, um die Integrität des Aufrufs zu überprüfen.

zum Beispiel:

Ihr Ajax JQuery-Aufruf wäre

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

dann in deine plugin datei hinzufügen

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

* Wenn Sie möchten, dass angemeldete Benutzer und Gäste über Ajax auf Ihre Funktion zugreifen können, fügen Sie beide Hooks hinzu. * ACTION_NAME muss mit dem Aktionswert in Ihrem Ajax-POST übereinstimmen.

Stellen Sie dann in Ihrer Funktion sicher, dass die Anforderung von einer gültigen Quelle stammt

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

Hoffe das hilft

Bainternet
quelle
1
Diese Implementierung ist nur für Administratoren geeignet? Was ist mit der Benutzerseite? Ich möchte / wp-admin / verstecken und die Admin-URL ändern, daher ist die Anfrage nach einer versteckten URL nicht gut
inferusvv