Este API-ul REST WordPress instalat și activat într-o instalare standard WordPress 4.7?

10 dec. 2016, 19:07:58
Vizualizări: 50.7K
Voturi: 46

Tocmai am instalat WordPress 4.7. Una dintre mențiunile din anunț este că include un API REST.

Înțelegerea mea este:

  • Plugin-ul WordPress REST API nu mai este necesar, deoarece se presupune că a fost deja integrat în core în WordPress 4.7.
  • API-ul REST WordPress este activat în mod implicit

Cu toate acestea, observ că într-o instalare standard WordPress 4.7, niciunul dintre endpoint-uri nu pare să funcționeze (de exemplu http://examples.com/wp-json/wp/v2/posts).

Cum pot verifica dacă noul API REST este într-adevăr activat? Poate fi API-ul REST activat sau dezactivat din interfața standard WordPress, sau ar trebui să instalez un plugin terț pentru a face acest lucru?

6
Comentarii

Există tag-ul de descoperire în sursa paginii? <link rel='https://api.w.org/' href='https://example.com/wp-json/' /> Se pare că funcționează doar pe site-urile mele.

Rarst Rarst
10 dec. 2016 19:32:46

@Rarst, dacă execut grep -r "<link rel='https://api.w.org/'" . în directorul html, returnează o singură potrivire în fișierul ./wp-includes/rest-api.php cu acest text: echo "<link rel='https://api.w.org/' href='" . esc_url( $api_root ) . "' />\n";

Pep Pep
10 dec. 2016 20:13:08

Nu în codul sursă, ci în sursa HTML a unei pagini de pe site în browser.

Rarst Rarst
10 dec. 2016 20:16:23

@Rarst, da, văd <link href="http://example.com/wp-json/" rel="https://api.w.org/">

Pep Pep
10 dec. 2016 20:24:04

Ce obții dacă deschizi linkul în browser? Cu WP_DEBUG activat?

Rarst Rarst
10 dec. 2016 20:32:40

Primesc eroarea 404 pentru http://example.com/wp-json/ atât cu WP_DEBUG setat pe true cât și pe false.

Pep Pep
10 dec. 2016 20:42:31
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 4
10
32

4.7 are această funcționalitate activată implicit. Cea mai simplă metodă de a verifica dacă funcționează este să vizitezi adresa example.com/wp-json, unde ar trebui să vezi o listă cu endpoint-urile înregistrate.

Nu există o opțiune oficială pentru a dezactiva această funcționalitate, deoarece (cel puțin s-a discutat despre asta, dar nu sunt sigur dacă a fost inclusă în versiunea finală) unele funcționalități de bază depind de ea.

Dacă nu funcționează, primele lucruri de verificat sunt regulile din fișierul .htaccess și dacă există un director wp-json.

De asemenea, dacă URL-urile de tip /wp-json/wp/v2/posts nu funcționează pentru tine, dar /?rest_route=/wp/v2/posts funcționează, înseamnă că trebuie să activezi permalink-urile prietenoase în setări (sugestie oferită de Giles Butler în comentariile de mai jos).

10 dec. 2016 19:37:11
Comentarii

Nu am un director wp-json sub /var/www/html sau în subdirectoarele acestuia. Nu pare să am un fișier .htaccess (în afară de /var/www/html/wp-content/plugins/akismet/.htaccess), ar trebui să am unul?

Pep Pep
10 dec. 2016 19:54:38

@Pep, ce server web folosești? ai permalinkuri frumoase activate?

Mark Kaplun Mark Kaplun
10 dec. 2016 19:58:35

Apache. Am urmat exact pașii din aceste tutoriale pentru a instala Wordpress 4.7 pe AWS: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html și http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hosting-wordpress.html

Pep Pep
10 dec. 2016 20:04:51

nu sunt familiarizat cu AWS, dar dacă ai instalat un WordPress standard, ar fi trebuit să ai un fișier .htaccess în rădăcina instalării. Dacă nu, încearcă să mergi la setări > permalink-uri, asigură-te că nu ai selectat opțiunea "simplu", salvează, apoi verifică dacă s-a generat un fișier htaccess

Mark Kaplun Mark Kaplun
10 dec. 2016 20:12:36

aveam permalink-urile setate pe opțiunea "Simplu". Le-am schimbat la "Numele articolului". WordPress nu a putut salva fișierul .htaccess din cauza permisiunilor, așa că mi-a afișat codul. Am creat un fișier .htaccess folosind ssh cu acel conținut. Totuși, API-ul REST continuă să returneze eroarea 404, chiar și pentru http:example.com/wp-json/

Pep Pep
10 dec. 2016 20:29:57

nu ar trebui să primești 404. verifică dacă funcționează alte URL-uri prietenoase, cum ar fi articolul implicit. Dacă nu funcționează, înseamnă că încă ai o problemă cu fișierul htaccess

Mark Kaplun Mark Kaplun
10 dec. 2016 20:40:56

Se pare că Permalink nu funcționează deloc, nu doar endpoint-urile API. Tocmai am observat că pot accesa postările blogului doar cu setarea "Plain". Dacă schimb Permalinks la orice altă valoare, primesc avertismentul că ar trebui să modific fișierul .htaccess manual, ceea ce fac, dar apoi primesc eroare 404 chiar și pentru postările blogului. Cred că problema mea este cu Permalink în general, nu doar cu REST API. Poate că "fișierul .htaccess nu este scriabil" este un simptom al altei probleme.

Pep Pep
10 dec. 2016 20:59:55

ai mod_rewrite instalat și activat?

Mark Kaplun Mark Kaplun
10 dec. 2016 21:41:03

Am găsit în sfârșit problema. Pentru că nu știam că Permalink este necesar pentru ca REST API să funcționeze, am omis în timpul configurației inițiale pasul de a seta AllowOverride All în secțiunea <Directory "/var/www/html"> din /etc/httpd/conf/httpd.conf. De aceea ignorau modificările mele din .htaccess. Acum, cu un permalink diferit de Plain, endpoint-urile REST API funcționează.

Pep Pep
10 dec. 2016 21:53:15

Dacă utilizați permalink-uri ne-pretty, ar trebui să transmiteți ruta REST API ca parametru de query string. Ruta http://oursite.com/wp-json/ din exemplul de mai sus ar deveni astfel http://oursite.com/?rest_route=/ "https://developer.wordpress.org/rest-api/#routes-endpoints"

devasia2112 devasia2112
3 ian. 2019 18:47:52
Arată celelalte 5 comentarii
5
14

Am avut versiunea 4.7 și am crezut și eu că API-ul REST este dezactivat, dar am fost păcălit de URL. Pentru a vedea URL-ul corect, căutați o linie care arată cam așa:

link rel='https://api.w.org/' href='http://mysite?rest_route=/' />. Deci, folosirea http://mysite?rest_route=/ ca prefix mi-a rezolvat problema. De exemplu, pentru a obține postările este suficient să introduci: http://mysite?rest_route=/wp/json

Nu am găsit în documentație mențiunea că era necesar parametrul de query. Am fost singurul care a avut această problemă?

27 iun. 2017 06:52:28
Comentarii

A funcționat pentru mine pe WordPress 4.8.x. Nu știu de ce nu este documentat nicăieri.

Anirudha Anirudha
31 aug. 2017 14:35:14

Nu sunt singurul. Am găsit acest răspuns doar în comentariul tău după 10 minute de căutare. A trebuit să fac: www.example.com?rest_route=/wp/v2/posts

Eugene K Eugene K
7 feb. 2018 05:50:22

Cred că acest lucru se întâmplă când permalink-urile prietenoase nu sunt activate. Conform documentației...

"Pe site-urile fără permalink-uri prietenoase, ruta este adăugată în URL ca parametru rest_route. Pentru exemplul de mai sus, URL-ul complet ar fi atunci http://example.com/?rest_route=/wp/v2/posts/123"

Giles Butler Giles Butler
20 iul. 2018 00:36:44

iată-l -> https://developer.wordpress.org/rest-api/#routes-endpoints

devasia2112 devasia2112
3 ian. 2019 18:48:28

Foarte util dacă testezi folosind serverul PHP încorporat php -S localhost:1234.

Juan Javier Triff Cabanas Juan Javier Triff Cabanas
2 sept. 2020 05:22:30
0

Dacă API-ul REST nu funcționează din cutie sau după o instalare proaspătă și după ce ai introdus

domeniulmeu/wp-json/wp/v2/posts 

atunci va trebui pur și simplu să activezi "legături permanente" (permalinks) ca post_name, localizate în:

Panou WP->Setări->Legături permanente

Sau dacă nu dorești să activezi legăturile permanente, poți pur și simplu să introduci:

domeniulmeu?rest_route=/wp/v2/posts

Omule, mi-aș dori ca WordPress să își actualizeze manualul REST pentru a fi mai prietenos cu utilizatorul. Îmi plac vechile versiuni ale documentației :)

29 mai 2019 20:20:47
0

Văd că ai rezolvat problema, dar las aici și soluția mea, deoarece a funcționat și pentru mine. Am avut aceeași problemă când am actualizat de la beta15 la API-ul principal din WordPress 4.7. Se pare că problema era că aveam niște plugin-uri care foloseau o funcție învechită register_api_field, pe care am schimbat-o în register_rest_field conform acestei note din jurnalul de modificări:

SCHIMBARE MAJORĂ: Redenumirea funcției register_api_field() în register_rest_field().

Introduce o funcție register_api_field() pentru compatibilitate inversă, care apelează _doing_it_wrong(). Cu toate acestea, register_api_field() nu va fi niciodată inclusă în nucleul WordPress, așa că ar trebui să actualizați apelurile funcțiilor.

17 dec. 2016 04:30:18