L'API Wordpress REST est-elle installée et activée dans une installation vanilla Wordpress 4.7?


29

Je viens d'installer Wordpress 4.7. L'une des mentions de l'annonce est qu'elle dispose d'une API REST.

Ma compréhension est:

  • Le plugin Wordpress REST API n'est plus nécessaire, car il est supposé qu'il a déjà été fusionné avec le noyau dans Wordpress 4.7.
  • L'API Wordpress REST est activée par défaut

Cependant, je remarque que dans une installation vanilla Wordpress 4.7, aucun des points de terminaison ne semble fonctionner (par exemple http://examples.com/wp-json/wp/v2/posts).

Comment savoir si la nouvelle API REST est réellement activée? L'API REST peut-elle être activée ou désactivée avec l'interface utilisateur WordPress vanille, ou dois-je installer un plugin tiers pour le faire?


1
Y a-t-il une balise de découverte dans la source de la page? <link rel='https://api.w.org/' href='https://example.com/wp-json/' />Semble juste travailler sur mes sites.
— Rarst

@Rarst, si je suis grep -r "<link rel='https://api.w.org/'" .dans le htmlrépertoire, il renvoie un hit dans le fichier ./wp-includes/rest-api.phpavec ce texte:echo "<link rel='https://api.w.org/' href='" . esc_url( $api_root ) . "' />\n";
— Pep

Pas dans votre code source , dans la source HTML d'une page de votre site dans le navigateur.
— Rarst

1
@Rarst, oui je vois<link href="http://example.com/wp-json/" rel="https://api.w.org/">
— Pep

Qu'est-ce que l'ouverture du lien dans le navigateur vous apporte? Avec WP_DEBUG activé?
— Rarst

Réponses:


21

4.7 l'a activé par défaut. Le moyen facile de vérifier si cela fonctionne consiste simplement à visiter l'url example.com/wp-json, et vous devriez y obtenir une liste des points finaux enregistrés.

Il n'y a pas d'option officielle pour le désactiver car (au moins il y a eu une discussion à ce sujet, je ne sais pas s'il est entré dans la version), certaines fonctionnalités de base en dépendent.

Les choses les plus évidentes à vérifier si cela ne fonctionne pas sont vos règles htaccess, et avez-vous un répertoire wp-json


Je n'ai pas de répertoire wp-json sous /var/www/htmlou ses sous-répertoires. Je ne semble pas avoir de .htaccessfichier (à part /var/www/html/wp-content/plugins/akismet/.htaccess, devrais-je en avoir un?
— Pep

@Pep, quel serveur Web utilisez-vous? avez-vous de jolis permaliens?
— Mark Kaplun

Apache. J'ai suivi exactement les étapes de ces didacticiels pour installer Wordpress 4.7 sur AWS: docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html et docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
— Pep

pas familier avec AWS mais si vous avez installé un wordpress vanilla, vous devriez avoir eu un .htaccess à la racine de votre installation. Si ce n'est pas le cas, allez dans réglage> permaliens, assurez-vous que vous n'êtes pas sur le réglage ordinaire, enregistrez, puis vérifiez si un htaccess a été généré
— Mark Kaplun

6
J'ai enfin trouvé le problème. Parce que je ne savais pas que Permalink serait nécessaire pour que l'API REST fonctionne, j'ai sauté lors de la configuration initiale l'étape à définir AllowOverride Alldans la <Directory "/var/www/html">section de /etc/httpd/conf/httpd.conf. C'est pourquoi il ignorait mes modifications .htaccess. Désormais, avec un permalien autre que PLain, les points de terminaison de l'API REST fonctionnent.
— Pep

11

J'avais 4,7 également pensé que l'API REST était désactivée, mais j'ai été trompé par l'URL. Pour voir l'URL correcte, recherchez une ligne ressemblant à ceci:

lien rel = ' https://api.w.org/' href = ' http://mysite?rest_route=/' />. Donc, en utilisant http: // mysite? Rest_route = / comme préfixe, j'ai résolu mon problème. Par exemple, pour récupérer les messages, il suffit de taper: http: // mysite? Rest_route = / wp / json

Je n'ai pas pu trouver sur la documentation que le paramètre de requête était nécessaire. Étais-je le seul?


A travaillé pour moi avec wordpress 4.8.x Je ne sais pas pourquoi cela n'est documenté nulle part.
— Anirudha

2
Pas le seul. Vous n'avez trouvé cette réponse dans votre commentaire qu'après 10 minutes de recherche. À faire:www.example.com?rest_route=/wp/v2/posts
— Eugene K

3
Je pense que cela se produit lorsque les jolis permaliens ne sont pas activés. From the docs ... "Sur les sites sans jolis permaliens, l'itinéraire est plutôt ajouté à l'URL en tant que paramètre rest_route. Pour l'exemple ci-dessus, l'URL complète serait alors example.com/?rest_route=/wp/v2/posts / 123 "
— Giles Butler


1

Je vois que vous avez résolu le problème, mais en laissant ma solution ici car cela a fonctionné pour moi aussi. J'ai eu ce même problème lors de la mise à jour de la bêta15 vers l'API principale dans wp 4.7 Il s'avère que le problème était que j'avais des plugins qui utilisaient une fonction obsolète register_api_field que j'ai changé en register_rest_field selon cette note dans le changelog:

RUPTURE DU CHANGEMENT: Renommez register_api_field () en register_rest_field ().

Introduit une fonction register_api_field () pour la compatibilité ascendante, qui appelle _doing_it_wrong (). Cependant, register_api_field () ne sera jamais engagé dans WordPress core, vous devez donc mettre à jour vos appels de fonction.


1

Si l'API REST ne fonctionne pas d'origine ou après une nouvelle installation et après avoir tapé

mydomain/wp-json/wp/v2/posts 

alors vous devrez simplement activer vos "permaliens" comme post_name situé:

Tableau de bord WP-> Paramètres-> Permaliens

Ou si vous ne souhaitez pas activer les permaliens, vous pouvez simplement taper:

mydomain?rest_route=/wp/v2/posts

Mec, je souhaite que WordPress mette à jour son manuel Rest pour qu'il soit plus convivial. J'aime l'ancienne version de docs :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.