programing

REST API를 이용하여 우커머스의 모든 제품 가져오기

bestprogram 2023. 10. 9. 23:26

REST API를 이용하여 우커머스의 모든 제품 가져오기

rest api를 이용해서 모든 제품을 회수하려고 합니다.는 이 질문을 읽은 적이 있습니다.저는 집배원을 이용해서 전화를 걸고 있습니다.여기 제 질문이 있습니다.

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

쿼리에는 10개의 결과만 표시됩니다.

이것은 최신 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);

다음과 같은 솔루션을 사용하여 데이터를 찾을 수 있었습니다.

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

저는 이게 통했어요.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 );

filter파라미터는 더 이상 지원되지 않습니다. 문서를 참조하십시오.그래서 당신은 정말로 그 페이지들을 돌려야 합니다.

다음은 모든 제품을 자바스크립트로 얻는 방법입니다(구텐베르크 블록 스토어의 경우).

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 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-allproducts에 적혀있는 매개변수일 뿐입니다.

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

/wp-json/wc/v2/products

그리고.

/wc-api/v3/products

둘 다 작동하는 것 같지만, 제가 사용하고 있는 제품의 개수를 파악하기 위해서입니다.

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

제품의 개수를 거기에 넣습니다. -1개의 제품에 해당합니다.

노드에 대하여JS:

  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
        } else {
            allProducts = allProducts.concat(products)
            page = page + 1
        }
    }

    return allProducts
 }

만약 라라벨 패키지를 사용한다면, 예를 들어codexshaper/laravel-woocommerce아니면corcel/woocommerce또는 다른 패키지도 있습니다. WooCommerce 웹사이트의 제품 종류에 주의하세요.전화할 때 기본적으로$products = Product::all();그것은 단지 당신에게 제품을 줄 뿐입니다.simple상품형의

다음은 WooComce의 기본 제품 유형 목록입니다.

'simple', 'grouped', 'external', 'variable', 'external', 'subscription', 'variable-subscription'

그래서 다른 제품을 받고 싶은 제품 종류를 지정해야 합니다.

$product = WooProduct::all(['per_page'=> '100','type'=>'simple']);

언급URL : https://stackoverflow.com/questions/48476534/get-all-products-from-woocommerce-using-rest-api