尝试更新元时使用WP REST API“REST_NO_ROUTE”

时间:2017-02-23 作者:Stephen

我一直在使用WP-restapi,所有GET(read)命令都从内置和自定义post类型中提取我想要的数据(this plugin 是上帝赐予的帮助)。我还可以发布帖子,为内置和自定义帖子类型创建包含顶级信息的帖子。我的身份验证工作正常。但当我尝试更新post meta时,我得到了以下回应:

{
  "code": "rest_no_route",
  "message": "No route was found matching the URL and request method",
  "data": {
    "status": 404
  }
}
我在这里找到了参考资料article 对于可能需要一些额外的代码来让元工作,然后我发现this plugin 这确实解决了元发布问题,但仅适用于内置发布类型(不适用于我的自定义发布类型,它仍然返回完全相同的错误)。

我认为,由于WP REST API本身不断变化的功能和状态,上述所有内容都令人困惑和复杂。

有人能给我指出一些关于在自定义帖子类型上执行元值更新的清晰文档吗?

UPDATE:

好吧我刚发现rest-api-meta-endpoints plugin 上面提到的也允许写入CPT,但是通过/wp-json/wp/v2/posts/id/meta而不是/wp-json/wp/v2/cptname/id/meta。。。这是预期的行为吗?

也就是说,对于任何帖子,我只能写新数据,还不知道如何更新现有的meta,有什么想法吗?

1 个回复
最合适的回答,由SO网友:Stephen 整理而成

Here is what I have learned about the WP REST API: It is a mess of undocumented and unfinished code with great promise but frustratingly little clarity.

这就是说,我有一个变通方法,我将在这里发布,希望它对处于类似困境的其他人有用:

我刚刚发现,如果我有一个元字段的id,并且如果我使用posts 在我的路径中(即使对于CPT)。因此,例如(假设我的post id是1622,meta id是11395),此查询将起作用:

POST https://example.com/wp-json/wp/v2/posts/1622/meta/11395?value=mykeyvalue
但这些不会(以各种方式):

POST https://example.com/wp-json/wp/v2/posts/1622/meta?key=mykeyname&value=mykeyvalue (will ADD new but not edit existing)

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

POST https://example.com/wp-json/wp/v2/my-cpt/1622/meta?key=mykeyname&value=mykeyvalue (404)

POST https://example.com/wp-json/wp/v2/my-cpt/1622/meta/11395?value=mykeyvalue (404)
我还发现,通过执行如下查询,我可以获得所有元:

GET https://example.com/wp-json/wp/v2/posts/1622/meta/
因此,我想把所有这些放在一起,我可以通过以下方式在当前的形式下完成这项工作:

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

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

    请注意,即使要让它发挥作用,也必须具备以下先决条件:

    1. This plugin 配置为公开帖子类型和元This plugin 启用元端点

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在