使用 Wordpress Rest API JS 填充 ACF 字段

Posted

技术标签:

【中文标题】使用 Wordpress Rest API JS 填充 ACF 字段【英文标题】:Populate ACF Fields using Wordpress Rest API JS 【发布时间】:2019-10-26 10:19:27 【问题描述】:

我是 WordPress 的新手,我正在玩 Advanced Custom Fields 插件。看起来不错,但我想知道是否可以通过WordPress REST APIPOST 一个新对象(使用ACF 创建)?我已经将它用于GET 我所有的自定义对象(感谢ACF to REST API Plugin)。

我使用WordPress 作为后端,NextJS 作为前端,所以我想创建一个新的 html 表单,用户可以在其中输入一些信息并直接创建该对象的实例。

如果不可能,保存到数据库(普通 mysql 实例)并模拟我需要的相同操作的机制是什么?如果还存在一些自定义实现,我想阻止执行一些自定义实现(如果您需要有关问题或数据的更多信息,请告诉我)

编辑:

经过一番研究,我发现我试图使用不正确的端点创建对象。

现在我可以创建自己的对象(自定义帖子类型),但我无法填充 ACF 字段...

我发送一个标准请求:

var data = JSON.stringify(
  "title": "Test00",
  "status": "publish",
  "acf":
    "customfield1":"Some value..."
  
);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () 
  if (this.readyState === 4) 
    console.log(this.responseText);
  
);

xhr.open("POST", "http://localhost:8000/wp-json/wp/v2/custom");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAwMCIsImlhdCI6MTU2MDM3NTQxNywibmJmIjoxNTYwMzc1NDE3LCJleHAiOjE1NjA5ODAyMTcsImRhdGEiOnsidXNlciI6eyJpZCI6IjIifX19.BCyrlFm_qD3-9DzCxQ37n4pJYkTasvLaN34NJtFAMC4");
xhr.setRequestHeader("cache-control", "no-cache");

xhr.send(data);

我收到了这个:


  ...
  "acf":
    "customfield1":null
  

有什么方法可以一次性完成吗?我应该创建对象然后发送额外的信息吗?

【问题讨论】:

【参考方案1】:

与 GET 请求一样,您也可以使用 POST 请求将数据存储到 CMS 中。您需要做的是通过 POST API 调用传递授权标头。 您可以在此处获取有关授权机制的更多详细信息:https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/

标题:

Authorization:Bearer <token>
Content-Type:application/json

其次,您可以将 Body 数据作为 RAW json 传递,如下所示:


"title":"Sample ACF field demo",
"status": "publish",
"fields": 
          
        "text_custom_field_name" : "Text value",
        "checkbox_custom_field_name" : [
                "Option1,",
                "Option2,",
                "Option3"
            ],
        "textarea_custom_field_name" : "This is message field",
        "boolean_custom_field_name" : [
                true
            ]
    

如果需要任何帮助,请告诉我。

谢谢

【讨论】:

谢谢!我稍后会尝试,但与此同时,只有一个问题,我计划添加 JWT 进行身份验证(我不是安全专家,但我有这方面的经验),我发现本教程要做所以 (firxworx.com/blog/wordpress/…) ,可以在没有用户登录的情况下使用它吗?例如,基于公共 HTML 表单创建一个新的自定义对象,或者有什么最好的方法吗? JWT 是一个不错的选择。有一个可用于集成 JWT 的 WP 插件:wordpress.org/plugins/jwt-authentication-for-wp-rest-api 要在没有用户登录的情况下公开使用,我建议创建一个自定义端点并写下生成 JWT 令牌的逻辑,并制作一些自定义逻辑来使用该自定义端点。这样,您的端点和令牌生成将是安全的。让我知道有什么。谢谢! 如果我 GET 到我的端点 localhost:8000/wp-json/acf/v3/custom ,它可以工作,但是当我尝试直接进行 POST 时,甚至没有添加任何授权或任何额外数据,我看到: "code": "rest_no_route" , "message": "No se encontró la ruta que coincida con la URL y el método de la petición", "data": "status": 404 我还需要设置别的吗? 谢谢!我终于能够使用自定义字段创建对象了! :D【参考方案2】:

TL;DR - ACF 现在支持 WP REST API

大家好,这里是高级自定义字段的产品经理 Iain ?

作为ACF 5.11 版本的一部分,我们在 WordPress REST API 中添加了对 ACF 字段的原生支持。阅读更多关于 here 的信息。

【讨论】:

以上是关于使用 Wordpress Rest API JS 填充 ACF 字段的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress 使用自定义端点 rest api 上传多个图像(离子作为最终用户)

Wordpress REST API (wp-api) 404 错误:无法访问 WordPress REST API

没有让 wordpress nonce 与 wp-rest api 应用程序一起工作

Woocommerce Paypal REST api 与 React JS 的集成

如何使用 REST_API wordpress 创建用户?

使用 WordPress REST API 删除媒体