我正在使用wp rest api在我的ionic2应用程序中提供woocommerce产品。所以,我想只提供in_stock参数为true的产品。我的插件,在rest api和移动应用程序之间进行通信正在使用wp-json / wc / v1 /产品的第1版 但版本1没有提供in_stock参数,这就是为什么我想使用wp-json / wc / v2 / products。这也没有任何问题。但是,我在json响应中遗漏了一些数据。我的插件中的以下函数将地理数据和地址添加到响应
add_filter( 'woocommerce_rest_prepare_product', array( $this, 'get_vendor_product' ),10,3);
public function get_vendor_product($response, $post, $request){
if(isset($request['is_vendor']) && $request['is_vendor']==true){
$vendor_id=$request['vendor_id'];
$shop_name=WCV_Vendors::get_vendor_shop_name($vendor_id);
$shop_desc=get_user_meta( $vendor_id, 'pv_shop_description',true);
$response->data['shop_name']= $shop_name;
$response->data['shop_desc']= $shop_desc;
$response->data['vendor_id']= $request['vendor_id'];
$response->data['vendor_address']= get_user_meta($vendor_id,'sow_vendor_address',true);
$response->data['vendor_geocoding']= get_user_meta($vendor_id,'sow_vendor_geocoding',true);
}else if(isset($request['id']) && WCV_Vendors::is_vendor($post->post_author)){
$response->data['vendor_id']= $post->post_author;
$shop_name=WCV_Vendors::get_vendor_shop_name($post->post_author);
$shop_desc=get_user_meta( $post->post_author, 'pv_shop_description',true);
$response->data['shop_name']= $shop_name;
$response->data['shop_desc']= $shop_desc;
$response->data['vendor_address']= get_user_meta($post->post_author,'sow_vendor_address',true);
$response->data['vendor_geocoding']= get_user_meta($post->post_author,'sow_vendor_geocoding',true);
}else{
if(WCV_Vendors::is_vendor($post->post_author)){
$response->data['vendor_address']= get_user_meta($post->post_author,'sow_vendor_address',true);
$response->data['vendor_geocoding']= get_user_meta($post->post_author,'sow_vendor_geocoding',true);
}
}
return $response;
}
我无法确定,为什么当我使用版本2(wp-json / wc / v2 / products)时,地理数据不在响应中。版本2是否使用其他端点?
答案 0 :(得分:0)
您可以通过条件" in_stock"来尝试这个。既然如此,那么问题是,如果你在" in_stock"如果是假的,那么woocommerce会自动将产品响应返回为null。
您可以使用空白数组进行修改,而不是使用else条件修改。
add_filter( 'woocommerce_rest_prepare_product', array( $this, 'get_vendor_product' ),10,3);
public function get_vendor_product($response, $post, $request){
if( $response->data['in_stock'] === true ) {
if(isset($request['is_vendor']) && $request['is_vendor']==true){
$vendor_id=$request['vendor_id'];
$shop_name=WCV_Vendors::get_vendor_shop_name($vendor_id);
$shop_desc=get_user_meta( $vendor_id, 'pv_shop_description',true);
$response->data['shop_name']= $shop_name;
$response->data['shop_desc']= $shop_desc;
$response->data['vendor_id']= $request['vendor_id'];
$response->data['vendor_address']= get_user_meta($vendor_id,'sow_vendor_address',true);
$response->data['vendor_geocoding']= get_user_meta($vendor_id,'sow_vendor_geocoding',true);
}else if(isset($request['id']) && WCV_Vendors::is_vendor($post->post_author)){
$response->data['vendor_id']= $post->post_author;
$shop_name=WCV_Vendors::get_vendor_shop_name($post->post_author);
$shop_desc=get_user_meta( $post->post_author, 'pv_shop_description',true);
$response->data['shop_name']= $shop_name;
$response->data['shop_desc']= $shop_desc;
$response->data['vendor_address']= get_user_meta($post->post_author,'sow_vendor_address',true);
$response->data['vendor_geocoding']= get_user_meta($post->post_author,'sow_vendor_geocoding',true);
}else{
if(WCV_Vendors::is_vendor($post->post_author)){
$response->data['vendor_address']= get_user_meta($post->post_author,'sow_vendor_address',true);
$response->data['vendor_geocoding']= get_user_meta($post->post_author,'sow_vendor_geocoding',true);
}
}
return $response;
}
}