add_action (problema 'wp_ajax_ [nome da ação]', myfunction)

4

Estou tentando integrar o ajax no wordpress usando as diretrizes do wp codex. No PHP eu adicionei:

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

O código do ajax é:

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

e a função PHP que deve ser chamada por ajax é:

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

A chamada ajax é bem sucedida (o "alerta" funciona), no entanto, a função php "ajax_function" nunca é chamada. Depois de fazer algumas depurações, percebi que, embora a chamada de ação add_action ('wp_ajax_ define um novo elemento na matriz global $ wp_filter, quando o do_action correspondente é executado dentro de admin-ajax.php, a matriz $ wp_filter não contém mais esse elemento. / p>

Portanto, a função "ajax_function" é ignorada. Alguma idéia de por que a função não é chamada?

    
por user1567 01.12.2010 / 12:58

2 respostas

4

Nos meus projetos eu faço assim

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

Talvez este guia ajude você. enlace

    
por Horttcore 01.12.2010 / 13:27
1

Por favor, siga o 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
}

e na sua chamada ajax faça isso:

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

na chamada do ajax, você chamará sua função sem prefix_ajax_ . Apenas chame pelo restante. Nesse caso, é add_myfunc . Na resposta, ele enviará done se tudo der certo. Outra resposta será 0 ou -1 .

Espero que ajude. Obrigado.

    
por Sajidur Rahman 03.07.2016 / 18:09