WooCommerce
เมื่อใช้ WooCommerce extension เราสามารถดึงข้อมูลสินค้าของ WooCommerce ผ่าน GraphQL ได้
ประเภทสินค้าของ WooCommerce
ฟิลด์ woocommerceProducts จะคืนค่าเป็นประเภท WooCommerceProductUnion ซึ่งประกอบด้วยประเภทสินค้าที่เป็นไปได้ 4 ประเภท:
WooCommerceSimpleProductWooCommerceExternalProductWooCommerceGroupProductWooCommerceVariableProduct
ฟิลด์ที่สามารถ query ได้จะแตกต่างกันไปขึ้นอยู่กับแต่ละประเภท
อินเทอร์เฟซสินค้าของ WooCommerce
เนื่องจากประเภทสินค้า 2 ประเภทที่แตกต่างกัน (รวมถึงรูปแบบย่อยของสินค้า) อาจใช้ฟิลด์บางส่วนร่วมกัน ฟิลด์เหล่านั้นจึงถูกเพิ่มเข้าไปในอินเทอร์เฟซที่แต่ละประเภทสินค้าอาจเลือกที่จะ implement หรือไม่ก็ได้
ตัวอย่างเช่น Shippable ใช้สำหรับสินค้าที่รองรับการจัดส่ง, Priceable สำหรับสินค้าที่มีราคา (สินค้าแบบรูปแบบย่อยจะไม่มีฟิลด์ price ซึ่งจะได้รับมาผ่านรูปแบบย่อยของมันแทน), Taxable สำหรับสินค้าที่รองรับการตั้งค่าภาษี เป็นต้น
| อินเทอร์เฟซ | คำอธิบาย |
|---|---|
WooCommerceProduct | ฟิลด์ที่ใช้ร่วมกันโดยทุกประเภทสินค้า (กล่าวคือ implement โดยทั้ง 4 ประเภท) |
WooCommerceProductOrProductVariation | ฟิลด์ที่ใช้ร่วมกันทั้งโดยทุกประเภทสินค้าและรูปแบบย่อยของสินค้า |
WooCommerceCrossSellableProduct | สินค้าที่รองรับการกำหนดสินค้าแบบ "cross-sell" |
WooCommerceDownloadableProductOrProductVariation | สินค้า (และรูปแบบย่อยของสินค้า) ที่รองรับไฟล์ที่ดาวน์โหลดได้ |
WooCommercePriceableProductOrProductVariation | สินค้า (และรูปแบบย่อยของสินค้า) ที่มีฟิลด์ price |
WooCommerceShippableProductOrProductVariation | สินค้า (และรูปแบบย่อยของสินค้า) ที่รองรับการตั้งค่าการจัดส่ง |
WooCommerceTaxableProduct | สินค้าที่รองรับการตั้งค่าภาษี |
WooCommerceWithStockManagementProductOrProductVariation | สินค้า (และรูปแบบย่อยของสินค้า) ที่รองรับการจัดการสต็อก |
การดึงข้อมูลสินค้า
query ต่อไปนี้จะดึงข้อมูลของสินค้าทุกประเภท โดย query ทุกฟิลด์ของแต่ละประเภทสินค้า:
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
}การ query ประเภทสินค้าเฉพาะ
คุณสามารถ query ประเภทสินค้าเฉพาะได้โดยการกรองประเภทสินค้าในฟิลด์ 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
สินค้าแบบ Simple
query นี้จะดึงข้อมูลของสินค้าแบบ simple:
query FetchSimpleProducts {
woocommerceSimpleProducts {
__typename
id
name
sku
}
woocommerceSimpleProductsCount
}สินค้าแบบ External
query นี้จะดึงข้อมูลของสินค้าแบบ external รวมถึง URL ภายนอกและข้อความบนปุ่ม:
query FetchExternalProducts {
woocommerceExternalProducts {
__typename
id
name
sku
externalURL
buttonText
}
woocommerceExternalProductsCount
}สินค้าแบบ Group
query นี้จะดึงข้อมูลของสินค้าแบบ group รวมถึงสินค้าย่อย:
query FetchGroupProducts {
woocommerceGroupProducts {
__typename
id
name
sku
children {
id
name
}
childrenCount
}
woocommerceGroupProductsCount
}สินค้าแบบ Variable
query นี้จะดึงข้อมูลของสินค้าแบบ variable รวมถึงรูปแบบย่อย:
query FetchVariableProducts {
woocommerceVariableProducts {
__typename
id
name
sku
variations {
id
name
price
}
variationsCount
}
woocommerceVariableProductsCount
}สำหรับสินค้าแบบ variable คุณยังสามารถ query รูปแบบย่อยได้โดยตรงอีกด้วย:
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 ด้วยฟิลเตอร์
คุณสามารถกรอง จัดเรียง และแบ่งหน้าสินค้าได้ตามเกณฑ์ต่าง ๆ:
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
}
}
}