¿Puedo usar REST-API en formato de enlace permanente simple?

9

Recientemente, todas mis solicitudes de REST-API se volvieron repentinamente para devolver un error 404, cada solicitud (sin importar el punto final personalizado o incorporado).

Entonces supuse que era por la estructura del enlace permanente. /wp-json/no es accesible bajo enlace permanente, ya que simplemente no hay una regla de redireccionamiento disponible en este momento.

¿Es posible utilizar los puntos finales REST en esta situación? Tanto a medida como incorporados.

Jack Johansson
fuente

Respuestas:

16

Sí tu puedes. Simplemente agregue el rest_routeparámetro de consulta.

Entonces

https://wordpress.org/wp-json/

se convertiría

https://wordpress.org/?rest_route=/

O https://wordpress.org/wp-json/wp/v2/se convertiría https://wordpress.org/?rest_route=/wp/v2en darle un ejemplo más completo.

¿Entonces te preguntas cómo decidir cuál usar? No te preocupes más, hay una función para eso:get_rest_url()

Otra opción es el hecho de que, de manera predeterminada, hay un <link>encabezado en el encabezado que le proporciona la raíz API.

<link rel='https://api.w.org/' href='https://wordpress.org/wp-json/' />

Entonces, en caso de que necesite resolverlo desde el lado del cliente, JS simplemente use algo en la línea de

document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href');

Así que, básicamente, no debe tomar la wp-jsonparte como se indica (y codificarla) sino construirla dinámicamente utilizando get_rest_url()el enfoque JS mencionado anteriormente.

Kraftner
fuente
Entonces, si quiero usarlo sin formato, ¿sería algo así https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Y? Esto significa que necesito tener un condicional para detectar la estructura de enlace permanente y cambiar la ruta REST en función de eso.
Jack Johansson
Bueno, tal vez no sea condicional, pero debes construirlo dinámicamente. Ver ediciones arriba.
kraftner
¿Cómo usarías esta ruta con jsonp? Lo intenté /?rest_route=/?_jsonp=callBackfnpero obtuve un estado 404.
corrimiento al rojo el
@redshift Por lo general, abra una pregunta separada para cosas como estas. En su caso, debería leer sobre delimitadores de cadena de consulta en.wikipedia.org/wiki/Query_string#Structure Debería escribirlo así/?rest_route=/&_jsonp=callBackfn
kraftner el
1

Puede agregar una reescritura en su servidor web.

Por ejemplo, para nginx

location ~ ^/wp-json/ {
    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}
northtree
fuente
0

El rest_routeparámetro de consulta es el Uglyestilo de Permalink (la elección de palabras de Wordpress no es mío). Puede cambiar el estilo de permilink Post namecomo se ilustra en la siguiente captura de pantalla y la wp-jsonruta debe ser accesible en la URL. Es posible que otros de estos estilos de permilink funcionen, pero Post namefuncionó para mí y no exploré más allá de eso

Imagen que ilustra los clics de botón necesarios para cambiar la configuración

Max Carroll
fuente