使用WC Vendors时,WooCommerce API返回产品列表无法获取商家ID与名称
解决WooCommerce v3 REST API返回商家ID和名称的问题
首先,你遇到的问题核心原因是**woocommerce_api_product_response是旧版REST API(v1/v2)的钩子**,而你使用的是v3版本的API,所以这个钩子根本不会触发。下面是针对v3 API的正确解决方案:
正确的代码实现
替换你当前的代码,在主题的functions.php中添加以下内容:
add_filter( 'woocommerce_rest_prepare_product', 'add_vendor_data_to_product_api_response', 10, 3 ); function add_vendor_data_to_product_api_response( $response, $product, $request ) { // 用WC Vendors官方函数获取产品关联商家,比直接读post_author更可靠 $vendor = get_wcv_product_vendor( $product->get_id() ); if ( $vendor ) { // 将商家ID和名称添加到API响应数据中 $response->data['vendor_id'] = $vendor->id; $response->data['vendor_name'] = $vendor->user_data->display_name; } else { // 没有关联商家时返回默认值(可根据需求调整) $response->data['vendor_id'] = 0; $response->data['vendor_name'] = '站点管理员'; } return $response; }
为什么原来的代码不生效?
- WooCommerce v3 REST API采用了全新的钩子命名规则:
woocommerce_rest_prepare_{post_type},对应产品的就是woocommerce_rest_prepare_product。 - 旧钩子
woocommerce_api_product_response仅适用于v1/v2版本的API,在v3版本中已经被彻底弃用,所以你的代码不会被执行。
额外注意事项
- 权限检查:确保你使用的API密钥拥有
read_products权限,否则可能无法获取完整的产品数据。 - 缓存清除:修改代码后,记得清除WordPress缓存和浏览器缓存,避免请求到旧的响应结果。
- 兼容性保障:使用
get_wcv_product_vendor()是WC Vendors官方推荐的方式,能兼容插件的特殊逻辑(比如部分场景下商家并非直接的文章作者)。
内容的提问来源于stack exchange,提问作者Rob Turkruyer
相关产品推荐
相关产品推荐

