我正在尝试使用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);
});
最合适的回答,由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_value
是metadata
参数鉴于$data
是数据对象;这相当于$data
在get_callback
函数,但在update_callback
功能$data
不是数组。
您可能还需要检查this sample code 在REST API handbook.
上述示例是基本示例,如REST API手册所述,请仔细考虑您的特定字段可能需要哪些权限检查或错误处理。
带有update_field()
(ACF),您也可以使用$data->ID
作为传递给的第三个参数update_field()
.