我创建了一个自定义的post类型,并将其显示在RESTAPI中。我还使用以下代码注册了一个自定义字段:
function slug_get_post_meta_cb( $object, $field_name, $request ) {
return get_post_meta( $object[ \'id\' ], $field_name );
}
function slug_update_post_meta_cb( $value, $object, $field_name ) {
return update_post_meta( $object[ \'id\' ], $field_name, $value );
}
add_action( \'rest_api_init\', function() {
register_rest_field( \'custom_type\',
\'myfield\',
array(
\'get_callback\' => \'slug_get_post_meta_cb\',
\'update_callback\' => \'slug_update_post_meta_cb\',
\'schema\' => array(
\'type\' => \'string\',
\'context\' => array( \'view\', \'edit\' )
),
)
);
我使用jQuery创建一个ajax POST请求,以便使用以下javascript代码创建一个新的自定义POST:
jQuery.ajax( {
url: requete.api,
method: \'POST\',
beforeSend: function ( xhr ) {
xhr.setRequestHeader( \'X-WP-Nonce\', questionnaireScript.nonce );
},
data:{
title : myData.title,
content: myData.content,
status: "publish",
myfield: "Stop flying"
}
} ).done( function ( response ) {
console.log( response );
} );
帖子是由创建的,没有自定义字段
myfield
. 它在对GET请求的响应中显示为自定义post对象的一部分,但显示为空数组。我还尝试将其设置为
myfield : ["Stop flying"]
, 和as
meta : {myfield: "Stop flying"}
, 无济于事。我知道另一个注册元字段的WP函数(
register_meta
). 然而,由于文档显示它不能仅应用于自定义post类型,因此我选择使用register\\u rest\\u字段。知道我做错了什么吗?
最合适的回答,由SO网友:Sally CJ 整理而成
我还没有测试你的代码,但这里$object
是对象而不是数组:
// Here, $object is a WP_Post object.
function slug_update_post_meta_cb( $value, $object, $field_name ) {
return update_post_meta( $object->ID, $field_name, $value );
}
你可以使用
register_meta()
使用自定义帖子类型:
register_meta( \'post\', \'myfield\', [
\'object_subtype\' => \'custom_type\', // Limit to a post type.
\'type\' => \'string\',
\'description\' => \'My Field\',
\'single\' => true,
\'show_in_rest\' => true,
] );
检查我的答案
here 了解更多详细信息。
SO网友:ChristopherJones
尝试使用JSON。stringify()在传递数据时对其进行字符串化,并将其作为该类型发送:
// Data to pass over
obj_to_pass = {
title : myData.title,
content: myData.content,
status: "publish",
myfield: "Stop flying"
};
// Updated AJAX call
jQuery.ajax( {
url: requete.api,
method: \'POST\',
beforeSend: function ( xhr ) {
xhr.setRequestHeader( \'X-WP-Nonce\', questionnaireScript.nonce );
},
dataType : \'json\',
data: JSON.stringify(obj_to_pass)
} ).done( function ( response ) {
console.log( response );
} );
我觉得我过去对它有过一些问题。我没有一个好的测试环境来测试它,所以祈祷吧!