通过WP API v2添加Post Meta Fields

时间:2017-10-25 19:05:15

标签: wordpress wordpress-rest-api wp-api

我正在尝试使用WP API v2并插入Postman的帖子。

如果我发布这个原始请求,它会创建一个帖子就好了:

{
  "title": "Test Title",
  "content": "Test Content",
}

但是,我正在尝试添加一些自定义字段值,我似乎无法让它们工作。此请求会创建一个帖子,但不会添加任何元字段:

{
  "title": "Test Title",
  "content": "Test Content",
  "meta": {
    "foo": "bar",
    "foo2": "bar2"
  }
}

如何通过API端点foo将值foo2bar的元字段bar2https://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",也会导致新帖子发布而不是默认情况下的草稿。我是否可以在API POST请求中使用任何钩子或过滤器来确保添加自定义字段?

1 个答案:

答案 0 :(得分:7)

要在插入和更新时处理元数据,您可以使用操作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);