使用 REST 从 Woocommerce 获取所有产品 API

Get all products from Woocommerce using REST API

我正在尝试使用 rest api 检索所有产品。我已阅读 this 个问题。我正在使用邮递员打电话。这是我的查询

https://squatwolf.com/wp-json/wc/v2/products?filter[posts_per_page] =-1

查询只显示 10 个结果。

我能够使用以下解决方案找到数据,

https://squatwolf.com/wc-api/v3/products?filter[limit] =-1
/wp-json/wc/v2/products

/wc-api/v3/products

两者似乎都有效,但为了获得一定数量的产品,我正在使用

/wc-api/v3/products?filter[limit]=

将产品数量放在那里。所有产品 -1

这不是最新的 API 端点:

/wc-api/v3/products?filter[limit]=

您必须逐页抓取页面才能获取所有产品:

$page = 1;
$products = [];
$all_products = [];
do{
  try {
    $products = $wc->get('products',array('per_page' => 100, 'page' => $page));
  }catch(HttpClientException $e){
    die("Can't get products: $e");
  }
  $all_products = array_merge($all_products,$products);
  $page++;
} while (count($products) > 0);

不再支持 filter 参数,see the Docs。所以你真的需要循环页面。

以下是获取 JavaScript 中所有产品的方法(对于 Gutenberg Block 商店):

let allProducts = [],
    page = 1

while (page !== false) {
    const products = yield actions.receiveProducts(`/wc-pb/v3/products?per_page=100&page=${page}`)

    if (products.length) {
        allProducts = allProducts.concat(products)
        page++
    } else {
        page = false // last page
    }
}

return actions.setProducts(allProducts)

将代码添加到 function.php

function maximum_api_filter($query_params) {
    $query_params['per_page']["maximum"]=100000;
    return $query_params;
}

add_filter('rest_product_collection_params', 'maximum_api_filter');

简单!!! 您可以使用任何数字代替 100。 就是https://woocommerce.github.io/woocommerce-rest-api-docs/#list-all-products

里面写的参数

https://squatwolf.com/wp-json/wc/v2/products?per_page=100

这对我有用。使用 API v3

/wc-api/v3/products?

默认检索前 500 个产品或

/wc-api/v3/products?per_page=900

获得900件商品

function maximum_api_filter($query_params) {
   $query_params['per_page']['maximum'] = 10000;
   $query_params['per_page']['default'] = 500;
   return $query_params;
}
add_filter('rest_product_collection_params', 'maximum_api_filter', 10, 1 );

对于 nodeJS:

   export const getAllProducts = async () => {
let allProducts = []
let breakLoop = false
let page = 1
while (!breakLoop) {

    const products = await api.get("products", { page })
        .then((response) => {
            return response.data
        })
        .catch((error) => {
            console.log(error.response.data);
        })
    if (products.length === 0 || !products)
        breakLoop = true

    allProducts = allProducts.concat(products)
    page = page + 1

} return 所有产品 }