add_action ('wp_ajax_ [nom de l'action]', ma fonction)

4

J'essaie d'intégrer ajax dans wordpress en utilisant les directives du codex wp. En PHP, j'ai ajouté:

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

Le code ajax est:

jQuery.ajax({url: MyAjax.ajaxurl, type: "POST",data: {action: 'myaction',postID : MyAjax.postID}, success: function(response) {
 alert('Got this from the server: ' + response);
}});

et la fonction PHP qui devrait être appelée par ajax est:

function ajax_function() {
...do something...
}
add_action('wp_ajax_myaction', 'ajax_function');
add_action('wp_ajax_admin_myaction', 'ajax_function');

L'appel ajax est réussi ("l'alerte" fonctionne), cependant, la fonction php "ajax_function" n'est jamais appelée. Après avoir effectué quelques opérations de débogage, je me suis rendu compte que même si l'appel à l'action add_action ('wp_ajax_ fixait un nouvel élément dans le tableau global $ wp_filter, lorsque l'opération do_action correspondante s'exécutait dans admin-ajax.php, le tableau $ wp_filter ne contenait plus cet élément.

Par conséquent, la fonction "ajax_function" est ignorée. Une idée de pourquoi la fonction n'est pas appelée?

    
posée user1567 01.12.2010 - 12:58

2 réponses

4

Dans mes projets, je le fais comme ça

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);
});

Peut-être que ce guide vous aidera. enlace

    
réponse donnée Horttcore 01.12.2010 - 13:27
1

Veuillez suivre le 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
}

et dans votre appel ajax, procédez comme suit:

jQuery.post(
    ajaxurl, 
    {
        'action': 'add_myfunc',
        'data':   'foobarid'
    }, 
    function(response){
        alert('The server responded: ' + response);
    }
);

dans l'appel ajax, vous appelez votre fonction sans prefix_ajax_ . Seul appel par il reste. Dans ce cas, c'est add_myfunc . Dans la réponse, il enverra done si tout se passe bien. Sinon, la réponse sera 0 ou -1 .

J'espère que ça va aider. Merci.

    
réponse donnée Sajidur Rahman 03.07.2016 - 18:09

Lire d'autres questions sur les étiquettes