Ich versuche, Ajax in WordPress mit den WP-Codex-Richtlinien zu integrieren. Im PHP habe ich hinzugefügt:
wp_enqueue_script ( 'my_ajax', ADMIN_URL . 'js/ajax.js','jquery','1.0.0' );
wp_localize_script( 'my_ajax', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
Der Ajax-Code lautet:
jQuery.ajax({url: MyAjax.ajaxurl, type: "POST",data: {action: 'myaction',postID : MyAjax.postID}, success: function(response) {
alert('Got this from the server: ' + response);
}});
und die PHP -Funktion, die von Ajax aufgerufen werden sollte, ist:
function ajax_function() {
...do something...
}
add_action('wp_ajax_myaction', 'ajax_function');
add_action('wp_ajax_admin_myaction', 'ajax_function');
Der Ajax-Aufruf ist erfolgreich (der "alert" funktioniert), die PHP-Funktion "ajax_function" wird jedoch nie aufgerufen. Nach einigem Debuggen wurde mir klar, dass das Array $ wp_filter dieses Element nicht mehr enthält, obwohl der Aktionsaufruf add_action ('wp_ajax_ ein neues Element im globalen Array $ wp_filter festlegt.
Daher wird die Funktion "ajax_function" ignoriert. Irgendeine Idee, warum die Funktion nicht aufgerufen wird?
In meinen Projekten mache ich das so
PHP
function foo() {
echo 'bar';
}
add_action('wp_ajax_foo', 'foo' ); // executed when logged in
add_action('wp_ajax_nopriv_foo', 'foo' ); // executed when logged out
Javascript
data = { action: 'foo', avalue: 'some value', 'anothervalue': 'another value' };
jQuery.post(ajaxurl, data, function(response){
alert(response);
});
Bitte folgen Sie dem Code:
add_action( 'wp_ajax_add_myfunc', 'prefix_ajax_add_myfunc' );
add_action( 'wp_ajax_nopriv_add_myfunc', 'prefix_ajax_add_myfunc' );
function prefix_ajax_add_myfunc() {
// Handle request then generate response using WP_Ajax_Response
}
und in deinem Ajax-Aufruf mache folgendes:
jQuery.post(
ajaxurl,
{
'action': 'add_myfunc',
'data': 'foobarid'
},
function(response){
alert('The server responded: ' + response);
}
);
im Ajax-Aufruf rufen Sie Ihre Funktion ohne prefix_ajax_
auf. Rufen Sie nur an, es ist noch übrig. In diesem Fall ist es add_myfunc
. In der Antwort wird done
gesendet, wenn alles richtig läuft. Anderenfalls lautet die Antwort 0
oder -1
.
Hoffe es wird helfen. Vielen Dank.