¿Está la API REST de WordPress instalada y habilitada en una instalación básica de WordPress 4.7?
Acabo de instalar WordPress 4.7. Una de las menciones en el anuncio es que incluye una API REST.
Mi entendimiento es:
- El plugin de WordPress REST API ya no es necesario, porque supuestamente se ha fusionado con el núcleo en WordPress 4.7.
- La API REST de WordPress está habilitada por defecto
Sin embargo, noto que en una instalación básica de WordPress 4.7, ninguno de los endpoints parece funcionar (por ejemplo http://examples.com/wp-json/wp/v2/posts
).
¿Cómo puedo saber si la nueva API REST está realmente activada? ¿Se puede habilitar o deshabilitar la API REST con la interfaz básica de WordPress, o debería instalar un plugin de terceros para hacerlo?

4.7 lo tiene habilitado por defecto. La forma más fácil de comprobar si está funcionando es visitar la URL ejemplo.com/wp-json, donde deberías obtener una lista de endpoints registrados.
No hay una opción oficial para desactivarlo (al menos hubo una discusión al respecto pero no estoy seguro si se incluyó en la versión final), ya que algunas funcionalidades del núcleo dependen de él.
Lo más obvio para verificar si no funciona son las reglas de tu archivo htaccess y si tienes un directorio wp-json.
Además, si las URLs tipo /wp-json/wp/v2/posts
no te funcionan, pero /?rest_route=/wp-json/wp/v2/posts
sí, significa que necesitas habilitar los enlaces permanentes "bonitos" en la configuración (sugerido por Giles Butler en los comentarios más abajo).

No tengo un directorio wp-json bajo /var/www/html
o sus subdirectorios. Parece que no tengo un archivo .htaccess
(aparte de /var/www/html/wp-content/plugins/akismet/.htaccess
, ¿debería tener uno?

@Pep, ¿qué servidor web utilizas? ¿tienes los pretty permalinks activados?

Apache. Seguí exactamente los pasos de estos tutoriales para instalar WordPress 4.7 en AWS: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html y http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hosting-wordpress.html

No estoy familiarizado con AWS, pero si instalaste un WordPress estándar, deberías tener un archivo .htaccess en la raíz de tu instalación. Si no lo tienes, intenta ir a Ajustes > Enlaces permanentes, asegúrate de no tener la opción "Simple" seleccionada, guarda los cambios y luego verifica si se generó un archivo htaccess.

Tenía los enlaces permanentes con la configuración "Simple". Lo cambié a "Nombre de entrada". WordPress no pudo guardar el archivo .htaccess aparentemente por problemas de permisos, así que me proporcionó el código. Creé un archivo .htaccess
usando ssh
con ese contenido. Sin embargo, la API REST sigue devolviendo error 404, incluso para http:example.com/wp-json/

No deberías recibir un 404. Verifica si funcionan otras URLs amigables, como la entrada por defecto. Si no funcionan, entonces todavía tienes un problema con el archivo htaccess.

Parece que los Permalinks no funcionan en absoluto, no solo los endpoints de la API. Acabo de notar que solo puedo acceder a las publicaciones del blog con la opción "Simple", si cambio los Permalinks a cualquier otro valor, obtengo la advertencia de que debo modificar manualmente el archivo .htaccess
, lo cual hago, pero luego obtengo error 404 incluso para las publicaciones del blog. Así que creo que mi problema es con los Permalinks en general, y no solo con la REST API. Quizás el mensaje "archivo .htaccess no escribible" es un síntoma de algún otro problema.

Finalmente encontré el problema. Como no sabía que los Permalinks serían necesarios para que la REST API funcionara, omití durante la configuración inicial el paso de establecer AllowOverride All
en la sección <Directory "/var/www/html">
del archivo /etc/httpd/conf/httpd.conf
. Por eso ignoraba mis cambios en .htaccess
. Ahora, con un permalink distinto a "Simple", los endpoints de la REST API funcionan.

Si estás usando enlaces permanentes no amigables, deberías pasar la ruta de la API REST como un parámetro de cadena de consulta. La ruta http://oursite.com/wp-json/ en el ejemplo anterior sería entonces http://oursite.com/?rest_route=/ "https://developer.wordpress.org/rest-api/#routes-endpoints"

Yo también tenía la versión 4.7 y pensé que la API REST estaba deshabilitada, pero me engañó la URL. Para ver la URL correcta busca una línea que se vea algo así:
link rel='https://api.w.org/
' href='http://misitio?rest_route=/
' />.
Así que, usando http://misitio?rest_route=/ como prefijo resolví mi problema. Por ejemplo, para recuperar las publicaciones basta con escribir: http://misitio?rest_route=/wp/json
No pude encontrar en la documentación que se necesitaba el parámetro de consulta. ¿Fui el único?

Funcionó para mí con WordPress 4.8.x. No estoy seguro de por qué esto no está documentado en ningún lugar.

No soy el único. Solo encontré esta respuesta en tu comentario después de 10 minutos buscando. Necesité hacer: www.example.com?rest_route=/wp/v2/posts

Creo que esto sucede cuando los permalinks bonitos no están habilitados. Según la documentación...
"En sitios sin permalinks bonitos, la ruta se agrega a la URL como el parámetro rest_route. Para el ejemplo anterior, la URL completa sería entonces http://example.com/?rest_route=/wp/v2/posts/123"

aquí está -> https://developer.wordpress.org/rest-api/#routes-endpoints

Si la API REST no funciona de forma predeterminada o después de una instalación fresca y después de escribir:
midominio/wp-json/wp/v2/posts
entonces necesitarás simplemente activar tus "enlaces permanentes" como post_name ubicado en:
Escritorio de WP->Ajustes->Enlaces permanentes
O si no deseas activar los enlaces permanentes, puedes simplemente escribir:
midominio?rest_route=/wp/v2/posts
Hombre, desearía que WordPress actualizara su manual de REST para que sea más amigable con el usuario. Me gusta la versión antigua de la documentación :)

Veo que has solucionado el problema pero dejo mi solución aquí ya que también me funcionó. Tuve este mismo problema al actualizar desde beta15 a la API core en WP 4.7. Resulta que el problema era que tenía algunos plugins que estaban usando una función obsoleta register_api_field, que cambié por register_rest_field según esta nota en el changelog:
CAMBIOS IMPORTANTES: Renombrar register_api_field() a register_rest_field().
Introduce una función register_api_field() para compatibilidad hacia atrás, que llama a _doing_it_wrong(). Sin embargo, register_api_field() nunca será incluida en el núcleo de WordPress, por lo que deberías actualizar tus llamadas a funciones.
