WP REST API "rest_no_route" durante l'aggiornamento dei meta

23 feb 2017, 11:16:07
Visualizzazioni: 27.7K
Voti: 4

Ho lavorato con la WP REST API e tutti i comandi GET (lettura) estraggono i dati che voglio sia dai tipi di post integrati che personalizzati (questo plugin è stato provvidenziale per aiutare). Posso anche eseguire POST per creare post con informazioni di primo livello sia per i tipi di post integrati che personalizzati. Tutta la mia autenticazione funziona correttamente. Ma quando provo ad aggiornare i meta dei post, ricevo la seguente risposta:

{
  "code": "rest_no_route",
  "message": "Nessun percorso trovato che corrisponda all'URL e al metodo di richiesta",
  "data": {
    "status": 404
  }
}

Ho trovato riferimento in questo articolo sulla potenziale necessità di codice aggiuntivo per far funzionare i meta, e poi ho trovato questo plugin che HA risolto il problema del posting dei meta, ma solo per il tipo di post integrato (non funziona con i miei tipi di post personalizzati, che continuano a restituire esattamente lo stesso errore).

Tutto quanto sopra è confuso e aggravato, penso, dalle capacità mutevoli e dallo stato della WP REST API stessa.

Qualcuno può indicarmi una documentazione chiara per eseguire un aggiornamento del valore meta su un tipo di post personalizzato?

AGGIORNAMENTO:

ok ho appena scoperto che il plugin rest-api-meta-endpoints menzionato sopra PERMETTERÀ la scrittura anche nei CPT, ma tramite /wp-json/wp/v2/posts/id/meta invece di /wp-json/wp/v2/cptname/id/meta... questo è il comportamento previsto?

Detto questo, per qualsiasi post posso solo scrivere nuovi dati, non riesco ancora a capire come aggiornare i meta esistenti, qualche idea?

3
Commenti

Qualcuno sa se è possibile ottenere i metadati utente in questo modo? Mi piacerebbe che l'utente potesse aggiornare i propri dati... qualcosa come wp-json/wp/v2/users/me/meta?key=name&value=Newname?

Armstrongest Armstrongest
5 dic 2017 21:01:25

Ottima soluzione ma uno dei plugin non è più mantenuto. Qualcuno conosce un'alternativa a https://wordpress.org/plugins/rest-api-meta-endpoints/ per favore? O esiste già una soluzione migliore ora? Ho passato molte ore a ricercare come aggiornare i campi personalizzati in WordPress e questa è l'unica soluzione che ho trovato.

Paul C Paul C
5 set 2019 18:41:40

Ad essere sincero, ho scritto questo così tanto tempo fa che dubito che le stesse limitazioni esistano ancora nel codice dell'API REST di WordPress. Probabilmente oggi esistono soluzioni più pulite senza la necessità di fare tali contorsioni.

Stephen Stephen
5 set 2019 22:03:47
Tutte le risposte alla domanda 1
0
10

Ecco cosa ho imparato sull'API REST di WP: è un miscuglio di codice non documentato e incompleto, con grande potenziale ma una frustrante mancanza di chiarezza.

Detto questo, ho trovato una soluzione alternativa che pubblico qui, sperando possa essere utile ad altri nella mia stessa situazione:

Ho scoperto che posso aggiornare un campo meta SE ho il suo id e SE uso posts nel mio percorso (anche per i CPT). Quindi, ad esempio (supponendo che l'id del mio post sia 1622 e l'id del meta sia 11395), questa query funzionerà:

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

ma queste invece NON funzioneranno (in vari modi):

POST https://example.com/wp-json/wp/v2/posts/1622/meta?key=mykeyname&value=mykeyvalue (aggiungerà un nuovo meta ma non modificherà quello esistente)

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)

Ho anche capito che posso ottenere TUTTI i meta eseguendo una query come questa:

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

Quindi immagino che, mettendo tutto insieme, potrei far funzionare tutto così nella forma attuale:

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

  2. filtrare il risultato sopra per ottenere l'id del meta che voglio modificare

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

Se qualcuno ha qualcosa da aggiungere o qualsiasi pensiero su altre possibili direzioni, sono tutto orecchi. Altrimenti, immagino che questa sia la mia "soluzione".

E per favore nota i prerequisiti necessari anche solo per far funzionare questo approccio:

  1. Questo plugin configurato per esporre i tuoi post type e meta
  2. Questo plugin per abilitare gli endpoint meta.
  3. Quello che non ho incluso sopra è qualsiasi menzione all'autenticazione, poiché è fuori dallo scopo di questa discussione, ma a seconda delle tue impostazioni, potresti aver bisogno di autenticarti prima di usare l'API, come nel mio caso (uso OAuth e token che normalmente verrebbero aggiunti a questi URL).
27 feb 2017 16:48:16