通过 WP API v2 添加 Post Meta 字段

Posted

技术标签:

【中文标题】通过 WP API v2 添加 Post Meta 字段【英文标题】:Add Post Meta Fields via WP API v2 【发布时间】:2018-04-07 00:07:02 【问题描述】:

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

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


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

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


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

如何通过 API 端点 https://my-site.com/wp-json/wp/v2/posts 发布元字段 foofoo2 以及值 barbar2

编辑:似乎自定义字段不会在 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】:

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

【讨论】:

你,我的朋友,绝对是救生员!我已经为此拉头发2天了!但是,请问\WP_Post $post在函数声明中的作用是什么?我尝试了以下方法,它奏效了:add_action( 'rest_insert_post', function( $post, $request, $creating ) 只是想知道你的答案是什么? 这是一个类型声明php.net/… 谢谢它真的很有帮助

以上是关于通过 WP API v2 添加 Post Meta 字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WP Rest API v2 创建评论?

php WP Post Meta Info短信

php WP Custom字段 - 获取post meta

wordpress 数据库(wp_post_meta)结构效率

sql 在wp_options和wp_post_meta表中查找大型条目

sql 在wp_options和wp_post_meta表中查找大型条目