PluginProbe ʕ •ᴥ•ʔ
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution / 1.2.1
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution v1.2.1
4.9.1 4.9.0 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.0 2.5.1 3.0.0 3.1.0 3.1.1 4.0.0 4.0.1 4.1.0 4.1.1 4.2.0 4.2.1 4.3.0 4.3.1 4.4.0 4.5.0 4.5.1 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.6.8 4.6.9 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 4.8.8 4.8.9 trunk 0.1.2-beta 0.1.3-beta 0.1.4-beta 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.5.0 1.5.1 1.6.0 1.6.1 1.7.0 1.8.0 1.8.1 1.9.0
shopengine / modules / swatches / attribute-hooks.php
shopengine / modules / swatches Last commit date
assets 4 years ago admin-product.php 5 years ago attribute-hooks.php 4 years ago frontend.php 5 years ago helper.php 5 years ago swatches.php 5 years ago
attribute-hooks.php
197 lines
1 <?php
2
3 namespace ShopEngine\Modules\Swatches;
4
5 use ShopEngine\Traits\Singleton;
6
7 defined('ABSPATH') || exit;
8
9 class Attribute_Hooks {
10
11 use Singleton;
12
13 public function init() {
14
15 $attribute_taxonomies = wc_get_attribute_taxonomies();
16 $types = Swatches::instance()->get_available_types();
17
18 if(empty($attribute_taxonomies)) {
19 return;
20 }
21
22 foreach($attribute_taxonomies as $tax) {
23
24 if(isset($types[$tax->attribute_type])) {
25 add_filter('manage_edit-pa_' . $tax->attribute_name . '_columns', [$this, 'add_attr_column']);
26 add_filter('manage_pa_' . $tax->attribute_name . '_custom_column', [$this, 'add_attr_column_content'], 10, 3);
27
28 add_action('pa_' . $tax->attribute_name . '_add_form_fields', [$this, 'add_attr_field']);
29 add_action('pa_' . $tax->attribute_name . '_edit_form_fields', [$this, 'edit_attr_field'], 10, 2);
30 }
31 }
32
33 add_action('created_term', [$this, 'persist_term_meta'], 10, 2);
34 add_action('edit_term', [$this, 'persist_term_meta'], 10, 2);
35 add_action('shopengine_attribute_field_chain', [$this, 'attribute_fields'], 10, 3);
36 }
37
38
39 public function add_attr_field($taxonomy) {
40
41 $attr = Helper::get_tax_attribute($taxonomy);
42
43 do_action('shopengine_attribute_field_chain', $attr->attribute_type, '', 'add');
44 }
45
46
47 public function edit_attr_field($term, $taxonomy) {
48
49 $attr = Helper::get_tax_attribute($taxonomy);
50
51 $value = get_term_meta($term->term_id, $attr->attribute_type, true);
52
53 do_action('shopengine_attribute_field_chain', $attr->attribute_type, $value, 'edit');
54 }
55
56
57 /**
58 * Add another td in the table
59 *
60 * @param $columns
61 * @return mixed
62 */
63 public function add_attr_column($columns) {
64 $new_columns = [];
65
66 if(isset($columns['cb'])) {
67 $new_columns['cb'] = $columns['cb'];
68 }
69
70 $new_columns['pa_preview'] = 'Thumbnail';
71 unset($columns['cb']);
72
73 return $new_columns + $columns;
74 }
75
76
77 public function add_attr_column_content($columns, $column, $term_id) {
78
79 if('pa_preview' !== $column) {
80 return $columns;
81 }
82
83
84 $attr = Helper::get_tax_attribute(sanitize_key($_REQUEST['taxonomy']));
85
86 $value = get_term_meta($term_id, $attr->attribute_type, true);
87
88 switch($attr->attribute_type) {
89 case Swatches::PA_COLOR:
90 printf('<div class="swatches_thumb swatch_color" style="background-color:%s;"></div>', esc_attr($value));
91 break;
92
93 case Swatches::PA_IMAGE:
94 $image = $value ? wp_get_attachment_image_src($value) : '';
95 $image = $image ? $image[0] : Helper::get_dummy();
96 printf('<img class="swatches_thumb swatch_image" src="%s" width="44px" height="44px">', esc_url($image));
97 break;
98
99 case Swatches::PA_LABEL:
100 printf('<div class="swatches_thumb swatch_label">%s</div>', esc_html($value));
101 break;
102 }
103
104 return $columns;
105 }
106
107
108 public function persist_term_meta($term_id, $tt_id) {
109
110 $types = Swatches::instance()->get_available_types();
111
112 foreach($types as $type => $label) {
113 if(isset($_POST[$type])) {
114
115 if($type == Swatches::PA_COLOR) {
116
117 update_term_meta($term_id, $type, sanitize_hex_color($_POST[$type]));
118
119 } else {
120
121 update_term_meta($term_id, $type, sanitize_text_field($_POST[$type]));
122 }
123 }
124 }
125 }
126
127
128 public function attribute_fields($type, $value, $form) {
129
130 $types = Swatches::instance()->get_available_types();
131
132 /**
133 * Rejecting all types from other plugin/module
134 *
135 */
136 if(!isset($types[$type])) {
137
138 return;
139 }
140
141 printf(
142 '<%s class="form-field">%s<label for="term-%s">%s</label>%s',
143 'edit' == $form ? 'tr' : 'div',
144 'edit' == $form ? '<th>' : '',
145 esc_attr($type),
146 $types[$type],
147 'edit' == $form ? '</th><td>' : ''
148 );
149
150 switch($type) {
151 case Swatches::PA_IMAGE:
152 $image = $value ? wp_get_attachment_image_src($value) : '';
153 $image = $image ? $image[0] : Helper::get_dummy();
154 ?>
155
156 <div class="shopengine_term_img_thumbnail" style="float:left;margin-right:10px;">
157 <img alt="" src="<?php echo esc_url($image) ?>" width="70px" height="70px"/>
158 </div>
159
160 <div style="line-height:60px;">
161 <input type="hidden" class="shopengine_term_img" name="<?php echo $type ?>"
162 value="<?php echo esc_attr($value) ?>"/>
163
164 <button type="button" class="shopengine_upload_img_button button">
165 <?php esc_html_e('Upload image', 'shopengine'); ?>
166 </button>
167
168 <button type="button"
169 class="shopengine_remove_img_btn button <?php echo esc_attr($value) ? '' : 'hidden' ?>">
170 <?php esc_html_e('Remove image', 'shopengine'); ?>
171 </button>
172 </div> <?php
173
174 break;
175
176 case Swatches::PA_COLOR : ?>
177
178 <input type="color"
179 id="term-<?php echo esc_attr($type) ?>"
180 name="<?php echo esc_attr($type) ?>"
181 value="<?php echo esc_attr($value) ?>"/> <?php
182 break;
183
184 default: ?>
185
186 <input type="text"
187 id="term-<?php echo esc_attr($type) ?>"
188 name="<?php echo esc_attr($type) ?>"
189 value="<?php echo esc_attr($value) ?>"/> <?php
190 break;
191 }
192
193
194 echo 'edit' == $form ? '</td></tr>' : '</div>';
195 }
196 }
197