WP REST API "rest_no_route" durante l'aggiornamento dei meta
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?
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:
GET https://example.com/wp-json/wp/v2/posts/1622/meta/
filtrare il risultato sopra per ottenere l'id del meta che voglio modificare
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:
- Questo plugin configurato per esporre i tuoi post type e meta
- Questo plugin per abilitare gli endpoint meta.
- 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).
