【问题标题】:How to fetch data from one API call with WooCommerce from RESTful API?如何从 RESTful API 中使用 WooCommerce 从一个 API 调用中获取数据?
【发布时间】:2020-09-14 06:52:43
【问题描述】:

我正在使用 WooCommerce 在 WordPress 中创建电子商务,并且正在使用 restful api。

问题来了,我需要获取所有产品及其变体,但是变体以 ID 的形式出现。 https://woocommerce.github.io/woocommerce-rest-api-docs/?javascript#list-all-products

这看起来像:

[
{
   name: "shirt",
   //more code
    variations: [1,4,2,5]
   // more code
},
{
   name: "shirt",
   //more code
    variations: [1,4,2,5]
   // more code
},
{
   name: "shirt",
   //more code
    variations: [1,4,2,5]
   // more code
}
]

问题是,我需要在那个响应中已经获取了变化。我已经创建了自己的端点,但我不能只使用插件吗?我不想仅仅为此重新构建整个功能。

我希望已经预先获取了变体,但是将图像保存在 id 中,这样当用户单击时,我们可以通过 id 获取图像,而不是在不需要时一次加载所有图像。

现在我唯一能做的就是每页调用 60 次 API。如何添加或“修改”响应,以便放置我需要的数据?

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    我猜你必须发出新的调用 /wp-json/wc/v3/products/<product_id>/variations 来获取变化。有时 API 提供 expand 选项,您可以在其中通过请求参数来操作响应结构。如果 API 不提供此功能(就像 Woocommerce 似乎提供的那样),您对响应结构没有影响。

    【讨论】:

    • 有什么替代方法?我不想为一页加载进行 60 次 api 调用。您是否建议创建我自己的宁静端点?我已经做了我想做的事,但我还需要创建其他功能,例如过滤、搜索等……你觉得使用 GRaphQL 怎么样?每个一页请求进行 60 次 API 调用可以吗,似乎太多了,尤其是在扩展时。另外,最后一个问题,如果几年不支持该插件,我是否仍应使用该插件?我可能只是看看他们的源代码,然后尝试制作我自己的插件?我不是专家
    • 60 个 api 调用来获取 60 个详细信息是最糟糕的选择,imo。 GraphQL 非常适合这一点。您可以在客户端确定要查询的字段。同样,您可以使用 REST 和“扩展”执行类似的操作。当然需要编码!我不是 WooCommerce 的专家。最后,如果查询所有这些实体的详细信息的计算成本很高,您可能不得不考虑某种缓存。一般问题:我们是在谈论一个您可以完全控制的 API,它托管在 WooCommerce 上?
    • 问题是,我已经对端点进行了编码以做我想做的事,但问题在于我需要重新编码分页、过滤和其他事情——但是为什么当他们已经做了它:/我还需要操纵几乎所有东西的响应。我在没有 GraphQL 的情况下做到了,但这太疯狂了。我说的是 WP 内置的 WooCommerce REAST API。我发现您可以添加过滤器并修改响应,所以我设法使用原始 api 来做到这一点,但我似乎无法弄清楚如何让产品显示产品总数、页面偏移量等;(
    【解决方案2】:

    您可以使用woocommerce_rest_prepare_product_object 过滤器。

    function mobile_product_data_alter($response, $post, $request) {
        if ($request->get_route() == '/wc/v3/products' && !empty($response->data) {
            $data = $response->get_data();
            if (count($data['variations']) > 0) {
                foreach ($data['variations'] as $variation_id) {
                    $variation = wc_get_product($variation_id);
                    // here you can get variation data and add it to your modified response
                    // like $data['variation_data'][$variation_id]['some_variable'] = $variation->get_data('some_variable');
                }
            }
            $response->set_data($data);
        }
        return $response;
    }
    add_filter( 'woocommerce_rest_prepare_product_object', 'alter_prepare_product_object', 20, 3 );
    

    我没有测试这段代码,但类似的代码对我有用。

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2021-01-03
      相关资源
      最近更新 更多