基本上我需要的是为每个帖子获取 category_name
和 parent_category_name
以响应 /wp-json/wp/v2/posts
在 categories
下,它只返回类别 ID 数组。这不是一个选项,因为有很多类别和子类别可以映射所有这些东西。
使用参数 _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/