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_Order_Item extends WC_Data implements ArrayAccess { protected $data = array('order_id' => 0, 'name' => ''); protected $cache_group = 'order-items'; protected $meta_type = 'order_item'; protected $object_type = 'order_item'; public function __construct($item = 0) { parent::__construct($item); if ($item instanceof WC_Order_Item) { $this->set_id($item->get_id()); } elseif (is_numeric($item) && $item > 0) { $this->set_id($item); } else { $this->set_object_read(true); } $type = 'line_item' === $this->get_type() ? 'product' : $this->get_type(); $this->data_store = WC_Data_Store::load('order-item-' . $type); if ($this->get_id() > 0) { $this->data_store->read($this); } } public function apply_changes() { if (function_exists('array_replace')) { $this->data = array_replace($this->data, $this->changes); } else { foreach ($this->changes as $key => $change) { $this->data[$key] = $change; } } $this->changes = array(); } public function get_order_id($context = 'view') { return $this->get_prop('order_id', $context); } public function get_name($context = 'view') { return $this->get_prop('name', $context); } public function get_type() { return ''; } public function get_quantity() { return 1; } public function get_tax_status() { return 'taxable'; } public function get_tax_class() { return ''; } public function get_order() { return wc_get_order($this->get_order_id()); } public function set_order_id($value) { $this->set_prop('order_id', absint($value)); } public function set_name($value) { $this->set_prop('name', wp_check_invalid_utf8($value)); } public function is_type($type) { return is_array($type) ? in_array($this->get_type(), $type, true) : $type === $this->get_type(); } public function calculate_taxes($calculate_tax_for = array()) { if (!isset($calculate_tax_for['country'], $calculate_tax_for['state'], $calculate_tax_for['postcode'], $calculate_tax_for['city'])) { return false; } if ('0' !== $this->get_tax_class() && 'taxable' === $this->get_tax_status() && wc_tax_enabled()) { $calculate_tax_for['tax_class'] = $this->get_tax_class(); $tax_rates = WC_Tax::find_rates($calculate_tax_for); $taxes = WC_Tax::calc_tax($this->get_total(), $tax_rates, false); if (method_exists($this, 'get_subtotal')) { $subtotal_taxes = WC_Tax::calc_tax($this->get_subtotal(), $tax_rates, false); $this->set_taxes(array('total' => $taxes, 'subtotal' => $subtotal_taxes)); } else { $this->set_taxes(array('total' => $taxes)); } } else { $this->set_taxes(false); } do_action('woocommerce_order_item_after_calculate_taxes', $this, $calculate_tax_for); return true; } public function get_formatted_meta_data($hideprefix = '_', $include_all = false) { $formatted_meta = array(); $meta_data = $this->get_meta_data(); $hideprefix_length = !empty($hideprefix) ? strlen($hideprefix) : 0; $product = is_callable(array($this, 'get_product')) ? $this->get_product() : false; $order_item_name = $this->get_name(); foreach ($meta_data as $meta) { if (empty($meta->id) || '' === $meta->value || !is_scalar($meta->value) || $hideprefix_length && substr($meta->key, 0, $hideprefix_length) === $hideprefix) { continue; } $meta->key = rawurldecode((string) $meta->key); $meta->value = rawurldecode((string) $meta->value); $attribute_key = str_replace('attribute_', '', $meta->key); $display_key = wc_attribute_label($attribute_key, $product); $display_value = wp_kses_post($meta->value); if (taxonomy_exists($attribute_key)) { $term = get_term_by('slug', $meta->value, $attribute_key); if (!is_wp_error($term) && is_object($term) && $term->name) { $display_value = $term->name; } } if (!$include_all && $product && $product->is_type('variation') && wc_is_attribute_in_product_name($display_value, $order_item_name)) { continue; } $formatted_meta[$meta->id] = (object) array('key' => $meta->key, 'value' => $meta->value, 'display_key' => apply_filters('woocommerce_order_item_display_meta_key', $display_key, $meta, $this), 'display_value' => wpautop(make_clickable(apply_filters('woocommerce_order_item_display_meta_value', $display_value, $meta, $this)))); } return apply_filters('woocommerce_order_item_get_formatted_meta_data', $formatted_meta, $this); } public function offsetSet($offset, $value) { if ('item_meta_array' === $offset) { foreach ($value as $meta_id => $meta) { $this->update_meta_data($meta->key, $meta->value, $meta_id); } return; } if (array_key_exists($offset, $this->data)) { $setter = "set_{$offset}"; if (is_callable(array($this, $setter))) { $this->{$setter}($value); } return; } $this->update_meta_data($offset, $value); } public function offsetUnset($offset) { $this->maybe_read_meta_data(); if ('item_meta_array' === $offset || 'item_meta' === $offset) { $this->meta_data = array(); return; } if (array_key_exists($offset, $this->data)) { unset($this->data[$offset]); } if (array_key_exists($offset, $this->changes)) { unset($this->changes[$offset]); } $this->delete_meta_data($offset); } public function offsetExists($offset) { $this->maybe_read_meta_data(); if ('item_meta_array' === $offset || 'item_meta' === $offset || array_key_exists($offset, $this->data)) { return true; } return array_key_exists($offset, wp_list_pluck($this->meta_data, 'value', 'key')) || array_key_exists('_' . $offset, wp_list_pluck($this->meta_data, 'value', 'key')); } public function offsetGet($offset) { $this->maybe_read_meta_data(); if ('item_meta_array' === $offset) { $return = array(); foreach ($this->meta_data as $meta) { $return[$meta->id] = $meta; } return $return; } $meta_values = wp_list_pluck($this->meta_data, 'value', 'key'); if ('item_meta' === $offset) { return $meta_values; } elseif ('type' === $offset) { return $this->get_type(); } elseif (array_key_exists($offset, $this->data)) { $getter = "get_{$offset}"; if (is_callable(array($this, $getter))) { return $this->{$getter}(); } } elseif (array_key_exists('_' . $offset, $meta_values)) { return $meta_values['_' . $offset]; } elseif (array_key_exists($offset, $meta_values)) { return $meta_values[$offset]; } return null; } }