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?

Dynamisme
la source
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

Mark Kaplun
la source
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?

Edward
la source
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.

tir ami
la source
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 :)

samjco
la source