【问题标题】:WP Rest API v2 custom endpointsWP Rest API v2 自定义端点
【发布时间】:2018-03-15 16:39:04
【问题描述】:

我正在使用 wp rest api 在我的 ionic2 应用程序中提供 woocommerce 产品。所以,我想只提供 in_stock 参数为 true 的产品。我的插件在rest api和移动应用程序之间进行通信使用wp-json/wc/v1/products的版本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 是否使用其他端点?

【问题讨论】:

  • 您的地理数据保存在数据库中的什么位置?
  • 在 postmeta 表中
  • 很抱歉给您带来不便。在写这篇评论之前,我不明白你的问题。我认为您只想退回那些 in_stock 的产品。正确的?请参考下面我的回答。
  • 你能回答如何只修改特定帖子的 wp-json 响应吗?请参阅:stackoverflow.com/questions/49330395/…

标签: php wordpress


【解决方案1】:

您可以通过条件“in_stock”为真来尝试这个,但问题是如果在“in_stock”为假时您不会返回任何内容,那么 woocommerce 会自动将产品响应返回为 null。

else条件可以用空白数组代替null来修改。

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

【讨论】:

  • 如果状态不起作用。这样,我就没有得到这个函数的任何信息。但不同的产品有 in_stock 真。但是,我想知道为什么这个函数适用于 V1 而不是 V2。似乎有变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 2021-04-05
  • 2018-01-09
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多