Je l'ai tiré en utilisant la commande curl suivante: curl -H "Accept: application/json" -X POST http://localhost/wordpress/wp-admin/admin-ajax.php -d "action=vixo_wordpress_signon&data=banjometer" --trace -
Je ne sais pas trop comment faire pour l'accepter, mais bon ...
WordPress est nouveau pour moi et je ne parviens pas à faire fonctionner Ajax - mais j'ai également du mal à comprendre comment WordPress charge PHP.
J'ai un fichier plugin:
/usr/share/wordpress/wp-content/plugins/myplugin.php
Il contient le code suivant:
// set up the ajax calls
add_action('wp_ajax_my_ajax', 'my_ajax');
add_action('wp_ajax_nopriv_my_ajax', 'my_ajax');
function my_ajax () {
debug_log ("My ajax fired...");
echo "banjolalia...";
die ();
}
Je veux démontrer que l'ajax a tiré avec Curl:
curl -X POST http://localhost/wordpress/wp-admin/admin-ajax.php -d '{"action":"my_ajax","data":"banjometer"}' --trace -
(La page d'accueil est à http://localhost/wordpress
)
Je m'attends à voir curl return banjolalia
et une ligne apparaît dans le journal de débogage.
Ce que je vois, c'est que la fonction retourne 0
L'Ajax est autonome car j'écris du code à code d'accès unique et j'ai besoin du service enfant pour interroger WordPress et voir si l'utilisateur est connecté.
Parce que je suis nouveau sur WordPress/PHP, je n’ai pas un cycle de développement robuste.
J'ai essayé (d'essayer) d'obtenir le code à recharger en désactivant/activant le plugin sur la page Admin. Cela ne semble pas fonctionner. Je ne savais pas si mes modifications étaient en cours de chargement dans WordPress; j'ai donc effectivement allumé et éteint la lappie, mais l'Ajax n'a toujours pas été activé.
J'ai 2 plugins de débogage installés:
Les problèmes que j'ai du point de vue du développement sont les suivants:
Vous n'avez rien de spécifique à faire pour "charger" du code php modifié dans Wordpress. Tous les fichiers sont simplement chargés tels quels au moment de l'exécution (c'est-à-dire lorsque la requête HTTP est traitée par le serveur). Il vous suffit de vérifier que votre plugin est actif.
Votre commande curl est mal formée. Utilisez ceci à la place:
curl -X POST http://localhost/wordpress/wp-admin/admin-ajax.php -d action=my_ajax -d data=banjometer --trace -
Mais CURL n'est pas vraiment l'outil de débogage le plus simple à utiliser. Quand j'ai besoin d'un moyen rapide et facile d'exécuter du code PHP de débogage dans Wordpress, j'utilise le hook d'activation de plugin:
<?php
register_activation_hook(__FILE__, 'my_plugin_debug');
function my_plugin_debug() {
$log = 'banjometer';
die("OK, $log");
}
?>
Créez un nouveau plugin contenant uniquement ce code, puis essayez de l'activer dans le backend. Vous obtiendrez une erreur (en raison de l'instruction die
) afin que le plug-in ne soit pas activé, mais votre code sera exécuté et vous pourrez voir le journal dans le message d'erreur.
Je ne connais rien à CURL, mais si vous regardez admin-ajax.php, vous obtenez un 0 au début, car aucune action n'est définie, ou à la fin du fichier car il n'a pas pu trouver d'action correspondante. Peut-être que vous exécutez votre commande CURL trop tôt? C'est-à-dire avant que les callbacks ajax aient une chance d'être reconnus? Si vous êtes sur une installation locale, vous pouvez modifier les codes d'erreur dans admin-ajax.php pour au moins vous dire à quel moment cela a échoué. N'oubliez pas de le remettre ou vous arracherez vos cheveux plus tard. (Ai fait)
Je viens de remarquer les questions similaires dans l'encadré et je suppose que c'est la réponse: https://wordpress.stackexchange.com/a/70407/6477
Edit Le codex confirme que les fichiers du plugin sont exécutés avant le hook wp_ajax_
. Pourquoi ne pas essayer de lancer votre code ultérieurement?
function wpa82473(){
curl -X POST http://localhost/wordpress/wp-admin/admin-ajax.php -d '{"action":"my_ajax","data":"banjometer"}' --trace -
}
add_action('init', 'wpa82473');