127 lines
3.3 KiB
PHP
127 lines
3.3 KiB
PHP
<?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() );
|
|
}
|
|
|
|
} |