WP Rest API v2自定义端点

时间:2018-03-15 16:39:05

标签: php wordpress

我正在使用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是否使用其他端点?

1 个答案:

答案 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;
  }
}