WooCommerce
Utilizzando l'estensione WooCommerce, possiamo recuperare i dati dei prodotti WooCommerce tramite GraphQL.
Tipi di prodotti WooCommerce
Il campo woocommerceProducts restituisce un tipo WooCommerceProductUnion, composto dai 4 possibili tipi di prodotto:
WooCommerceSimpleProductWooCommerceExternalProductWooCommerceGroupProductWooCommerceVariableProduct
A seconda di ciascun tipo, ci saranno diversi campi da interrogare.
Interfacce dei prodotti WooCommerce
Poiché 2 tipi di prodotto diversi (e anche le varianti di prodotto) possono condividere alcuni campi, questi sono stati aggiunti a interfacce che ciascun tipo di prodotto può o meno implementare.
Ad esempio, Shippable è per i prodotti che supportano la spedizione, Priceable per i prodotti che hanno un prezzo (un prodotto variante non ha un campo price, che viene fornito tramite le sue varianti), Taxable per i prodotti che supportano le impostazioni fiscali, e così via.
| Interfaccia | Descrizione |
|---|---|
WooCommerceProduct | Campi condivisi da tutti i tipi di prodotto (cioè implementati da tutti e 4 i tipi) |
WooCommerceProductOrProductVariation | Campi condivisi da tutti i tipi di prodotto e anche dalle varianti di prodotto |
WooCommerceCrossSellableProduct | Prodotti che supportano la definizione di prodotti di "vendita incrociata" |
WooCommerceDownloadableProductOrProductVariation | Prodotti (e varianti di prodotto) che supportano file scaricabili |
WooCommercePriceableProductOrProductVariation | Prodotti (e varianti di prodotto) che hanno un campo price |
WooCommerceShippableProductOrProductVariation | Prodotti (e varianti di prodotto) che supportano le impostazioni di spedizione |
WooCommerceTaxableProduct | Prodotti che supportano le impostazioni fiscali |
WooCommerceWithStockManagementProductOrProductVariation | Prodotti (e varianti di prodotto) che supportano la gestione delle scorte |
Recupero dei dati dei prodotti
La seguente query recupera i dati per tutti i tipi di prodotto, interrogando tutti i campi per ciascun tipo:
query FetchWooCommerceData
{
# Single product by ID
productByID: woocommerceProduct(by: { id: 43 }) {
__typename
...WooCommerceSimpleProductFields
...WooCommerceGroupProductFields
...WooCommerceExternalProductFields
...WooCommerceVariableProductFields
}
# Single product by slug
productBySlug: woocommerceProduct(by: { slug: "iphone-15-pro" }) {
__typename
id
name
slug
url
urlPath
sku
}
# Single product by SKU
productBySku: woocommerceProduct(by: { sku: "IPHONE15PRO" }) {
__typename
id
name
slug
url
urlPath
sku
}
# List of products
woocommerceProducts {
__typename
...WooCommerceSimpleProductFields
...WooCommerceGroupProductFields
...WooCommerceExternalProductFields
...WooCommerceVariableProductFields
}
woocommerceProductsCount
}
# ----------------------------------------------------------------------
# Fragments
# ----------------------------------------------------------------------
fragment WooCommerceSimpleProductFields on WooCommerceSimpleProduct {
# Specific fields for this type
# (empty)
# Common fields
...WooCommerceProductOrProductVariationInterfaceFields
...WooCommerceIdentifiableObjectInterfaceFields
...WooCommerceProductInterfaceFields
...WooCommerceCrossSellableProductInterfaceFields
...WooCommerceDownloadableProductOrProductVariationInterfaceFields
...WooCommercePriceableProductOrProductVariationInterfaceFields
...WooCommerceShippableProductOrProductVariationInterfaceFields
...WooCommerceTaxableProductInterfaceFields
...WooCommerceWithStockManagementProductOrProductVariationInterfaceFields
}
fragment WooCommerceGroupProductFields on WooCommerceGroupProduct {
# Specific fields for this type
hasChildren
childrenCount
minPrice
maxPrice
minPriceFormatted
maxPriceFormatted
children {
id
name
slug
sku
}
# Common fields
...WooCommerceProductOrProductVariationInterfaceFields
...WooCommerceIdentifiableObjectInterfaceFields
...WooCommerceProductInterfaceFields
}
fragment WooCommerceExternalProductFields on WooCommerceExternalProduct {
# Specific fields for this type
externalURL
buttonText
# Common fields
...WooCommerceProductOrProductVariationInterfaceFields
...WooCommerceIdentifiableObjectInterfaceFields
...WooCommerceProductInterfaceFields
...WooCommercePriceableProductOrProductVariationInterfaceFields
...WooCommerceTaxableProductInterfaceFields
}
fragment WooCommerceVariableProductFields on WooCommerceVariableProduct {
# Specific fields for this type
hasVariations
variationsCount
minPrice
maxPrice
minRegularPrice
maxRegularPrice
minSalePrice
maxSalePrice
priceRange
variations {
id
name
slug
sku
}
defaultAttributes {
taxonomy
termSlug
termObject {
id
name
slug
}
}
# Common fields
...WooCommerceProductOrProductVariationInterfaceFields
...WooCommerceIdentifiableObjectInterfaceFields
...WooCommerceProductInterfaceFields
...WooCommerceCrossSellableProductInterfaceFields
...WooCommerceTaxableProductInterfaceFields
}
# Interfaces
# ----------------------------------------------------------------------
fragment WooCommerceCrossSellableProductInterfaceFields on WooCommerceCrossSellableProduct {
crossSellIDs
crossSells {
id
name
slug
sku
}
}
fragment WooCommerceDownloadableProductOrProductVariationInterfaceFields on WooCommerceDownloadableProductOrProductVariation {
isDownloadable
downloadLimit
downloadExpiry
downloads
downloadsCount
}
fragment WooCommercePriceableProductOrProductVariationInterfaceFields on WooCommercePriceableProductOrProductVariation {
price
priceFormatted
regularPrice
regularPriceFormatted
salePrice
salePriceFormatted
onSale
dateOnSaleFrom
dateOnSaleFromStr
formattedDateOnSaleFromStr: dateOnSaleFromStr(format: "d/m/Y H:i:s")
dateOnSaleTo
dateOnSaleToStr
formattedDateOnSaleToStr: dateOnSaleToStr(format: "d/m/Y H:i:s")
}
fragment WooCommerceShippableProductOrProductVariationInterfaceFields on WooCommerceShippableProductOrProductVariation {
isVirtual
weight
length
width
height
dimensions
shippingClassID
shippingClass {
id
name
slug
description
count
}
}
fragment WooCommerceTaxableProductInterfaceFields on WooCommerceTaxableProduct {
taxStatus
taxClass
}
fragment WooCommerceWithStockManagementProductOrProductVariationInterfaceFields on WooCommerceWithStockManagementProductOrProductVariation {
manageStock
stockQuantity
stockStatus
backorders
backordersAllowed
backordered
soldIndividually
lowStockThreshold
}
fragment WooCommerceProductOrProductVariationInterfaceFields on WooCommerceProductOrProductVariation {
name
description
shortDescription
sku
globalUniqueID
isPurchasable
image {
id
src
altText
title
caption
}
imageID
catalogVisibility
status
date
dateStr
formattedDateStr: dateStr(format: "d/m/Y H:i:s")
modifiedDate
modifiedDateStr
formattedModifiedDateStr: modifiedDateStr(format: "d/m/Y H:i:s")
}
fragment WooCommerceIdentifiableObjectInterfaceFields on IdentifiableObject {
id
}
fragment WooCommerceProductInterfaceFields on WooCommerceProduct {
url
urlPath
slug
featured
totalSales
reviewsAllowed
averageRating
ratingCount
upsellIDs
upsells {
id
name
slug
sku
}
upsellsCount
crossSellsCount
purchaseNote
menuOrder
type
isVisible
categories {
id
name
slug
}
categoriesCount
tags {
id
name
slug
}
tagsCount
brands {
id
name
slug
}
brandsCount
galleryImages {
id
src
altText
title
caption
}
galleryImagesCount
attributes {
name
taxonomyObject {
id
name
slug
options {
id
name
slug
}
}
options
optionTaxonomyTermObjects {
id
name
slug
}
position
isVisible
isVariation
isTaxonomy
}
reviews {
id
content
author
}
reviewsCount
}Interrogare tipi di prodotto specifici
È possibile interrogare tipi di prodotto specifici filtrando il tipo di prodotto nel campo woocommerceProducts:
query FilterProductsByType {
woocommerceProducts(filter: { types: [simple, external, variable] }) {
__typename
... on WooCommerceProduct {
id
name
sku
}
... on WooCommercePriceableProductOrProductVariation {
price
}
}
woocommerceProductsCount(filter: { types: [simple, external, variable] })
}Oppure utilizzando il campo corrispondente a quel tipo:
woocommerceSimpleProductewoocommerceSimpleProductswoocommerceExternalProductewoocommerceExternalProductswoocommerceGroupProductewoocommerceGroupProductswoocommerceVariableProductewoocommerceVariableProducts
Prodotti semplici
Questa query recupera i dati dei prodotti semplici:
query FetchSimpleProducts {
woocommerceSimpleProducts {
__typename
id
name
sku
}
woocommerceSimpleProductsCount
}Prodotti esterni
Questa query recupera i dati dei prodotti esterni, inclusi l'URL esterno e il testo del pulsante:
query FetchExternalProducts {
woocommerceExternalProducts {
__typename
id
name
sku
externalURL
buttonText
}
woocommerceExternalProductsCount
}Prodotti raggruppati
Questa query recupera i dati dei prodotti raggruppati, inclusi i prodotti figli:
query FetchGroupProducts {
woocommerceGroupProducts {
__typename
id
name
sku
children {
id
name
}
childrenCount
}
woocommerceGroupProductsCount
}Prodotti variabili
Questa query recupera i dati dei prodotti variabili, incluse le varianti:
query FetchVariableProducts {
woocommerceVariableProducts {
__typename
id
name
sku
variations {
id
name
price
}
variationsCount
}
woocommerceVariableProductsCount
}Per i prodotti variabili, è possibile anche interrogare direttamente le varianti:
query GetProductVariations {
woocommerceProductVariations {
id
name
sku
price
parent {
id
name
sku
}
priceFormatted
regularPrice
regularPriceFormatted
salePrice
salePriceFormatted
stockStatus
stockQuantity
attributes {
taxonomy
termSlug
termObject {
id
name
slug
}
}
}
}Interrogare con filtri
È possibile filtrare, ordinare e paginare i prodotti in base a vari criteri:
query GetFilteredProducts {
woocommerceProducts(pagination: { limit: -1 }, filter: {
types: [simple, external],
visibility: visible,
categoriesBy: { ids: [81] },
tagsBy: { slugs: ["apple"] },
}) {
id
name
status
type
isVisible
catalogVisibility
categories(sort: { by: ID, order: DESC }) {
id
name
slug
}
tags {
id
name
slug
}
}
}