当前位置: 首页 > 知识库问答 >
问题:

WP REST API自定义endpoint如何返回自定义post数据?

笪欣嘉
2023-03-14

TL;DR:如何选择一个WP REST API自定义endpoint的响应的每一点信息?

长版

如果我想使用WP REST API构建自定义endpoint - 从不同的帖子类型发送特定帖子数据 - 按照手册中的示例,我得到了这个:

function custom_endpoint ( $data ) {
    $posts = get_posts( array(
        'numberposts'   => -1,
        'post_type'     => array('event', 'post'),
    ) );

    if ( empty( $posts ) ) {
        return null;
    }

    return $posts;
}


add_action( 'rest_api_init', function () {
    register_rest_route( 'wp/v1', '/custom-endpoint/', array(
        'methods' => 'GET',
        'callback' => 'custom_endpoint',
    ) );
} );

但是get_post()函数没有返回一些数据,如果您希望在页面中显示帖子,这些数据是非常有用的(例如类别id、特色图片)。那么,我如何构建一个自定义endpoint来返回:

    < li >文章标题 < li >发布日期 < li >帖子作者 < li >帖子摘录 < li >帖子内容 < li >张贴特色图片(如更好的特色图片插件) < li >文章类别 < li >文章类型 < li >帖子链接 < li >其他usfeul信息

共有2个答案

蔺弘
2023-03-14

由于WP Codex规定访问所有数据:

访问所有post数据某些post相关数据不可用于get_post。

您可以通过以下方式获得它们:

$posts = get_posts( array(
        'numberposts'   => -1,
        'post_type'     => array('event', 'post'),
    ) );

$response = [];
foreach ( $posts as $post ) {
  $response[] = [
    'content' => $post->CONTENT.
     'title' =>  $post->TITLE,
      .....
  ]
}

return $response; (in a WP way of constructing json responses)
郎鹤龄
2023-03-14

根据@fsn的答案,我得到了以下想法:获取get_posts()返回的对象,并使用其他Wordpress函数向其添加新的比例。

function custom_endpoint ( $data ) {
$posts = get_posts( array(
    'numberposts'   => -1,
    //Here we can get more than one post type. Useful to a home page.
    'post_type'     => array('event', 'post'), 
) );


if ( empty( $posts ) ) {
    return null;
}


$args = array();    

foreach ( $posts as $post ) {

 //Get informations that is not avaible in get_post() function and store it in variables.
   $category = get_the_category( $post->ID );
   $img_thumb = get_the_post_thumbnail_url( $post->ID, 'thumbnail' );       // Thumbnail (default 150px x 150px max)
   $img_medium = get_the_post_thumbnail_url( $post->ID, 'medium' );          // Medium resolution (default 300px x 300px max)
   $img_large = get_the_post_thumbnail_url( $post->ID, 'large' );           // Large resolution (default 640px x 640px max)
   $img_full = get_the_post_thumbnail_url( $post->ID, 'full' );            // Full resolution (original size uploaded)

 //Adds the informations to the post object.
   $post->category = $category; 
   $post->img_tumb = $img_thumb; 
   $post->img_medium = $img_medium; 
   $post->img_large = $img_large; 
   $post->img_full = $img_full;

   array_push($args, $post);
   }
return $args;
}
add_action( 'rest_api_init', function () {
  register_rest_route( 'wp/v1', '/custom-endpoint/', array(
    'methods' => 'GET',
    'callback' => 'custom_endpoint',
) );

} );

工作正常!

感谢@fsn的贡献。

 类似资料:
  • 我有一个用户元的自定义endpoint,我已成功注册到WP REST API并为其创建了自定义endpoint。然而,每当我从我的单页应用程序(使用的JS框架是Vue)发出GET和POST请求时,返回值为“false” 我怀疑这是由于使用JWT Authoration for WP REST API插件存在一些授权问题而发生的。 以下是我在functions.php应用程序中采取的步骤: 首先,我

  • 我正在尝试减少使用Rest API时返回的JSON。我可以在查询中使用“_embed”参数让它工作,但是它返回了大量我不需要的数据。因此,根据WP最佳实践,我想设置一个自定义endpoint,并在它的回调中调用一个函数来输出我需要的三个项目。看起来很简单,但是当我尝试的时候,它对所有的节点都返回NULL。在我的functions.php档案中,我有: 然后路由并回调自定义endpoint 当我使用

  • 改变json输出策略 默认使用阿里的fastjson进行json输出 JSON.toJSONString(obj) 如果要更换输出策略,操作方式如下: @Override protected void initApiConfig(ApiConfig apiConfig) { ... // 自定义json格式输出,将null字符串变成"" apiConfig.setJson

  • 网关默认对业务结果进行合并,然后返回统一的格式。 针对alipay.story.find接口,微服务端返回结果如下: { "name": "白雪公主", "id": 1, "gmtCreate": 1554193987378 } 网关合并后,最终结果如下 { "alipay_story_find_response": { "msg": "Succe

  • 我目前正在从事一个需要WordPress网站和简单的REST api的项目。我发现WordPress有自己的REST api,并决定扩展其功能以满足我的需求。我需要做的就是拥有GET和POST请求的endpoint,这些endpoint可以从与WordPress没有直接关系的表(但在同一个数据库中)中检索/插入数据。我成功地实现了所有GET请求,但是,我正在努力让POST的工作。 我定义了这个路由