L'API REST di WordPress è installata e abilitata in una installazione vanilla di WordPress 4.7?
Ho appena installato WordPress 4.7. Uno dei punti menzionati nell'annuncio è che include un'API REST.
La mia comprensione è:
- Il plugin WordPress REST API non è più necessario, perché si presume sia stato già integrato nel core di WordPress 4.7.
- L'API REST di WordPress è abilitata per impostazione predefinita
Tuttavia, noto che in un'installazione vanilla di WordPress 4.7, nessuno degli endpoint sembra funzionare (per esempio http://examples.com/wp-json/wp/v2/posts
).
Come posso verificare se la nuova API REST è realmente attivata? L'API REST può essere abilitata o disabilitata attraverso l'interfaccia utente vanilla di WordPress, o devo installare un plugin di terze parti per farlo?

4.7 lo ha abilitato di default. Il modo più semplice per verificare se funziona è visitare l'URL example.com/wp-json, dove dovresti ottenere un elenco degli endpoint registrati.
Non esiste un'opzione ufficiale per disabilitarlo (almeno si è parlato di questo, non sono sicuro se sia stato incluso nella release), poiché alcune funzionalità del core dipendono da esso.
Le cose più ovvie da verificare se non funziona sono le regole del tuo file htaccess e se hai una directory wp-json.
Inoltre, se gli URL di tipo /wp-json/wp/v2/posts
non funzionano per te, ma /?rest_route=/wp/v2/posts
sì, significa che devi abilitare i permalink "pretty" nelle impostazioni (suggerito da Giles Butler nei commenti qui sotto).

Non ho una directory wp-json sotto /var/www/html
o nelle sue sottodirectory. Sembra che non abbia un file .htaccess
(a parte /var/www/html/wp-content/plugins/akismet/.htaccess
, dovrei averne uno?

Apache. Ho seguito esattamente i passaggi di questi tutorial per installare Wordpress 4.7 su AWS: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html e http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hosting-wordpress.html

Non ho familiarità con AWS, ma se hai installato un WordPress standard dovresti avere un file .htaccess nella root dell'installazione. Se non c'è, prova ad andare su Impostazioni > Permalink, assicurati di non avere l'impostazione "Normale", salva e poi controlla se è stato generato un file htaccess

Avevo i permalink con l'impostazione "Normale". L'ho cambiata in "Nome articolo". WordPress non è riuscito a salvare il file .htaccess apparentemente a causa dei permessi, quindi mi ha mostrato il codice. Ho creato un file .htaccess
usando ssh
con quel contenuto. Tuttavia, l'API REST continua a restituire 404, anche per http:example.com/wp-json/

Non dovresti ottenere 404. Controlla se funzionano altri URL puliti, come il post predefinito. Se non funziona, hai ancora un problema con l'htaccess

Sembra che i Permalink non funzionino affatto, non solo gli endpoint API. Ho appena notato che posso accedere solo ai post del blog con l'opzione "Plain". Se cambio i Permalink a qualsiasi altro valore, ricevo l'avviso che dovrei modificare manualmente il file .htaccess
, cosa che faccio, ma poi ottengo errori 404 anche per i post del blog. Quindi penso che il mio problema sia con i Permalink in generale, piuttosto che solo con l'API REST. Forse il messaggio "file .htaccess non scrivibile" è un sintomo di qualche altro problema.

Alla fine ho trovato il problema. Poiché non sapevo che i Permalink fossero necessari per il corretto funzionamento dell'API REST, durante la configurazione iniziale ho saltato il passaggio di impostare AllowOverride All
nella sezione <Directory "/var/www/html">
del file /etc/httpd/conf/httpd.conf
. Ecco perché ignorava le mie modifiche a .htaccess
. Ora, con un permalink diverso da Plain, gli endpoint dell'API REST funzionano.

Se stai utilizzando permalink non ottimizzati, dovresti passare la route dell'API REST come parametro della stringa di query. La route http://oursite.com/wp-json/ nell'esempio sopra diventerebbe quindi http://oursite.com/?rest_route=/ "https://developer.wordpress.org/rest-api/#routes-endpoints"

Avevo la versione 4.7 e pensavo che l'API REST fosse disabilitata, ma sono stato ingannato dall'URL. Per vedere l'URL corretto cerca una riga che assomiglia a questa:
link rel='https://api.w.org/
' href='http://miosito?rest_route=/
' />.
Quindi, utilizzando http://miosito?rest_route=/ come prefisso ho risolto il mio problema. Ad esempio, per recuperare i post è sufficiente digitare: http://miosito?rest_route=/wp/json
Non sono riuscito a trovare nella documentazione che fosse necessario il parametro di query. Sono stato l'unico?

Ha funzionato per me con WordPress 4.8.x Non sono sicuro del perché questo non sia documentato da nessuna parte.

Non sono l'unico. Ho trovato questa risposta nel tuo commento solo dopo 10 minuti di ricerca. Ho dovuto fare: www.example.com?rest_route=/wp/v2/posts

Penso che questo accada quando i permalink personalizzati non sono abilitati. Dalla documentazione...
"Sui siti senza permalink personalizzati, la route viene invece aggiunta all'URL come parametro rest_route. Per l'esempio sopra, l'URL completo sarebbe quindi http://example.com/?rest_route=/wp/v2/posts/123"

eccolo qui -> https://developer.wordpress.org/rest-api/#routes-endpoints

Se l'API REST non funziona subito dopo un'installazione fresca e digitando
miodominio/wp-json/wp/v2/posts
allora dovrai semplicemente attivare i tuoi "permalink" come post_name situati in:
Pannello di controllo WP->Impostazioni->Permalink
Oppure se non desideri attivare i permalink, puoi semplicemente digitare:
miodominio?rest_route=/wp/v2/posts
Cavolo, vorrei che WordPress aggiornasse il loro manuale REST per renderlo più user-friendly. Mi piaceva la vecchia versione della documentazione :)

Vedo che hai risolto il problema, ma lascio qui la mia soluzione dato che ha funzionato anche per me. Ho avuto lo stesso problema quando ho aggiornato dalla beta15 all'API core in WP 4.7. A quanto pare il problema era che avevo alcuni plugin che utilizzavano una funzione deprecata register_api_field che ho cambiato in register_rest_field secondo questa nota nel changelog:
CAMBIAMENTO IMPORTANTE: Rinomina register_api_field() in register_rest_field().
Introduce una funzione register_api_field() per compatibilità all'indietro, la quale chiama _doing_it_wrong(). Tuttavia, register_api_field() non verrà mai integrata nel core di WordPress, quindi dovresti aggiornare le tue chiamate di funzione.
