WP REST API "rest_no_route" al intentar actualizar meta

23 feb 2017, 11:16:07
Vistas: 27.7K
Votos: 4

He estado trabajando con la WP REST API y todos los comandos GET (lectura) obtienen los datos que quiero tanto de los tipos de post integrados como personalizados (este plugin fue una bendición para ayudar). También puedo hacer POST para crear entradas con información de nivel superior tanto para tipos de post integrados como personalizados. Toda mi autenticación funciona bien. Pero cuando intento actualizar post meta, me encuentro con la siguiente respuesta:

{
  "code": "rest_no_route",
  "message": "No se encontró ninguna ruta que coincida con la URL y el método de solicitud",
  "data": {
    "status": 404
  }
}

Encontré referencia en este artículo sobre la posible necesidad de código adicional para hacer funcionar los metadatos, y luego encontré este plugin que SÍ resolvió el problema de publicación de meta, pero solo para el tipo de posts integrado (no funciona con mis tipos de post personalizados, que siguen devolviendo exactamente el mismo error).

Todo lo anterior es confuso y se complica, creo, por las capacidades cambiantes y el estado de la WP REST API en sí.

¿Alguien puede señalarme alguna documentación clara para realizar una actualización de valor meta en un tipo de post personalizado?

ACTUALIZACIÓN:

Ok, acabo de descubrir que el plugin rest-api-meta-endpoints mencionado anteriormente SÍ permitirá escribir en CPTs también, pero a través de /wp-json/wp/v2/posts/id/meta en lugar de /wp-json/wp/v2/cptname/id/meta... ¿es este el comportamiento esperado?

Dicho esto, para cualquier post solo puedo escribir datos nuevos, no puedo descubrir cómo actualizar meta existente todavía, ¿alguna idea?

3
Comentarios

¿Alguien sabe si se puede obtener usermeta de esta manera? Me encantaría que el usuario pudiera actualizar sus propios datos... algo como wp-json/wp/v2/users/me/meta?key=name&value=Newname?

Armstrongest Armstrongest
5 dic 2017 21:01:25

Excelente solución pero uno de los plugins ya no tiene mantenimiento. ¿Alguien conoce una alternativa a https://wordpress.org/plugins/rest-api-meta-endpoints/ por favor? ¿O existe ya una mejor solución ahora? He pasado muchas horas investigando cómo actualizar campos personalizados en WordPress y esta es la única solución que he encontrado.

Paul C Paul C
5 sept 2019 18:41:40

Honestamente, escribí esto hace tanto tiempo que dudo que las mismas limitaciones siquiera existan en el código central de la API REST. Probablemente hoy existen soluciones más limpias sin necesidad de recurrir a tales contorsiones.

Stephen Stephen
5 sept 2019 22:03:47
Todas las respuestas a la pregunta 1
0
10

Esto es lo que he aprendido sobre la API REST de WP: Es un lío de código sin documentar y sin terminar con gran potencial pero frustrantemente poca claridad.

Dicho esto, tengo una solución alternativa que compartiré aquí, esperando que sea útil para otros en una situación similar a la mía:

Acabo de descubrir que puedo actualizar un campo meta SI tengo su id y SI uso posts en mi ruta (incluso para CPTs). Por ejemplo (asumiendo que mi ID de post es 1622 y mi ID de meta es 11395), esta consulta funcionará:

POST https://example.com/wp-json/wp/v2/posts/1622/meta/11395?value=mi_valor_clave

pero estas NO funcionarán (de varias maneras):

POST https://example.com/wp-json/wp/v2/posts/1622/meta?key=mi_nombre_clave&value=mi_valor_clave (AÑADIRÁ uno nuevo pero no editará el existente)

POST https://example.com/wp-json/wp/v2/posts/1622/?key=mi_nombre_clave&value=mi_valor_clave (404)

POST https://example.com/wp-json/wp/v2/mi-cpt/1622/meta?key=mi_nombre_clave&value=mi_valor_clave (404)

POST https://example.com/wp-json/wp/v2/mi-cpt/1622/meta/11395?value=mi_valor_clave (404)

También descubrí que puedo OBTENER todos los meta realizando una consulta como esta:

GET https://example.com/wp-json/wp/v2/posts/1622/meta/

Así que supongo que, juntando todo, podría hacer que esto funcione en su forma actual mediante:

  1. GET https://example.com/wp-json/wp/v2/posts/1622/meta/

  2. filtrando el resultado anterior para obtener el ID del meta que quiero cambiar

  3. POST https://example.com/wp-json/wp/v2/posts/1622/meta/11395?value=mi_valor_clave

Si alguien tiene algo que añadir o cualquier idea sobre otras posibles direcciones, estoy abierto a escuchar. De lo contrario, supongo que esta es mi "solución".

Y por favor ten en cuenta los requisitos previos para que esto funcione:

  1. Este plugin configurado para exponer tus tipos de post y meta
  2. Este plugin para habilitar los endpoints meta.
  3. Lo que no incluí arriba fue ninguna mención sobre autenticación, ya que queda fuera del alcance de esta discusión, pero dependiendo de tu configuración, puede que necesites autenticarte antes de usar la API, como es el caso en mi configuración (usando Oauth y tokens que normalmente se añadirían a estas URLs).
27 feb 2017 16:48:16