web-dev-qa-db-fra.com

Problèmes WordPress Ajax

Mettre à jour

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 ...

Question originale

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:

  • Barre de débogage
  • Console de débogage

Les problèmes que j'ai du point de vue du développement sont les suivants:

  • comment puis-je utiliser la console PHP pour vérifier quel code est chargé/forcer un rechargement?
  • comment puis-je utiliser la console PHP pour voir quelles actions sont enregistrées sur quels hooks?
1
Gordon Guthrie

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.

2
Fabien Quatravaux

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