更新自定义发布类型元数据WP REST API

时间:2019-06-15 作者:stemon

我正在尝试使用JS和WP Rest API更新前端上的自定义post类型元数据。

对象键为wishlist_array 在下面metadata

下面是如何从http://ohalocal.local/wp-json/wp/v2/oha_wishlist (我的自定义帖子)外观:

{
"id": 1248,
.
.
.
"metadata": {
    "wishlist_array": [
        ""
     ],
.
.
.
在php上,我设置register_rest_field() 功能如下:

register_rest_field(\'oha_wishlist\', \'metadata\', array(
    \'get_callback\' => function ($data) {

        return get_post_meta($data[\'id\'], \'\', \'\');
    },
     \'update_callback\' => function ($data) {
         // Don\'t understand how to use the arguments here
         // How can I print or log the $data content??
         return update_field($??, $??, $??);
     },
最后是我的fetch() 连接到API的函数。它不会返回错误,例如,如果我尝试更新标题,它会很好地工作。仅当尝试更新metadata.

fetch("http://ohalocal.local/wp-json/wp/v2/oha_wishlist/1248", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "X-WP-Nonce": phpVarObj.nonce
        },
        body: JSON.stringify({ metadata: { wishlist_array: "add this" } })
      })
        .then(function(response) {
          return response.json();
        })
        .then(function(wishlistPosts) {
          console.log(wishlistPosts);
        });

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

如果您像这样提供请求数据/正文,这是一个元数据数组:

{ metadata: { wishlist_array: "add this", foo: "bar baz" } }
您只想更新wishlist_array 元数据,则可以执行以下操作:

// In your case, $field_value is the `metadata` value and $data is a WP_Post object.
\'update_callback\' => function( $field_value, $data ){
    if ( is_array( $field_value ) && isset( $field_value[\'wishlist_array\'] ) ) {
        update_post_meta( $data->ID, \'wishlist_array\', $field_value[\'wishlist_array\'] );
        return true;
    }
}
或者,如果要更新所有元数据(或其中提供的所有字段metadata 数组),则可以执行以下操作:

// In your case, $field_value is the `metadata` value and $data is a WP_Post object.
\'update_callback\' => function( $field_value, $data ){
    if ( is_array( $field_value ) ) {
        foreach ( $field_value as $key => $value ) {
            update_post_meta( $data->ID, $key, $value );
        }
        return true;
    }
}
关于这个问题:“//如何打印或记录$数据内容?”,您可以这样做var_dump( $data ); 并检查PHP错误日志—或wp-content/debug.log 如果是的话enabled.

中的一些注释update_callback 功能$field_valuemetadata 参数鉴于$data 是数据对象;这相当于$dataget_callback 函数,但在update_callback 功能$data 不是数组。

您可能还需要检查this sample codeREST API handbook.

上述示例是基本示例,如REST API手册所述,请仔细考虑您的特定字段可能需要哪些权限检查或错误处理。

带有update_field() (ACF),您也可以使用$data->ID 作为传递给的第三个参数update_field().

相关推荐

WP-API:获取多个类别的帖子

比方说,我有两个类别,\'color\' 和\'temperature\'. 每一个都有许多子类别。当我转到如下URL时,Wordpress在显示请求类别中的帖子方面做得很好:http://www.example.com/category/pink+warm 现在我想对json-rest-api 插件,通过REST请求。有可能吗?如何使用REST请求获取多个类别的帖子(不是在任何一个类别中,而是在所有请求的类别中)?我尝试了不同的URI,但失败了。