WordPress REST API - 是否有一种方法在文章响应中返回分类和父级分类名称?

3

我需要的是在/wp-json/wp/v2/posts响应中获取每个帖子的category_nameparent_category_name

categories下,只返回类别ID数组。这不是一个选项,因为有很多类别和子类别需要映射。

Post Categories screenshot

使用参数_embed可以获取"wp:term",但这并不完全符合我的需求。它返回组合了类别和标签的数组,有时也不会返回父类别。

有解决方案吗?我应该继续阅读文档还是有扩展WordPress REST API响应的函数?

1个回答

2

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

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

另一种方法是使用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()函数或其中的许多“获取分层cat/terms”答案之一,特别是如果你有多个“父级 > 子级”的关系或每篇文章有多个级别的分类 - 但rest_prepare_{$post_type}register_rest_field应该能够轻松地获得你想要的结果。

我尝试了上面的过滤器解决方案,并且它在@Xhynk那里起作用了。谢谢,但现在我有更大的问题。我不熟悉php,所以我在这里问是否有任何快速解决方案。如果每篇文章有多个类别怎么办。例如 因此,这里有三个父类别,每个父类别包含5个以上的子类别,并且每篇文章至少选择了一个父类别的一个子类别。然后您会得到3个随机排序的ID。输出将再次是parent_name->child_name或嵌套类别名称数组。也许你有什么想法? - cymmma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接