使用Wordpress Rest API JS填充ACF字段

时间:2019-06-12 00:08:41

标签: javascript wordpress advanced-custom-fields headless

我是使用WordPress的新手,并且正在使用Advanced Custom Fields插件。看起来不错,但我想知道是否可以通过POST ACF新建一个对象(使用WordPress REST API创建)?我已经使用它来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 个答案:

答案 0 :(得分:0)

与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
            ]
    }
}

请让我知道是否需要任何帮助。

谢谢