<?php namespace DgoraWcas; // Exit if accessed directly if ( !defined( 'ABSPATH' ) ) { exit; } class ProductVariation extends Product { /** * @var bool|false|\WC_Product_Variation|null */ protected $wcProduct = null; public function __construct( $product ) { if ( !empty( $product ) && is_object( $product ) && is_a( $product, 'WC_Product_Variation' ) ) { $this->productID = $product->get_id(); $this->wcProduct = $product; } if ( !empty( $product ) && is_object( $product ) && is_a( $product, 'WP_Post' ) ) { $this->productID = absint( $product->ID ); $this->wcProduct = wc_get_product( $product ); } if ( is_numeric( $product ) && 'product_variation' === get_post_type( $product ) ) { $this->productID = absint( $product ); $this->wcProduct = wc_get_product( $product ); } $this->setLanguage(); } /** * Get parent product ID * * @return int */ public function getParentID() { return $this->wcProduct->get_parent_id(); } /** * Get parent product SKU * * @return string */ public function getParentSKU() { $parentData = $this->wcProduct->get_parent_data(); return ( isset( $parentData['sku'] ) ? $parentData['sku'] : '' ); } /** * WooCommerce raw product object * * @return \WC_Product_Variation */ public function getWooObject() { return $this->wcProduct; } /** * Check, if class is initialized correctly * @return bool */ public function isValid() { $isValid = false; if ( is_a( $this->wcProduct, 'WC_Product_Variation' ) ) { $isValid = true; } return $isValid; } /** * Prepare attributes for display * @return array */ public function getVariationAttributes() { $formattedAttributes = array(); $attributes = $this->wcProduct->get_variation_attributes(); if ( !empty( $attributes ) && is_array( $attributes ) ) { foreach ( $attributes as $key => $termSlug ) { if ( strpos( $key, 'attribute_' ) !== false ) { $taxonomy = str_replace( 'attribute_', '', $key ); $term = get_term_by( 'slug', $termSlug, $taxonomy ); if ( !empty( $term ) && is_object( $term ) && is_a( $term, 'WP_Term' ) ) { $attributeLabel = wc_attribute_label( $taxonomy ); $formattedAttributes[] = array( 'label' => $attributeLabel, 'value' => $term->name, ); } } } } return apply_filters( 'dgwt/wcas/product/variation_attributes', $formattedAttributes ); } /** * Set info about product language * * For variation we use language of parent product * * @return void */ public function setLanguage() { if ( !$this->isValid() ) { return; } $this->langCode = Multilingual::getPostLang( $this->getParentID() ); } }