通过 WP API v2 添加 Post 元字段
Add Post Meta Fields via WP API v2
我正在尝试使用 WP API v2 并从 Postman 插入 posts。
如果我 post 这个原始请求,它会创建一个 post 就好了:
{
"title": "Test Title",
"content": "Test Content",
}
但是,我也在尝试向其中添加一些自定义字段值,但我似乎无法让它们发挥作用。此请求创建 post,但不添加任何元字段:
{
"title": "Test Title",
"content": "Test Content",
"meta": {
"foo": "bar",
"foo2": "bar2"
}
}
如何通过 API 端点 POST 具有值 bar
和 bar2
的元字段 foo
和 foo2
https://my-site.com/wp-json/wp/v2/posts
?
编辑:自定义字段似乎也不会在 GET 请求中本地提取。我把这段代码放在一个 mu-plugin 中:
add_filter( 'rest_prepare_post', 'xhynk_api_post_meta', 10, 3 );
function xhynk_api_post_meta( $data, $post, $context ){
$meta = get_post_custom( $post->ID );
if( $meta ) {
$data->data['meta'] = $meta;
}
return $data;
}
这至少让我可以在 GET 请求中查看它。但是我似乎仍然无法通过 Postman 将其发送到 POST。即使添加 "status": "publish"
也会导致新的 post 发布,而不是像默认情况下那样成为草稿。我可以在 API POST 请求上使用任何钩子或过滤器来确保添加了自定义字段吗?
要处理插入和更新时的元数据,您可以使用操作 rest_insert_ + post type
add_action("rest_insert_page", function (\WP_Post $post, $request, $creating) {
$metas = $request->get_param("meta");
if (is_array($metas)) {
foreach ($metas as $name => $value) {
update_post_meta($post->ID, $name, $value);
}
}
}, 10, 3);
我正在尝试使用 WP API v2 并从 Postman 插入 posts。
如果我 post 这个原始请求,它会创建一个 post 就好了:
{
"title": "Test Title",
"content": "Test Content",
}
但是,我也在尝试向其中添加一些自定义字段值,但我似乎无法让它们发挥作用。此请求创建 post,但不添加任何元字段:
{
"title": "Test Title",
"content": "Test Content",
"meta": {
"foo": "bar",
"foo2": "bar2"
}
}
如何通过 API 端点 POST 具有值 bar
和 bar2
的元字段 foo
和 foo2
https://my-site.com/wp-json/wp/v2/posts
?
编辑:自定义字段似乎也不会在 GET 请求中本地提取。我把这段代码放在一个 mu-plugin 中:
add_filter( 'rest_prepare_post', 'xhynk_api_post_meta', 10, 3 );
function xhynk_api_post_meta( $data, $post, $context ){
$meta = get_post_custom( $post->ID );
if( $meta ) {
$data->data['meta'] = $meta;
}
return $data;
}
这至少让我可以在 GET 请求中查看它。但是我似乎仍然无法通过 Postman 将其发送到 POST。即使添加 "status": "publish"
也会导致新的 post 发布,而不是像默认情况下那样成为草稿。我可以在 API POST 请求上使用任何钩子或过滤器来确保添加了自定义字段吗?
要处理插入和更新时的元数据,您可以使用操作 rest_insert_ + post type
add_action("rest_insert_page", function (\WP_Post $post, $request, $creating) {
$metas = $request->get_param("meta");
if (is_array($metas)) {
foreach ($metas as $name => $value) {
update_post_meta($post->ID, $name, $value);
}
}
}, 10, 3);