add_action ('wp_ajax_ [nombre de acción]', mi función) problema

4

Estoy tratando de integrar ajax en wordpress usando las directrices de wp codex. En el PHP agregué:

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

El código ajax es:

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

y la función de PHP que debe ser llamada por ajax es:

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

La llamada ajax es exitosa (la "alerta" funciona), sin embargo, la función php "ajax_function" nunca se llama. Después de hacer un poco de depuración, me di cuenta de que aunque la acción llamada add_action ('wp_ajax_ establece un nuevo elemento en la matriz global $ wp_filter, cuando la correspondiente do_action se ejecuta dentro de admin-ajax.php, la matriz $ wp_filter ya no contiene ese elemento.

Por lo tanto, la función "ajax_function" se ignora. ¿Alguna idea de por qué no se llama a la función?

    
pregunta user1567 01.12.2010 - 12:58

2 respuestas

4

En mis proyectos lo hago así

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

Tal vez esta guía te ayude. enlace

    
respondido por el Horttcore 01.12.2010 - 13:27
1

Por favor, sigue el código:

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
}

y en tu llamada ajax haz esto:

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

en la llamada ajax llamarás a tu función sin prefix_ajax_ . Solo llama por lo que queda. En ese caso es add_myfunc . En la respuesta enviará done si todo sale bien. La otra respuesta será 0 o -1 .

Espero que ayude. Gracias.

    
respondido por el Sajidur Rahman 03.07.2016 - 18:09

Lea otras preguntas en las etiquetas