使用 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
里面写的参数
这对我有用。使用 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 所有产品
}
我正在尝试使用 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
里面写的参数这对我有用。使用 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 所有产品 }