J'essaie d'obtenir le menu de navigation de la réponse JSON en utilisant le plugin WP REST API v2 .
Il n'y a pas d'extension de plugin de menu de navigation pour l'API REST v2 , mais uniquement pour V1.
De Codex WordPress Post Types , j'ai appris que le menu de navigation est traité comme un type de publication.
De Rest API Doc , voici comment nous obtenons des publications d'un type:
GET http://demo.wp-api.org/wp-json/wp/v2/types/<type>
J'ai essayé de le faire comme ça:
URL : http://localhost/wptest/wp-json/wp/v2/types/nav_menu_item
J'ai reçu une erreur 403.
{"code":"rest_cannot_read_type","message":"Cannot view type.","data":{"status":403}}
le serveur a compris ma demande mais a refusé de donner les données.
Q: Comment puis-je résoudre ce problème?
la source
Réponses:
Il existe une extension de plug-in de menu de navigation pour l'API REST v2: https://wordpress.org/plugins/wp-api-menus/
la source
Comme je ne l'aime pas moi-même lorsque la première réponse est "Installer le plugin X", voici comment je l'ai résolu:
Les menus ne sont actuellement pas disponibles dans WP Rest. Donc, ce que vous devez faire est d' enregistrer votre propre point de terminaison personnalisé , puis d'appeler simplement cette route à partir de votre application qui en a besoin.
Donc, vous incluriez quelque chose comme ça (dans votre functions.php, plugin, n'importe où):
Pour l'exemple ci-dessus, vous accéderiez aux données de:
Vous pouvez utiliser la méthode ci-dessus pour créer les itinéraires que vous souhaitez pour obtenir tout type de données qui ne sont pas disponibles dans WP Rest. Aussi bien si vous devez traiter certaines données avant de les envoyer à votre application.
la source
get_menu()
c'est assez général.false
La réponse @Liren fonctionne bien. Cependant, peu de débutants peuvent ne pas être en mesure d'ajuster l'itinéraire. Voici le code qui fonctionne bien avec WordPress Rest API v2 avec une modification minimale.
Remplacez votre nom de menu uniquement dans la fonction wp_get_nav_menu_items () . Si le nom et le slug du menu ne fonctionnent pas (Return false), utilisez l'ID de menu (visible dans le tableau de bord lors de la modification de ce menu).
URL de l'itinéraire:
Plus de détails couverts dans Tutoriel: API WordPress Rest - Obtenir les éléments du menu de navigation
la source
Vous devez ajouter
'show_in_rest' => true,
lors de l'enregistrement du type de publication.Voir les détails ici http://v2.wp-api.org/extending/custom-content-types/
la source
register_post_type('nav_menu_item', array('show_in_rest' => true));
Je ne pense pas qu'un plugin devrait être utilisé pour ce genre de tâches. De plus, la réponse de hkc n'est pas si mauvaise, il n'a besoin que de plus d'explications pour que cela fonctionne avec le
nav_menu_item
type de message (celui utilisé pour les menus de navigation wp).Ce type de message est déjà enregistré et nous devons donc le modifier, cela se fait facilement en se connectant au
register_post_type_args
filtre. Ce filtre nous permet de modifier les arguments pour un type de message spécifique. Le code ci-dessous montre juste cela pour lenav_menu_item
type de message.Comme vous l'avez peut-être remarqué dans le code ci-dessus, le code fait un peu plus que simplement afficher le type de message dans le REST. Il modifie également le contrôleur REST Posts par défaut pour afficher une sortie quelque peu similaire dans le REST, comme décrit dans la réponse de Liren . Bien qu'à côté de cela, il fait aussi ce que font tous les contrôleurs REST de type post et vous donne ainsi plus de contrôle et de fonctionnalités. Considérez également cela comme une option plus stable car cela n'entrerait pas en conflit avec d'autres routes REST et enfin et surtout, il est également plus pratique de travailler avec.
la source
Je suis d'accord avec la réponse de @Lirens, mais les menus doivent être appelés par ID, pas par slug. En outre, la barre oblique avant le chemin de menu n'est pas nécessaire. Cela devient donc quelque chose de plus comme ceci:
Comme ça, ça a marché pour moi.
la source