¿Está la API REST de WordPress instalada y habilitada en una instalación básica de WordPress 4.7?

10 dic 2016, 19:07:58
Vistas: 50.7K
Votos: 46

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?

6
Comentarios

¿Existe la etiqueta de descubrimiento en el código fuente de la página? <link rel='https://api.w.org/' href='https://example.com/wp-json/' /> Parece que solo funciona en mis sitios.

Rarst Rarst
10 dic 2016 19:32:46

@Rarst, si ejecuto grep -r "<link rel='https://api.w.org/'" . en el directorio html, devuelve una coincidencia en el archivo ./wp-includes/rest-api.php con este texto: echo "<link rel='https://api.w.org/' href='" . esc_url( $api_root ) . "' />\n";

Pep Pep
10 dic 2016 20:13:08

No en tu código fuente, sino en el código fuente HTML de una página de tu sitio en el navegador.

Rarst Rarst
10 dic 2016 20:16:23

@Rarst, sí veo <link href="http://example.com/wp-json/" rel="https://api.w.org/">

Pep Pep
10 dic 2016 20:24:04

¿Qué obtienes al abrir el enlace en el navegador? ¿Con WP_DEBUG activado?

Rarst Rarst
10 dic 2016 20:32:40

Obtengo un error 404 para http://example.com/wp-json/ tanto con WP_DEBUG configurado como true o false.

Pep Pep
10 dic 2016 20:42:31
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 4
10
32

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).

10 dic 2016 19:37:11
Comentarios

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 Pep
10 dic 2016 19:54:38

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

Mark Kaplun Mark Kaplun
10 dic 2016 19:58:35

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

Pep Pep
10 dic 2016 20:04:51

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.

Mark Kaplun Mark Kaplun
10 dic 2016 20:12:36

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/

Pep Pep
10 dic 2016 20:29:57

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.

Mark Kaplun Mark Kaplun
10 dic 2016 20:40:56

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.

Pep Pep
10 dic 2016 20:59:55

¿tienes instalado y activado mod_rewrite?

Mark Kaplun Mark Kaplun
10 dic 2016 21:41:03

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.

Pep Pep
10 dic 2016 21:53:15

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"

devasia2112 devasia2112
3 ene 2019 18:47:52
Mostrar los 5 comentarios restantes
5
14

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?

27 jun 2017 06:52:28
Comentarios

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

Anirudha Anirudha
31 ago 2017 14:35:14

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

Eugene K Eugene K
7 feb 2018 05:50:22

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"

Giles Butler Giles Butler
20 jul 2018 00:36:44

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

devasia2112 devasia2112
3 ene 2019 18:48:28

Muy útil si estás probando con el servidor incorporado de PHP php -S localhost:1234.

Juan Javier Triff Cabanas Juan Javier Triff Cabanas
2 sept 2020 05:22:30
0

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 :)

29 may 2019 20:20:47
0

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.

17 dic 2016 04:30:18