J'ai un type de publication personnalisé auquel je veux accéder via jQuery - de préférence en utilisant JSON.
Alors, tout d'abord. créer une fonction qui retourne / echos json est assez facile, mais comment pourrais-je y accéder via jquery.
comme Mike l'écrit dans cette question , il - pour autant que je comprends - le place dans la racine wordpress. ce qui le rendrait accessible en utilisant le nom du fichier php - mais est-ce recommandé? Je préfère le mettre dans un dossier de plugins.
J'ai essayé de lire le codex wordpress, mais la façon dont les appels ajax sont traités me confond, car vous postez chaque appel ajax sur admin-ajax.php, même s'il ne s'agit pas d'une page d'administration?
Quelqu'un peut-il s'il vous plaît redresser les problèmes que j'ai?
/Orage
Éditer
Le problème que j'ai eu était de comprendre comment les appels ajax devaient être passés dans wordpress, ainsi que où placer votre code php et js pour faire / gérer les appels.
Dans l'autre question à laquelle j'ai lié, vous avez créé une fonction plaçant le fichier à la racine wp - je ne veux pas le faire. Mais j'ai maintenant appris à utiliser wp_ajax_ (nopriv _) [action] et je peux effectivement accéder au json que je crée. Le problème qui reste est où je dois placer le JS pour faire l'appel. Je veux 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, donc je dois faire écho en utilisant php.
echo admin_url('admin-ajax.php');
Donc, la question devient comment dois-je combiner ce php avec le javascript, et comment dois-je ensuite le mettre en file d'attente, car ce n'est pas un fichier ou un script.
Réponses:
Ajax Handler
Il est en effet un peu déroutant que le gestionnaire Ajax se trouve dans le
wp-admin/
répertoire, mais oui, vous pouvez et devez également l'utiliser pour les demandes non administratives. Vous enregistrez ensuite un gestionnaire pour lewp_ajax_nopriv_[action]
hook, au lieu de la normalewp_ajax_[action]
. Dans ce cas, il vous suffit de suivre les premières lignes deadmin-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 hook
wp_ajax_nopriv_get_custom_post_data
, et elle sera appelée si vous le demandezadmin-ajax.php
avec leaction
paramètre défini surget_custom_post_data
. Assurez-vous d'appeler vous-mêmedie()
à la fin de votre gestionnaire, sinon la valeur par défautdie(-1)
sera retournée. Et enregistrez également la version connectéewp_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 lenopriv
crochet.Configuration côté serveur en Javascript
L'astuce pour envoyer des données de configuration côté serveur (comme l'
admin-ajax.php
URL) estwp_localize_script()
. Vous lui passez 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 les chaînes localisables, mais vous pouvez également l'utiliser pour transmettre des données de configuration.storm_json_config
est le nom du handle (si vous souhaitez le retirer plus tard),storm_config
est le nom de l'objet Javascript qui contiendra vos données. Ainsi, votre fichier Javascript statique peut contenir une ligne commejQuery.post(storm_config.ajaxurl, ...)
.Voir aussi la réponse de bueltge à une question similaire .
Javascript statique depuis le répertoire du plugin
Pour charger un fichier Javascript statique à partir de votre propre répertoire de plugin, vous utilisez
wp_enqueue_script()
. Cela ressemblerait à quelque chose comme ceci:Où
storm_json
est à nouveau un nom de descripteur, puis vous donnez le lien vers le fichier, puis les dépendances (peut êtrenull
), puis un numéro de version qui sera ajouté après la demande de battre les caches du navigateur sur les mises à jour.la source
wp_localize_script()
, que vous pouvez utiliser pour envoyer des données de configuration du côté serveur au navigateur. (Petit conseil: si vous ajoutez@
à un nom d'utilisateur, cette personne recevra une notification de votre réponse.@Mike: I updated the title
Assurez-vous donc qu'il voit votre commentaire)