php - WordPress REST API - 有没有办法在帖子响应中返回类别和父类别名称?

标签 php wordpress rest wordpress-rest-api

基本上我需要的是为每个帖子获取 category_nameparent_category_name 以响应 /wp-json/wp/v2/posts

categories 下,它只返回类别 ID 数组。这不是一个选项,因为有很多类别和子类别可以映射所有这些东西。

Post Categories screenshot

使用参数 _embed 我可以获得 "wp:term" 但这并不是我所需要的。它返回组合的类别和标签数组,有时它不会返回父类别。

有什么解决办法吗?我应该继续阅读文档还是有任何功能可以扩展 WordPress REST API 响应?

最佳答案

有很多方法可以使用您需要的信息来操作 WP Rest API。

一种方法是使用 rest_prepare_{$post_type} 直接在 REST 中过滤 post 对象过滤器

另一种方法是使用 register_rest_field 注册一个新的“REST 字段”功能。

使用第一个,您可以做一些简单的事情,例如获取类别名称并将它们作为新数据字段放入:

add_filter( 'rest_prepare_post', 'my_filter_post', 10, 3 );
function my_filter_post( $data, $post, $context ){

    // Does this have categories?
    if( !empty($data->data['categories']) ){

        // Loop through them all
        foreach( $data->data['categories'] as $category_id ){
            // Get the actual Category Object
            $category = get_category( $category_id );

            if( $category->parent == 0 ){
                // "top level" category
                $data->data['parent_category'] = $category->name;
            } else {
                // some child level category
                $data->data['child_category'] = $category->name;
            }
        }
    }

    return $data;
}

使用 REST 字段选项看起来像这样 WPSE answer ,尽管您当然需要遍历类别以查看哪个是父项,哪个是子项,等等。

无论哪种情况,您都可能需要调整逻辑并使用类似 get_ancestors() 的东西函数或 many "get hierarchical cat/terms" answers 之一,特别是如果你有超过“ parent > child ”的关系,或每个帖子的多个级别的类别 - 但 rest_prepare_{$post_type}register_rest_field 应该是能够很容易地获得您想要的结果。

关于php - WordPress REST API - 有没有办法在帖子响应中返回类别和父类别名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69182566/

相关文章:

PHP/MySQL 命名约定 : camelCase vs under_score?

php - 显示多行(WHILE)图标

c# - 如何在相关编辑器中使用 RestSharp 打开 HTTP 正文中作为二进制内容接收的文件

java - 为 HttpDelete 编程 Spring MVC Controller 和 jsp

具有不存在索引的默认值的 PHP 数组

javascript - 谷歌的 shebang#! ajax 抓取的语法不会导致抓取的页面

css - 跨浏览器字距适当调整技术

php - 带有第一方 Cookie 的 Google Analytics

wordpress - 您推荐哪些适用于 WordPress 的 openID 和 OAuth 插件?

api - UPS 运输 REST API