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_Attribute implements ArrayAccess { protected $data = array('id' => 0, 'name' => '', 'options' => array(), 'position' => 0, 'visible' => false, 'variation' => false); public function is_taxonomy() { return 0 < $this->get_id(); } public function get_taxonomy() { return $this->is_taxonomy() ? $this->get_name() : ''; } public function get_taxonomy_object() { global $wc_product_attributes; return $this->is_taxonomy() ? $wc_product_attributes[$this->get_name()] : null; } public function get_terms() { if (!$this->is_taxonomy() || !taxonomy_exists($this->get_name())) { return null; } $terms = array(); foreach ($this->get_options() as $option) { if (is_int($option)) { $term = get_term_by('id', $option, $this->get_name()); } else { $term = get_term_by('name', $option, $this->get_name()); if (!$term || is_wp_error($term)) { $new_term = wp_insert_term($option, $this->get_name()); $term = is_wp_error($new_term) ? false : get_term_by('id', $new_term['term_id'], $this->get_name()); } } if ($term && !is_wp_error($term)) { $terms[] = $term; } } return $terms; } public function get_slugs() { if (!$this->is_taxonomy() || !taxonomy_exists($this->get_name())) { return $this->get_options(); } $terms = array(); foreach ($this->get_options() as $option) { if (is_int($option)) { $term = get_term_by('id', $option, $this->get_name()); } else { $term = get_term_by('name', $option, $this->get_name()); if (!$term || is_wp_error($term)) { $new_term = wp_insert_term($option, $this->get_name()); $term = is_wp_error($new_term) ? false : get_term_by('id', $new_term['term_id'], $this->get_name()); } } if ($term && !is_wp_error($term)) { $terms[] = $term->slug; } } return $terms; } public function get_data() { return array_merge($this->data, array('is_visible' => $this->get_visible() ? 1 : 0, 'is_variation' => $this->get_variation() ? 1 : 0, 'is_taxonomy' => $this->is_taxonomy() ? 1 : 0, 'value' => $this->is_taxonomy() ? '' : wc_implode_text_attributes($this->get_options()))); } public function set_id($value) { $this->data['id'] = absint($value); } public function set_name($value) { $this->data['name'] = $value; } public function set_options($value) { $this->data['options'] = $value; } public function set_position($value) { $this->data['position'] = absint($value); } public function set_visible($value) { $this->data['visible'] = wc_string_to_bool($value); } public function set_variation($value) { $this->data['variation'] = wc_string_to_bool($value); } public function get_id() { return $this->data['id']; } public function get_name() { return $this->data['name']; } public function get_options() { return $this->data['options']; } public function get_position() { return $this->data['position']; } public function get_visible() { return $this->data['visible']; } public function get_variation() { return $this->data['variation']; } public function offsetGet($offset) { switch ($offset) { case 'is_variation': return $this->get_variation() ? 1 : 0; case 'is_visible': return $this->get_visible() ? 1 : 0; case 'is_taxonomy': return $this->is_taxonomy() ? 1 : 0; case 'value': return $this->is_taxonomy() ? '' : wc_implode_text_attributes($this->get_options()); default: if (is_callable(array($this, "get_{$offset}"))) { return $this->{"get_{$offset}"}(); } break; } return ''; } public function offsetSet($offset, $value) { switch ($offset) { case 'is_variation': $this->set_variation($value); break; case 'is_visible': $this->set_visible($value); break; case 'value': $this->set_options($value); break; default: if (is_callable(array($this, "set_{$offset}"))) { return $this->{"set_{$offset}"}($value); } break; } } public function offsetUnset($offset) { } public function offsetExists($offset) { return in_array($offset, array_merge(array('is_variation', 'is_visible', 'is_taxonomy', 'value'), array_keys($this->data)), true); } }