WooCommerce
Используя расширение WooCommerce, мы можем получать данные о продуктах WooCommerce через GraphQL.
Типы продуктов WooCommerce
Поле woocommerceProducts возвращает тип WooCommerceProductUnion, состоящий из 4 возможных типов продуктов:
WooCommerceSimpleProductWooCommerceExternalProductWooCommerceGroupProductWooCommerceVariableProduct
В зависимости от каждого типа будут доступны разные поля для запроса.
Интерфейсы продуктов WooCommerce
Поскольку 2 разных типа продукта (а также вариации продукта) могут иметь общие поля, они были добавлены в Интерфейсы, которые каждый тип продукта может или не может реализовывать.
Например, Shippable — для продуктов, поддерживающих доставку, Priceable — для продуктов, имеющих цену (у вариативного продукта нет поля price — оно предоставляется через его вариации), Taxable — для продуктов, поддерживающих настройки налогов, и так далее.
| Интерфейс | Описание |
|---|---|
WooCommerceProduct | Поля, общие для всех типов продуктов (т.е. реализованные всеми 4 типами) |
WooCommerceProductOrProductVariation | Поля, общие как для всех типов продуктов, так и для вариаций продуктов |
WooCommerceCrossSellableProduct | Продукты, поддерживающие определение продуктов «перекрёстных продаж» |
WooCommerceDownloadableProductOrProductVariation | Продукты (и вариации продуктов), поддерживающие загружаемые файлы |
WooCommercePriceableProductOrProductVariation | Продукты (и вариации продуктов), имеющие поле price |
WooCommerceShippableProductOrProductVariation | Продукты (и вариации продуктов), поддерживающие настройки доставки |
WooCommerceTaxableProduct | Продукты, поддерживающие настройки налогов |
WooCommerceWithStockManagementProductOrProductVariation | Продукты (и вариации продуктов), поддерживающие управление запасами |
Получение данных о продуктах
Следующий запрос извлекает данные для всех типов продуктов, запрашивая все поля для каждого типа продукта:
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
}Запрос конкретных типов продуктов
Вы можете запрашивать определённые типы продуктов, фильтруя тип продукта в поле woocommerceProducts:
query FilterProductsByType {
woocommerceProducts(filter: { types: [simple, external, variable] }) {
__typename
... on WooCommerceProduct {
id
name
sku
}
... on WooCommercePriceableProductOrProductVariation {
price
}
}
woocommerceProductsCount(filter: { types: [simple, external, variable] })
}Или используя соответствующее поле для этого типа:
woocommerceSimpleProductandwoocommerceSimpleProductswoocommerceExternalProductandwoocommerceExternalProductswoocommerceGroupProductandwoocommerceGroupProductswoocommerceVariableProductandwoocommerceVariableProducts
Простые продукты
Этот запрос извлекает данные для простых продуктов:
query FetchSimpleProducts {
woocommerceSimpleProducts {
__typename
id
name
sku
}
woocommerceSimpleProductsCount
}Внешние продукты
Этот запрос извлекает данные для внешних продуктов, включая внешний URL и текст кнопки:
query FetchExternalProducts {
woocommerceExternalProducts {
__typename
id
name
sku
externalURL
buttonText
}
woocommerceExternalProductsCount
}Групповые продукты
Этот запрос извлекает данные для групповых продуктов, включая дочерние элементы:
query FetchGroupProducts {
woocommerceGroupProducts {
__typename
id
name
sku
children {
id
name
}
childrenCount
}
woocommerceGroupProductsCount
}Вариативные продукты
Этот запрос извлекает данные для вариативных продуктов, включая вариации:
query FetchVariableProducts {
woocommerceVariableProducts {
__typename
id
name
sku
variations {
id
name
price
}
variationsCount
}
woocommerceVariableProductsCount
}Для вариативных продуктов также можно запрашивать вариации напрямую:
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
}
}
}
}Запрос с фильтрами
Вы можете фильтровать, сортировать и разбивать на страницы продукты по различным критериям:
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
}
}
}