Comment gérer les appels ajax et JSON dans wordpress

12

J'ai un type de publication personnalisé auquel je souhaite accéder via jQuery - de préférence à l'aide de JSON.

Alors premières choses d'abord. créer une fonction qui retourne / echos json est assez simple, mais comment y accéder par jquery.

comme l'écrit Mike dans cette question

J'ai essayé de lire le codex wordpress, mais la façon dont les appels ajax sont gérés me laisse perplexe, car vous publiez chaque appel ajax sur admin-ajax.php, même s'il ne s'agit pas d'une page d'administrateur?

Quelqu'un peut-il résoudre les problèmes que je rencontre?

/ tempête

modifier

Le problème que j’avais était de comprendre comment les appels ajax devaient être effectués dans wordpress, ainsi que l’endroit où placer votre code php et js pour faire / gérer les appels.

Dans l’autre question à laquelle je me suis associé, vous avez créé une fonction qui place le fichier à la racine de wp - je ne veux pas le faire. Mais j'ai maintenant appris à utiliser wp_ajax_ (nopriv _) [action] et je peux accéder efficacement au json que je crée. Le problème qui reste est de savoir où je devrais placer le JS pour passer l’appel. Je souhaite le placer dans le fichier js des plugins, mais comme cela doit être présenté dans une page, pas sur le site d'administration, ajaxurl n'est pas défini, je dois donc utiliser l'écho avec php.

echo admin_url('admin-ajax.php');

La question est donc de savoir comment dois-je combiner ce php avec le javascript, et comment puis-je le mettre en file d'attente, vu que ce n'est ni un fichier ni un script.

    
posée Storm 03.11.2010 - 21:42

1 réponse

17

Gestionnaire Ajax

Il est en effet un peu déroutant que le gestionnaire Ajax se trouve dans le répertoire wp-admin/ , mais oui, vous pouvez et devriez l’utiliser également pour les requêtes non-admin. Vous enregistrez ensuite un gestionnaire pour le wp_ajax_nopriv_[action] hook, au lieu du wp_ajax_[action] normal. Dans ce cas, il vous suffit de suivre les premières lignes de admin-ajax.php , car une demande effectuée par un utilisateur non connecté laissera déjà la page autour de la ligne 50.

Enregistrez donc une fonction pour le crochet wp_ajax_nopriv_get_custom_post_data . Elle sera appelée si vous demandez admin-ajax.php avec le paramètre action défini sur get_custom_post_data . Veillez à appeler vous-même die() à la fin de votre gestionnaire, sinon la valeur par défaut die(-1) sera renvoyée. Et aussi enregistrer la version connectée, wp_ajax_get_custom_post_data (à la même fonction de gestionnaire, pas de problème), car si vous êtes connecté à votre site, vous ne toucherez pas le crochet nopriv .

Config côté serveur vers Javascript

L'astuce pour envoyer des données de configuration côté serveur (comme le admin-ajax.php url) est wp_localize_script() . Vous lui transmettez un tableau de clés et de valeurs qui seront incluses en haut de la page. Cela a probablement été créé à l'origine uniquement pour des chaînes localisables, mais vous pouvez également l'utiliser pour transmettre des données de configuration.

wp_localize_script('storm_json_config', 'storm_config', array(
    'ajaxurl' => admin_url('admin-ajax.php'),
));

storm_json_config est le nom du descripteur (si vous souhaitez le retirer plus tard), storm_config est le nom de l'objet Javascript qui contiendra vos données. Donc, votre fichier Javascript statique peut contenir une ligne comme jQuery.post(storm_config.ajaxurl, ...) .

Voir aussi La réponse de bueltge à une question similaire .

Javascript statique du répertoire du plugin

Pour charger un fichier Javascript statique à partir de votre propre répertoire de plug-in, utilisez wp_enqueue_script() . Cela ressemblerait à quelque chose comme ça:

wp_enqueue_script('storm_json', plugin_dir_url(__FILE__) . 'js/json.js', array('jquery'), '20101105');

storm_json est encore un nom de descripteur, vous donnez le lien vers le fichier, puis les dépendances (peut-être null ), puis un numéro de version qui sera ajouté après la demande de battement des caches de navigateur. mises à jour.

    
réponse donnée Jan Fabry 03.11.2010 - 22:06

Lire d'autres questions sur les étiquettes