user379888
user379888

Reputation:

Get all products from Woocommerce using REST API

I am trying to retrieve all products using rest api. I have read this question. I am using postman to make calls. Here is my query

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

The query shows only 10 results.

Upvotes: 8

Views: 64476

Answers (10)

Mohammad Salehi
Mohammad Salehi

Reputation: 776

It may be too late to answer this question, but almost all the answers here are using the /wc-api/v3/products endpoint, which is now deprecated and will be removed in WooCommerce v9.

As mentioned in the WooCommerce REST API documentation You can use something like this instead:
https://example.com/wp-json/wc/v3/products?per_page=100

Upvotes: 0

Malki Mohamed
Malki Mohamed

Reputation: 1688

If you are using a Laravel package like codexshaper/laravel-woocommerce or corcel/woocommerce or some other package, be careful with the product type in your WooCommerce website. By default when you call $products = Product::all(); it just gives you the products with simple product-type.

This is the list of default product-type in WooCommece:

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

So You have to specify the product-type of you want to get other products.

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

Upvotes: 0

Salim Lyoussi
Salim Lyoussi

Reputation: 1

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

    return allProducts
 }

Upvotes: 0

Muhwezi Jerald Basasa
Muhwezi Jerald Basasa

Reputation: 616

This worked for me. With API v3

/wc-api/v3/products?

Retrieve first 500 products by default or

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

To get 900 products

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

Upvotes: 5

Engineer beings
Engineer beings

Reputation: 11

simple!!! you can use any number in place of 100. Its just the parameter written in https://woocommerce.github.io/woocommerce-rest-api-docs/#list-all-products

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

Upvotes: 1

Akelmj
Akelmj

Reputation: 99

add code to 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');

Upvotes: 4

Fabian von Ellerts
Fabian von Ellerts

Reputation: 5201

The filter parameter is no longer supported, see the Docs. So you really need to loop the pages.

Here is how to get all products in JavaScript (for a Gutenberg Block store):

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)

Upvotes: 4

spartanz51
spartanz51

Reputation: 341

This isn't the latest API endpoint:

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

You have to fetch page per page to get all the products:

$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);

Upvotes: 10

Sudipta Bhattacharyya
Sudipta Bhattacharyya

Reputation: 111

/wp-json/wc/v2/products

and

/wc-api/v3/products

both seems to work, but to get certain number of products I'm using

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

put the number of products there. -1 for all products

Upvotes: 0

user379888
user379888

Reputation:

I was able to find the data using the following solution,

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

Upvotes: 7

Related Questions