首页 > 解决方案 > 无法使用 get_post() 通过 REST API 检索自定义帖子类型数据

问题描述

我正在尝试从自定义帖子类型的单个帖子中获取数据REST API。使用get_posts()它可以正常工作:

function single_project($data) {
  $args = array(
    'post_type' => 'project',
    'posts_per_page'=> 1,
    'p' => $data
  );  
  return get_posts($args);
}

add_action('rest_api_init', function () {
  register_rest_route( 'project/v1', 'post/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'single_project',
    'args' => [
      'id'
    ]
  ));
});

但是在我的前端,我得到了一个数组,我必须从该数组的第一个也是唯一一个项目中获取数据,这并不好。

get_post()听起来像解决方案,但由于某种原因它不起作用:ID 没有通过 REST API 传递,我不明白为什么。

function single_project($data) {
  return get_post($data);
}

add_action() { ... }代码是相同的。

知道为什么它不起作用吗?

标签: wordpresswordpress-rest-api

解决方案


如果您查看文档(添加自定义端点 | WordPress REST API),您会注意到它$data实际上是一个数组,因此您的代码无法执行您期望的操作,因为您将数组传递给get_post()函数需要一个整数(帖子 ID)或一个WP_Post对象。

所以:

function single_project($data) {
  $post_ID = $data['id'];
  return get_post($post_ID);
}

add_action('rest_api_init', function () {
  register_rest_route( 'project/v1', 'post/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'single_project',
    'args' => [
      'id'
    ]
  ));
});

推荐阅读