คู่มือการใช้งาน
คู่มือการใช้งานWooCommerce

WooCommerce

เมื่อใช้ WooCommerce extension เราสามารถดึงข้อมูลสินค้าของ WooCommerce ผ่าน GraphQL ได้

ประเภทสินค้าของ WooCommerce

ฟิลด์ woocommerceProducts จะคืนค่าเป็นประเภท WooCommerceProductUnion ซึ่งประกอบด้วยประเภทสินค้าที่เป็นไปได้ 4 ประเภท:

  • WooCommerceSimpleProduct
  • WooCommerceExternalProduct
  • WooCommerceGroupProduct
  • WooCommerceVariableProduct

ฟิลด์ที่สามารถ 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] })
}

หรือใช้ฟิลด์ที่ตรงกับประเภทนั้น ๆ:

  • woocommerceSimpleProduct and woocommerceSimpleProducts
  • woocommerceExternalProduct and woocommerceExternalProducts
  • woocommerceGroupProduct and woocommerceGroupProducts
  • woocommerceVariableProduct and woocommerceVariableProducts

สินค้าแบบ 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
    }
  }
}