Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
woocommerce
/
includes
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php defined('ABSPATH') || exit; class WC_Product_Variation extends WC_Product_Simple { protected $post_type = 'product_variation'; protected $parent_data = array('title' => '', 'sku' => '', 'manage_stock' => '', 'backorders' => '', 'stock_quantity' => '', 'weight' => '', 'length' => '', 'width' => '', 'height' => '', 'tax_class' => '', 'shipping_class_id' => '', 'image_id' => '', 'purchase_note' => ''); public function __construct($product = 0) { $this->data['tax_class'] = 'parent'; $this->data['attribute_summary'] = ''; parent::__construct($product); } protected function get_hook_prefix() { return 'woocommerce_product_variation_get_'; } public function get_type() { return 'variation'; } public function get_stock_managed_by_id() { return 'parent' === $this->get_manage_stock() ? $this->get_parent_id() : $this->get_id(); } public function get_title() { return apply_filters('woocommerce_product_title', $this->parent_data['title'], $this); } public function get_formatted_name() { if ($this->get_sku()) { $identifier = $this->get_sku(); } else { $identifier = '#' . $this->get_id(); } $formatted_variation_list = wc_get_formatted_variation($this, true, true, true); return sprintf('%2$s (%1$s)', $identifier, $this->get_name()) . '<span class="description">' . $formatted_variation_list . '</span>'; } public function get_variation_attributes($with_prefix = true) { $attributes = $this->get_attributes(); $variation_attributes = array(); $prefix = $with_prefix ? 'attribute_' : ''; foreach ($attributes as $key => $value) { $variation_attributes[$prefix . $key] = $value; } return $variation_attributes; } public function get_attribute($attribute) { $attributes = $this->get_attributes(); $attribute = sanitize_title($attribute); if (isset($attributes[$attribute])) { $value = $attributes[$attribute]; $term = taxonomy_exists($attribute) ? get_term_by('slug', $value, $attribute) : false; return !is_wp_error($term) && $term ? $term->name : $value; } $att_str = 'pa_' . $attribute; if (isset($attributes[$att_str])) { $value = $attributes[$att_str]; $term = taxonomy_exists($att_str) ? get_term_by('slug', $value, $att_str) : false; return !is_wp_error($term) && $term ? $term->name : $value; } return ''; } public function get_permalink($item_object = null) { $url = get_permalink($this->get_parent_id()); if (!empty($item_object['variation'])) { $data = $item_object['variation']; } elseif (!empty($item_object['item_meta_array'])) { $data_keys = array_map('wc_variation_attribute_name', wp_list_pluck($item_object['item_meta_array'], 'key')); $data_values = wp_list_pluck($item_object['item_meta_array'], 'value'); $data = array_intersect_key(array_combine($data_keys, $data_values), $this->get_variation_attributes()); } else { $data = $this->get_variation_attributes(); } $data = array_filter($data, 'wc_array_filter_default_attributes'); if (empty($data)) { return $url; } $data = array_map('urlencode', $data); $keys = array_map('urlencode', array_keys($data)); return add_query_arg(array_combine($keys, $data), $url); } public function add_to_cart_url() { $url = $this->is_purchasable() ? remove_query_arg('added-to-cart', add_query_arg(array('variation_id' => $this->get_id(), 'add-to-cart' => $this->get_parent_id()), $this->get_permalink())) : $this->get_permalink(); return apply_filters('woocommerce_product_add_to_cart_url', $url, $this); } public function get_sku($context = 'view') { $value = $this->get_prop('sku', $context); if ('view' === $context && empty($value)) { $value = apply_filters($this->get_hook_prefix() . 'sku', $this->parent_data['sku'], $this); } return $value; } public function get_weight($context = 'view') { $value = $this->get_prop('weight', $context); if ('view' === $context && empty($value)) { $value = apply_filters($this->get_hook_prefix() . 'weight', $this->parent_data['weight'], $this); } return $value; } public function get_length($context = 'view') { $value = $this->get_prop('length', $context); if ('view' === $context && empty($value)) { $value = apply_filters($this->get_hook_prefix() . 'length', $this->parent_data['length'], $this); } return $value; } public function get_width($context = 'view') { $value = $this->get_prop('width', $context); if ('view' === $context && empty($value)) { $value = apply_filters($this->get_hook_prefix() . 'width', $this->parent_data['width'], $this); } return $value; } public function get_height($context = 'view') { $value = $this->get_prop('height', $context); if ('view' === $context && empty($value)) { $value = apply_filters($this->get_hook_prefix() . 'height', $this->parent_data['height'], $this); } return $value; } public function get_tax_class($context = 'view') { $value = null; if (array_key_exists('tax_class', $this->data)) { $value = array_key_exists('tax_class', $this->changes) ? $this->changes['tax_class'] : $this->data['tax_class']; if ('edit' !== $context && 'parent' === $value) { $value = $this->parent_data['tax_class']; } if ('view' === $context) { $value = apply_filters($this->get_hook_prefix() . 'tax_class', $value, $this); } } return $value; } public function get_manage_stock($context = 'view') { $value = $this->get_prop('manage_stock', $context); if ('view' === $context && false === $value && true === wc_string_to_bool($this->parent_data['manage_stock'])) { $value = 'parent'; } return $value; } public function get_stock_quantity($context = 'view') { $value = $this->get_prop('stock_quantity', $context); if ('view' === $context && 'parent' === $this->get_manage_stock()) { $value = apply_filters($this->get_hook_prefix() . 'stock_quantity', $this->parent_data['stock_quantity'], $this); } return $value; } public function get_backorders($context = 'view') { $value = $this->get_prop('backorders', $context); if ('view' === $context && 'parent' === $this->get_manage_stock()) { $value = apply_filters($this->get_hook_prefix() . 'backorders', $this->parent_data['backorders'], $this); } return $value; } public function get_image_id($context = 'view') { $image_id = $this->get_prop('image_id', $context); if ('view' === $context && !$image_id) { $image_id = apply_filters($this->get_hook_prefix() . 'image_id', $this->parent_data['image_id'], $this); } return $image_id; } public function get_purchase_note($context = 'view') { $value = $this->get_prop('purchase_note', $context); if ('view' === $context && empty($value)) { $value = apply_filters($this->get_hook_prefix() . 'purchase_note', $this->parent_data['purchase_note'], $this); } return $value; } public function get_shipping_class_id($context = 'view') { $shipping_class_id = $this->get_prop('shipping_class_id', $context); if ('view' === $context && !$shipping_class_id) { $shipping_class_id = apply_filters($this->get_hook_prefix() . 'shipping_class_id', $this->parent_data['shipping_class_id'], $this); } return $shipping_class_id; } public function get_catalog_visibility($context = 'view') { return apply_filters($this->get_hook_prefix() . 'catalog_visibility', $this->parent_data['catalog_visibility'], $this); } public function get_attribute_summary($context = 'view') { return $this->get_prop('attribute_summary', $context); } public function set_attribute_summary($attribute_summary) { $this->set_prop('attribute_summary', $attribute_summary); } public function set_parent_data($parent_data) { $parent_data = wp_parse_args($parent_data, array('title' => '', 'status' => '', 'sku' => '', 'manage_stock' => 'no', 'backorders' => 'no', 'stock_quantity' => '', 'weight' => '', 'length' => '', 'width' => '', 'height' => '', 'tax_class' => '', 'shipping_class_id' => 0, 'image_id' => 0, 'purchase_note' => '', 'catalog_visibility' => 'visible')); $parent_data['tax_class'] = sanitize_title($parent_data['tax_class']); $parent_data['tax_class'] = 'standard' === $parent_data['tax_class'] ? '' : $parent_data['tax_class']; $valid_classes = $this->get_valid_tax_classes(); if (!in_array($parent_data['tax_class'], $valid_classes, true)) { $parent_data['tax_class'] = ''; } $this->parent_data = $parent_data; } public function get_parent_data() { return $this->parent_data; } public function set_attributes($raw_attributes) { $raw_attributes = (array) $raw_attributes; $attributes = array(); foreach ($raw_attributes as $key => $value) { if (0 === strpos($key, 'attribute_')) { $key = substr($key, 10); } $attributes[$key] = $value; } $this->set_prop('attributes', $attributes); } public function has_attributes() { return false; } public function is_purchasable() { return apply_filters('woocommerce_variation_is_purchasable', $this->variation_is_visible() && parent::is_purchasable() && ('publish' === $this->parent_data['status'] || current_user_can('edit_post', $this->get_parent_id())), $this); } public function variation_is_active() { return apply_filters('woocommerce_variation_is_active', true, $this); } public function variation_is_visible() { return apply_filters('woocommerce_variation_is_visible', 'publish' === get_post_status($this->get_id()) && '' !== $this->get_price(), $this->get_id(), $this->get_parent_id(), $this); } protected function get_valid_tax_classes() { $valid_classes = WC_Tax::get_tax_class_slugs(); $valid_classes[] = 'parent'; return $valid_classes; } }