web-dev-qa-db-fra.com

l'action wp_ajax n'est pas en cours d'exécution

J'écris un plugin. Je souhaite exécuter la méthode get_my_option lorsque quelqu'un appuie sur un bouton de la page des paramètres de mon plugin wordpress. L'appel ajax est effectué mais la méthode ne s'exécute jamais.

Dans la page, j'ai le code suivant:

<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");
?>

Le fichier synchandler.js ajouté:

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

Il y a une réponse mais c'est un 0, donc le javascript est bien ajouté, mais c'est à peu près tout. Je ne reçois aucune erreur dans mon journal en exécutant ceci. AjaxURL est ajouté dans la page (semble être une erreur commune).

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

Le bouton permettant de tout déclencher utilise onclick="my_js_function(); sur la balise HTML button-.

Aussi simple soit-il, la méthode get_my_option ne soit pas déclenchée par l'appel ajax. Qu'est-ce que je fais mal ici?

2
JennisDev

Où appelez-vous add_action ()? Si c'est à un endroit où vous publiez déjà du HTML, il est trop tard, et il s'agit probablement d'un endroit qui ne sera même pas examiné lors d'une requête AJAX.

Vous devez inclure ce code dans le fichier functions.php de votre thème ou le plus tôt possible dans un plugin.

4
Dave Ross

Vous aurez besoin de mettre votre code fonctionnel dans le plugin, en tant que fonction (cela dépend de votre façon de développer votre plugin.

Je préfère ajouter les appels add_action à admin_init. Il est également appelé avec 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' );

Je ne sais pas si c'est la meilleure pratique - c'est purement une préférence personnelle, pour éviter d'ajouter des points d'ancrage à chaque page chargée - Seulement pour les pages d'administration.

1
Frederik Spang