Wordpress API 返回空元数组
Wordpress API returning empty meta array
如果您在 wordpress 博客上点击 /wp-json/wp/v2/comments?post=X
,该 post ID 的评论数 returns JSON。我能够毫无问题地获得结果,但是 meta
是一个空数组,而不是具有与评论相关的任何元值。
我也曾尝试访问 /wp-json/wp/v2/comments/X
来拉取个人评论,但这也返回了一个空的 meta
数组。
wp_commentmeta table 中保存了一个 rating
字段,我希望返回此字段,以便我可以在第 3 方网站上显示来自 woocommerce 的评论。
我发现 WooCommerce 本身有自己的 API,它执行 return 评分的元值,但他们想要一个 API 键来进行诸如获取评论之类的操作。我查看了他们用来构建响应的方法,他们只是循环浏览 get_comments()
结果,然后通过执行 get_comment_meta($commentid, 'rating')
创建一个附加了 rating
的新数组
我不能依赖 API 密钥来满足我的需要,因为这对我来说是公开可用的,所以我添加了一个 API 端点 /wp-json/wc/v2/reviews
现在可以做什么我需要
add_action('rest_api_init', 'comments_api_endpoint');
function comments_api_endpoint()
{
register_rest_route( 'wc/v2', '/reviews/', array(
'methods' => ['GET'],
'callback' => 'comments_api',
));
}
function comments_api()
{
$data = [];
$reviews = get_approved_comments($_GET['id']);
foreach($reviews as $review) {
$data[] = [
'author' => $review->comment_author,
'rating' => get_comment_meta($review->comment_ID, 'rating', true),
'content' => $review->comment_content
];
}
return $data;
}
如果您在 wordpress 博客上点击 /wp-json/wp/v2/comments?post=X
,该 post ID 的评论数 returns JSON。我能够毫无问题地获得结果,但是 meta
是一个空数组,而不是具有与评论相关的任何元值。
我也曾尝试访问 /wp-json/wp/v2/comments/X
来拉取个人评论,但这也返回了一个空的 meta
数组。
wp_commentmeta table 中保存了一个 rating
字段,我希望返回此字段,以便我可以在第 3 方网站上显示来自 woocommerce 的评论。
我发现 WooCommerce 本身有自己的 API,它执行 return 评分的元值,但他们想要一个 API 键来进行诸如获取评论之类的操作。我查看了他们用来构建响应的方法,他们只是循环浏览 get_comments()
结果,然后通过执行 get_comment_meta($commentid, 'rating')
rating
的新数组
我不能依赖 API 密钥来满足我的需要,因为这对我来说是公开可用的,所以我添加了一个 API 端点 /wp-json/wc/v2/reviews
现在可以做什么我需要
add_action('rest_api_init', 'comments_api_endpoint');
function comments_api_endpoint()
{
register_rest_route( 'wc/v2', '/reviews/', array(
'methods' => ['GET'],
'callback' => 'comments_api',
));
}
function comments_api()
{
$data = [];
$reviews = get_approved_comments($_GET['id']);
foreach($reviews as $review) {
$data[] = [
'author' => $review->comment_author,
'rating' => get_comment_meta($review->comment_ID, 'rating', true),
'content' => $review->comment_content
];
}
return $data;
}