¿La API REST de Wordpress está instalada y habilitada en una instalación estándar de Wordpress 4.7?


29

Acabo de instalar Wordpress 4.7. Una de las menciones en el anuncio es que cuenta con una API REST.

Mi entendimiento es:

  • El complemento API de Wordpress REST ya no es necesario, porque supuestamente ya se ha fusionado con el núcleo en Wordpress 4.7.
  • La API REST de Wordpress está habilitada de forma predeterminada

Sin embargo, noto que en una instalación de Wordpress 4.7 de vainilla, ninguno de los puntos finales 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 de usuario de Wordpress de vanilla, o debo instalar un complemento de terceros para hacerlo?


1
¿Hay una etiqueta de descubrimiento en la 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, si estoy grep -r "<link rel='https://api.w.org/'" .en el htmldirectorio, devuelve un hit en el archivo ./wp-includes/rest-api.phpcon este texto:echo "<link rel='https://api.w.org/' href='" . esc_url( $api_root ) . "' />\n";
Pep

No en su código fuente, en la fuente HTML de una página de su sitio en el navegador.
Rarst

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

¿Qué significa abrir el enlace en el navegador? ¿Con WP_DEBUG habilitado?
Rarst

Respuestas:


21

4.7 lo tiene habilitado por defecto. La manera fácil de verificar si está funcionando es visitar la URL de example.com/wp-json, y debe obtener una lista de los puntos finales registrados allí.

No hay una opción oficial para deshabilitarlo ya que (al menos se habló de que no estaba seguro de si apareció en el lanzamiento), algunas funciones principales dependen de ello.

Las cosas más obvias para verificar si no funciona son las reglas de htaccess, y ¿tiene un directorio wp-json?


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

@Pep, ¿qué servidor web utilizas? ¿tienes lindos enlaces permanentes?
Mark Kaplun

Apache. Seguí exactamente los pasos en estos tutoriales para instalar Wordpress 4.7 en AWS: docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html y docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Pep

no está familiarizado con AWS, pero si instaló un wordpress vanilla, debería haber tenido un .htaccess en la raíz de su instalación. Si no intenta ir a configuración> enlaces permanentes, asegúrese de que no está en la configuración normal, guarde y luego verifique si se generó un acceso h
Mark Kaplun

66
Finalmente encontré el problema. Como no sabía que se necesitaría un enlace permanente para que funcione la API REST, omití durante la configuración inicial el paso para establecer AllowOverride Allen la <Directory "/var/www/html">sección de /etc/httpd/conf/httpd.conf. Es por eso que estaba ignorando mis cambios .htaccess. Ahora con un enlace permanente distinto de PLain, los puntos finales de la API REST funcionan.
Pep

11

Tenía 4.7 también pensé que la API REST estaba deshabilitada, pero la URL me engañó. Para ver la URL correcta, busque una línea similar a esa:

enlace rel = ' https://api.w.org/' href = ' http://mysite?rest_route=/' />. Entonces, usando http: // mysite? Rest_route = / como el prefijo resolvió mi problema. Por ejemplo, para recuperar las publicaciones es suficiente escribir: http: // mysite? Rest_route = / wp / json

No pude encontrar en la documentación que se necesitaba el parámetro de consulta. ¿Era yo el único?


Me funcionó con WordPress 4.8.x No estoy seguro de por qué esto no está documentado en ninguna parte.
Anirudha

2
No el único. Solo encontré esta respuesta en tu comentario después de 10 minutos de búsqueda. Debía hacer:www.example.com?rest_route=/wp/v2/posts
Eugene K

3
Creo que esto sucede cuando los enlaces permanentes no están habilitados. De los documentos ... "En sitios sin enlaces permanentes bonitos, la ruta se agrega a la URL como el parámetro rest_route. Para el ejemplo anterior, la URL completa sería example.com/?rest_route=/wp/v2/posts / 123 "
Giles Butler


1

Veo que ha solucionado el problema, pero dejó mi solución aquí, ya que también funcionó para mí. Tuve este mismo problema al actualizar de beta15 a la API principal en wp 4.7 Resulta que el problema era que tenía algunos complementos que usaban una función obsoleta register_api_field que cambié a register_rest_field de acuerdo con esta nota en el registro de cambios:

ROMPER EL CAMBIO: Cambie el nombre de register_api_field () por register_rest_field ().

Introduce una función register_api_field () para compatibilidad con versiones anteriores, que llama a _doing_it_wrong (). Sin embargo, register_api_field () nunca se comprometerá con el núcleo de WordPress, por lo que debe actualizar sus llamadas a funciones.


1

Si la API REST no funciona de forma inmediata o después de una instalación nueva y después de escribir

mydomain/wp-json/wp/v2/posts 

entonces deberías simplemente activar tus "enlaces permanentes" como post_name ubicado:

Panel de WP-> Configuración-> Enlaces permanentes

O si no desea activar los enlaces permanentes, simplemente puede escribir:

mydomain?rest_route=/wp/v2/posts

Hombre, desearía que WordPress actualizara su manual Rest para que fuera más fácil de usar. Me gusta la versión anterior de documentos :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.