wp_ajax la acción no se está ejecutando

2

Estoy escribiendo un plugin. Quiero ejecutar el método get_my_option cuando alguien presiona un botón en la página de configuración de mi complemento de wordpress. La llamada ajax se realiza pero el método nunca se ejecuta.

En la página tengo el siguiente código:

<div class="wrap">
<input type="button" value="test" onclick="my_js_function();"/>
</div>
<?php
wp_enqueue_script( 'function', plugins_url( '/js/synchandler.js',__FILE__),         array('jquery'));
wp_localize_script( 'function', 'my_ajax_script', array( 'ajaxurl' => admin_url(  'admin-ajax.php' ) ) );


function get_my_option()
{
    //do something
    die();
}

add_action("wp_ajax_nopriv_get_my_option", "get_my_option");
add_action("wp_ajax_get_my_option", "get_my_option");
?>

El archivo synchandler.js agregado:

function my_js_function() 
{
    jQuery.ajax({
    url: my_ajax_script.ajaxurl,
    type: 'POST',
    data: ({ action: 'get_my_option', affiliate: 'daisycon' }),
    success: function (response) {
        console.log("got this: " + response);
        }
    });
}

Hay una respuesta, pero es un 0, así que el javascript se agrega muy bien, pero eso es todo. No obtengo errores en mi registro ejecutando esto. AjaxURL se agrega a la página (parece ser un error común).

/* <![CDATA[ */
var my_ajax_script = {"ajaxurl":"http:\/\/mywebsite.net\/wp-admin\/admin-ajax.php"};
/* ]]> */

El botón para activarlo utiliza onclick="my_js_function(); en el HTML button -tag.

Tan fácil como es, el método get_my_option no se activa con la llamada ajax. ¿Qué estoy haciendo mal aquí?

    
pregunta JennisDev 22.04.2014 - 12:31

2 respuestas

3

¿A dónde llamas add_action ()? Si está en un lugar donde ya está generando HTML, es demasiado tarde, y probablemente sea un lugar que ni siquiera se verá durante una solicitud AJAX.

Debes incluir ese código en el archivo functions.php de tu tema, o lo antes posible en un complemento.

    
respondido por el Dave Ross 22.04.2014 - 16:07
1

Necesitará poner su código funcional en el complemento, como una función (esto depende de su forma de desarrollar su complemento.

Prefiero agregar las llamadas add_action a admin_init - También se llama con admin-ajax.php.

wp_enqueue_script( 'function', plugins_url( '/js/synchandler.js',__FILE__),         array('jquery'));
wp_localize_script( 'function', 'my_ajax_script', array( 'ajaxurl' => admin_url(  'admin-ajax.php' ) ) );


function get_my_option()
{
    //do something
    die();
}
function add_ajax_actions() {
    add_action("wp_ajax_nopriv_get_my_option", "get_my_option");
    add_action("wp_ajax_get_my_option", "get_my_option");
}
add_action( 'admin_init', 'add_ajax_actions' );

No sé si esta es la mejor práctica: es una preferencia personal, para evitar agregar enlaces a cada página cargada, solo a las páginas de administración.

    
respondido por el Frederik Spang 22.04.2014 - 18:30

Lea otras preguntas en las etiquetas