WP REST API "rest_no_route" când se încearcă actualizarea metadatelor

23 feb. 2017, 11:16:07
Vizualizări: 27.7K
Voturi: 4

Am lucrat cu WP REST API și toate comenzile GET (citire) extrag datele dorite atât din tipurile de postări încorporate cât și din cele personalizate (acest plugin a fost foarte util în acest sens). De asemenea, pot folosi POST pentru a crea postări cu informații de nivel superior atât pentru tipurile de postări încorporate cât și pentru cele personalizate. Toată autentificarea funcționează bine. Dar când încerc să actualizez metadatele postării, primesc următorul răspuns:

{
  "code": "rest_no_route",
  "message": "Nu s-a găsit nicio rută care să se potrivească cu URL-ul și metoda de solicitare",
  "data": {
    "status": 404
  }
}

Am găsit referințe în acest articol despre posibila nevoie de cod suplimentar pentru a face metadatele să funcționeze, și apoi am găsit acest plugin care A REZOLVAT problema postării metadatelor, dar doar pentru tipul de postări încorporat (nu funcționează cu tipurile mele de postări personalizate, care încă returnează exact aceeași eroare).

Toate cele de mai sus sunt confuze și complicate cred eu de capacitățile în schimbare și starea WP REST API-ului în sine.

Poate cineva să îmi indice o documentație clară pentru efectuarea unei actualizări a valorii meta pentru un tip de postare personalizat?

ACTUALIZARE:

OK, tocmai am descoperit că pluginul rest-api-meta-endpoints menționat mai sus VA PERMITE scrierea și pentru CPT-uri, dar prin /wp-json/wp/v2/posts/id/meta în loc de /wp-json/wp/v2/cptname/id/meta...este acesta comportamentul așteptat?

Având în vedere acest lucru, pentru orice postări pot doar să scriu date noi, nu pot încă să determin cum să actualizez metadatele existente, aveți idei?

3
Comentarii

Știe cineva dacă poți obține usermeta în acest fel? Mi-ar plăca ca utilizatorul să poată să-și actualizeze propriile date... ceva de genul wp-json/wp/v2/users/me/meta?key=name&value=Newname?

Armstrongest Armstrongest
5 dec. 2017 21:01:25

Soluție excelentă, dar unul dintre plugin-uri nu mai este întreținut. Cunoaște cineva o alternativă la https://wordpress.org/plugins/rest-api-meta-endpoints/ vă rog? Sau există deja o soluție mai bună acum? Am petrecut multe ore cercetând cum să actualizez câmpuri personalizate în WordPress și aceasta este singura soluție pe care am găsit-o.

Paul C Paul C
5 sept. 2019 18:41:40

Sincer, am scris asta acum atât de mult timp încât mă îndoiesc că aceleași limitări mai există în codul REST API din nucleu. Probabil că există soluții mai elegante astăzi fără să fie nevoie să recurgi la astfel de contorsionări.

Stephen Stephen
5 sept. 2019 22:03:47
Toate răspunsurile la întrebare 1
0
10

Iată ce am învățat despre WP REST API: Este un haos de cod nedocumentat și neterminat, cu promisiuni mari, dar cu o claritate frustrant de mică.

Cu toate acestea, am o soluție temporară pe care o voi posta aici, sperând că va fi utilă pentru alții într-o situație similară:

Am descoperit că pot actualiza un câmp meta DOAR dacă îi cunosc ID-ul și DACA folosesc posts în calea URL-ului (chiar și pentru postări personalizate). De exemplu (presupunând că ID-ul postării este 1622 și ID-ul meta este 11395), această cerere va funcționa:

POST https://example.com/wp-json/wp/v2/posts/1622/meta/11395?value=mykeyvalue

dar următoarele NU vor funcționa (în diverse moduri):

POST https://example.com/wp-json/wp/v2/posts/1622/meta?key=mykeyname&value=mykeyvalue (va ADAUGA un câmp nou, dar nu va edita unul existent)

POST https://example.com/wp-json/wp/v2/posts/1622/?key=mykeyname&value=mykeyvalue (404)

POST https://example.com/wp-json/wp/v2/my-cpt/1622/meta?key=mykeyname&value=mykeyvalue (404)

POST https://example.com/wp-json/wp/v2/my-cpt/1622/meta/11395?value=mykeyvalue (404)

De asemenea, am descoperit că pot obține TOATE câmpurile meta efectuând o cerere de tip:

GET https://example.com/wp-json/wp/v2/posts/1622/meta/

Așadar, presupun că pot face totul să funcționeze în forma actuală prin:

  1. GET https://example.com/wp-json/wp/v2/posts/1622/meta/

  2. filtrând rezultatul de mai sus pentru a obține ID-ul meta pe care vreau să îl modific

  3. POST https://example.com/wp-json/wp/v2/posts/1622/meta/11395?value=mykeyvalue

Dacă cineva are ceva de adăugat sau orice alte sugestii, sunt tot urechi. Altfel, presupun că aceasta este "soluția" mea.

Și vă rog să notați condițiile preliminare pentru ca acest lucru să funcționeze:

  1. Acest plugin configurat pentru a expune tipurile de postări și câmpurile meta
  2. Acest plugin pentru a activa endpoint-urile meta.
  3. Ceea ce nu am menționat mai sus a fost autentificarea, deoarece este în afara domeniului acestei discuții, dar în funcție de setările dumneavoastră, s-ar putea să fie necesară autentificarea înainte de a utiliza API-ul, așa cum este cazul în configurația mea (folosind Oauth și token-uri care ar fi adăugate în mod normal acestor URL-uri).
27 feb. 2017 16:48:16