PluginProbe
Ever Compare – Products Compare Plugin for WooCommerce / 1.3.5
Ever Compare – Products Compare Plugin for WooCommerce v1.3.5
1.3.7 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 trunk 1.0.0 1.0.1 1.0.2 All 31 releases
ever-compare / includes / classes / Frontend / Manage_Compare.php

Manage_Compare.php in Ever Compare – Products Compare Plugin for WooCommerce 1.3.5, at includes/classes/Frontend/Manage_Compare.php

685 lines 24.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace EverCompare\Frontend;
3 /**
4 * Button handlers class
5 */
6 class Manage_Compare {
7
8 /**
9 * [$_instance]
10 * @var null
11 */
12 private static $_instance = null;
13
14 /**
15 * [$reached_max_limit]
16 * @var boolean
17 */
18 public $reached_max_limit = false;
19
20 public $max_limit;
21
22 /**
23 * [instance] Initializes a singleton instance
24 * @return [Compare_Button]
25 */
26 public static function instance() {
27 if ( is_null( self::$_instance ) ) {
28 self::$_instance = new self();
29 }
30 return self::$_instance;
31 }
32
33 /**
34 * Initialize the class
35 */
36 private function __construct() {
37 $this->max_limit = intval( ever_compare_get_option( 'limit','ever_compare_table_settings_tabs', get_option( 'posts_per_page' ) ));
38 add_action( 'init', [ $this, 'button_manager' ] );
39 add_action( 'ever_compare_before_table', [ $this, 'reached_max_limit_message' ], 1 );
40 add_action( 'ever_compare_after_table', [ $this, 'shareable_link' ], 1 );
41 }
42
43 /**
44 * [compare_button]
45 * @return [void]
46 */
47 public function button_print(){
48 echo do_shortcode( '[evercompare_button]' );
49 }
50
51 /**
52 * [button_manager] Button Manager
53 * @return [void]
54 */
55 public function button_manager(){
56
57 $enable_btn = ever_compare_get_option( 'btn_show_shoppage', 'ever_compare_settings_tabs', 'off' );
58 $product_enable_btn = ever_compare_get_option( 'btn_show_productpage', 'ever_compare_settings_tabs', 'on' );
59
60 $shop_page_btn_position = ever_compare_get_option( 'shop_btn_position', 'ever_compare_settings_tabs', 'after_cart_btn' );
61 $product_page_btn_position = ever_compare_get_option( 'product_btn_position', 'ever_compare_settings_tabs', 'after_cart_btn' );
62
63
64 // Shop Button Position
65 if( $shop_page_btn_position != 'use_shortcode' && $enable_btn == 'on' ){
66 switch ( $shop_page_btn_position ) {
67
68 case 'before_cart_btn':
69 add_action( 'woocommerce_after_shop_loop_item', [ $this, 'button_print' ], 7 );
70 break;
71
72 case 'top_thumbnail':
73 add_action( 'woocommerce_before_shop_loop_item', [ $this, 'button_print' ], 5 );
74 break;
75
76 case 'custom_position':
77 $hook_name = ever_compare_get_option( 'shop_custom_hook_name', 'ever_compare_settings_tabs', '' );
78 $priority = ever_compare_get_option( 'shop_custom_hook_priority', 'ever_compare_settings_tabs', 10 );
79 if( !empty( $hook_name ) ){
80 add_action( $hook_name, [ $this, 'button_print' ], $priority );
81 }
82 break;
83
84 default:
85 add_action( 'woocommerce_after_shop_loop_item', [ $this, 'button_print' ], 20 );
86 break;
87
88 }
89 }
90
91 // Product Page Button Position
92 if( $product_page_btn_position != 'use_shortcode' && $product_enable_btn == 'on' ){
93 switch ( $product_page_btn_position ) {
94
95 case 'before_cart_btn':
96 add_action( 'woocommerce_before_add_to_cart_button', [ $this, 'button_print' ], 20 );
97 break;
98
99 case 'after_thumbnail':
100 add_action( 'woocommerce_product_thumbnails', [ $this, 'button_print' ], 21 );
101 break;
102
103 case 'after_summary':
104 add_action( 'woocommerce_after_single_product_summary', [ $this, 'button_print' ], 11 );
105 break;
106
107 case 'custom_position':
108 $hook_name = ever_compare_get_option( 'product_custom_hook_name', 'ever_compare_settings_tabs', '' );
109 $priority = ever_compare_get_option( 'product_custom_hook_priority', 'ever_compare_settings_tabs', 10 );
110 if( !empty( $hook_name ) ){
111 add_action( $hook_name, [ $this, 'button_print' ], $priority );
112 }
113 break;
114
115 default:
116 add_action( 'woocommerce_single_product_summary', [ $this, 'button_print' ], 31 );
117 break;
118 }
119 }
120
121 /**
122 * Popup HTML Render
123 */
124 if( ever_compare_get_option( 'open_popup', 'ever_compare_settings_tabs', 'on' ) === 'on' ){
125 add_action( 'wp_footer', [ $this, 'pop_up_html' ] );
126 }
127
128
129
130 }
131
132 /**
133 * [button_html] Button HTML
134 * @param [type] $atts
135 * @return [HTML]
136 */
137 public function button_html( $atts ) {
138 $button_attr = apply_filters( 'evercompare_button_arg', $atts );
139 return ever_compare_get_template( 'evercompare-button-'.$atts['template_name'].'.php', $button_attr, false );
140 }
141
142 /**
143 * [table_html] Wishlist table HTML
144 * @return [HTML]
145 */
146 public function table_html( $atts ) {
147 $table_attr = apply_filters( 'evercompare_table_arg', $atts );
148 return ever_compare_get_template( 'evercompare-table.php', $table_attr, false );
149 }
150
151 /**
152 * [count_html] Count HTML
153 * @param [type] $atts
154 * @return [HTML]
155 */
156 public function count_html( $atts ) {
157 $button_attr = apply_filters( 'evercompare_count_arg', $atts );
158 return ever_compare_get_template( 'evercompare-count.php', $button_attr, false );
159 }
160
161 /**
162 * [pop_up_html]
163 * @return [void]
164 */
165 public function pop_up_html(){
166 echo '<div class="htcompare-popup"><div class="htcompare-popup-content-area"><span class="htcompare-popup-close">&nbsp;</span><div class="htcompare-table" data-ajax-load="true"></div></div></div>';
167 }
168
169 /**
170 * [reached_max_limit_message]
171 * @return [void]
172 */
173 public function reached_max_limit_message(){
174 if( ! $this->reached_max_limit ) {
175 return;
176 }
177
178 $message = !empty( ever_compare_get_option('reached_max_limit_message','ever_compare_table_settings_tabs') ) ? ever_compare_get_option('reached_max_limit_message','ever_compare_table_settings_tabs') : esc_html__( 'You are already added the maximum number of products.', 'ever-compare' );
179 echo '<div class="ever-compare-message-error"><p>'. wp_kses_post( $message ).'</p></div>';
180
181 }
182
183 /**
184 * [shareable_link]
185 * @return [void]
186 */
187 public function shareable_link(){
188
189 $shareable_link = ever_compare_get_option( 'enable_shareable_link','ever_compare_table_settings_tabs','off' );
190 if ( $shareable_link !== 'on' ) {
191 return;
192 }
193
194 $ids = $this->get_compared_products();
195
196 if ( ! empty( $_GET['evcompare'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
197 $query_perametter_ids = sanitize_text_field( wp_unslash($_GET['evcompare']) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended
198 if( !empty( $query_perametter_ids ) ){
199 $ids = array_filter( array_map( 'absint', explode( ',', $query_perametter_ids ) ) );
200 }
201 }
202
203 $buttonText = ever_compare_get_option( 'shareable_link_button_text','ever_compare_table_settings_tabs','Copy shareable link' ) ? ever_compare_get_option( 'shareable_link_button_text','ever_compare_table_settings_tabs','Copy shareable link' ) : esc_html__( 'Copy shareable link', 'ever-compare' );
204 $aftercopy_buttonText = ever_compare_get_option( 'shareable_link_after_button_text','ever_compare_table_settings_tabs','Copied' ) ? ever_compare_get_option( 'shareable_link_after_button_text','ever_compare_table_settings_tabs','Copied' ) : esc_html__( 'Copied', 'ever-compare' );
205 $button_pos = ever_compare_get_option( 'linkshare_btn_pos','ever_compare_table_settings_tabs','right' );
206
207 $idsString = is_array( $ids ) ? implode( ',', $ids ) : '';
208 $shareablelink = $this->get_compare_page_url() . '?evcompare='.$idsString;
209 ?>
210 <div class="ever-compare-shareable-link <?php echo esc_attr( $button_pos );?>">
211 <button class="evercompare-copy-link" data-copytext="<?php echo esc_attr( $aftercopy_buttonText ); ?>" data-btntext="<?php echo esc_attr( $buttonText ); ?>"><?php echo esc_html($buttonText); ?></button>
212 <p style="display: none;" class="evercompare-share-link"><?php echo esc_html($shareablelink); ?></p>
213 </div>
214 <?php
215
216 }
217
218 /**
219 * [add_to_compare] Ajax callable function
220 */
221 public function add_to_compare( $id ) {
222
223 $cookie_name = $this->get_cookie_name();
224
225 if ( $this->is_product_in_compare( $id ) ) {
226 $this->compare_json_response();
227 }
228
229 $products = $this->get_compared_products();
230
231 // Reached Maximum Limit
232 if( $this->reached_max_limit() ) {
233 $this->compare_json_response();
234 }
235
236 $products[] = $id;
237
238 setcookie( $cookie_name, wp_json_encode( $products ), 0, COOKIEPATH, COOKIE_DOMAIN, false, false );
239
240 $_COOKIE[$cookie_name] = wp_json_encode( $products );
241
242 $this->compare_json_response();
243
244 }
245
246 /**
247 * [reached_max_limit]
248 * @return [bool]
249 */
250 public function reached_max_limit(){
251
252 $products = $this->get_compared_products();
253
254 if( $this->max_limit && count( $products ) >= $this->max_limit ) {
255 $this->reached_max_limit = true;
256 } else {
257 $this->reached_max_limit = false;
258 }
259
260 return $this->reached_max_limit;
261 }
262
263 /**
264 * [remove_from_compare] Ajax callable function
265 * @return [json]
266 */
267 public function remove_from_compare( $id ) {
268
269 $cookie_name = $this->get_cookie_name();
270
271 if ( ! $this->is_product_in_compare( $id ) ) {
272 $this->compare_json_response();
273 }
274
275 $products = $this->get_compared_products();
276
277 foreach ( $products as $prod_key => $product_id ) {
278 if ( intval( $id ) == $product_id ) {
279 unset( $products[ $prod_key ] );
280 $this->reached_max_limit = false;
281 }
282 }
283
284 $products = array_values( $products );
285
286 if ( empty( $products ) ) {
287 setcookie( $cookie_name, false, 0, COOKIEPATH, COOKIE_DOMAIN, false, false );
288 $_COOKIE[$cookie_name] = false;
289 } else {
290 setcookie( $cookie_name, wp_json_encode( $products ), 0, COOKIEPATH, COOKIE_DOMAIN, false, false );
291 $_COOKIE[$cookie_name] = wp_json_encode( $products );
292 }
293
294 $this->compare_json_response();
295 }
296
297 /**
298 * [get_response_html ] Compare product table HTML
299 * @return [html]
300 */
301 public function get_response_html(){
302
303 $products = $this->get_compared_products_data();
304 $fields = $this->get_compare_fields();
305
306 $empty_compare_text = ever_compare_get_option('empty_table_text','ever_compare_table_settings_tabs');
307 $return_shop_button = ever_compare_get_option('shop_button_text','ever_compare_table_settings_tabs','Return to shop');
308
309 $custom_heading = !empty( ever_compare_get_option( 'table_heading', 'ever_compare_table_settings_tabs' ) ) ? ever_compare_get_option( 'table_heading', 'ever_compare_table_settings_tabs' ) : array();
310
311 $default_atts = array(
312 'evercompare' => self::instance(),
313 'products' => $products,
314 'fields' => $fields,
315 'heading_txt' => $custom_heading,
316 'return_shop_button' => $return_shop_button,
317 'empty_compare_text' => $empty_compare_text,
318 );
319 $table_attr = apply_filters( 'evercompare_response_html_args', $default_atts );
320
321 ever_compare_get_template( 'evercompare-table.php', $table_attr );
322
323 }
324
325 /**
326 * [get_compared_products_data] generate compared products data
327 * @return [array] product list
328 */
329 public function get_compared_products_data() {
330 $ids = $this->get_compared_products();
331
332 // For shareable link
333 $shareable_link = ever_compare_get_option('enable_shareable_link','ever_compare_table_settings_tabs','off');
334 if ( ( $shareable_link === 'on' ) && ! empty( $_GET['evcompare'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
335 $query_perametter_ids = sanitize_text_field( wp_unslash($_GET['evcompare']) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended
336 if( !empty( $query_perametter_ids ) ){
337 $ids = array_filter( array_map( 'absint', explode( ',', $query_perametter_ids ) ) );
338 }
339 }
340
341 if ( empty( $ids ) ) {
342 return array();
343 }
344
345 $args = array(
346 'include' => $ids,
347 'limit' => $this->max_limit
348 );
349
350 $products = wc_get_products( $args );
351
352 $products_data = array();
353
354 $fields = $this->get_compare_fields();
355
356 $fields = array_filter( $fields, function( $field ) {
357 return 'pa_' === substr( $field, 0, 3 );
358 }, ARRAY_FILTER_USE_KEY );
359
360 $data_none = '-';
361
362 foreach ( $products as $product ) {
363
364 $rating_count = $product->get_rating_count();
365 $average = $product->get_average_rating();
366
367 $products_data[ $product->get_id() ] = array(
368 'primary' => array(
369 'image' => $product->get_image() ? $product->get_image('ever-compare-image') : $data_none,
370 ),
371 'id' => $product->get_id(),
372 'title' => $product->get_title() ? $product->get_title() : $data_none,
373 'image_id' => $product->get_image_id(),
374 'permalink' => $product->get_permalink(),
375 'price' => $product->get_price_html() ? $product->get_price_html() : $data_none,
376 'rating' => wc_get_rating_html( $average, $rating_count ),
377 'add_to_cart' => $this->add_to_cart_html( $product ) ? $this->add_to_cart_html( $product ) :$data_none,
378 'dimensions' => wc_format_dimensions( $product->get_dimensions( false ) ),
379 'description' => $product->get_short_description() ? $product->get_short_description() : $data_none,
380 'weight' => $product->get_weight() ? $product->get_weight() : $data_none,
381 'sku' => $product->get_sku() ? $product->get_sku() : $data_none,
382 'availability' => $this->availability_html( $product ),
383 );
384
385 foreach ( $fields as $field_id => $field_name ) {
386 if ( taxonomy_exists( $field_id ) ) {
387 $products_data[ $product->get_id() ][ $field_id ] = array();
388 $terms = get_the_terms( $product->get_id(), $field_id );
389 if ( ! empty( $terms ) ) {
390 foreach ( $terms as $term ) {
391 $term = sanitize_term( $term, $field_id );
392 $products_data[ $product->get_id() ][ $field_id ][] = $term->name;
393 }
394 } else {
395 $products_data[ $product->get_id() ][ $field_id ][] = '-';
396 }
397 $products_data[ $product->get_id() ][ $field_id ] = implode( ', ', $products_data[ $product->get_id() ][ $field_id ] );
398 }
399 }
400 }
401
402 return $products_data;
403 }
404
405 /**
406 * [get_compare_fields] Table field list
407 * @return [array] Table Field list
408 */
409 public function get_compare_fields() {
410 $fields = array(
411 'primary' => ''
412 );
413
414 $default_show = array(
415 'title' => esc_html__( 'title', 'ever-compare' ),
416 'ratting' => esc_html__( 'ratting', 'ever-compare' ),
417 'price' => esc_html__( 'price', 'ever-compare' ),
418 'add_to_cart' => esc_html__( 'add_to_cart', 'ever-compare' ),
419 'description' => esc_html__( 'description', 'ever-compare' ),
420 'availability' => esc_html__( 'availability', 'ever-compare' ),
421 'sku' => esc_html__( 'sku', 'ever-compare' ),
422 'weight' => esc_html__( 'weight', 'ever-compare' ),
423 'dimensions' => esc_html__( 'dimensions', 'ever-compare' ),
424 );
425
426 $fields_settings = !empty( ever_compare_get_option( 'show_fields', 'ever_compare_table_settings_tabs' ) ) ? ever_compare_get_option( 'show_fields', 'ever_compare_table_settings_tabs' ) : array();
427
428 if ( isset( $fields_settings ) && count( $fields_settings ) > 1 ) {
429 $fields = $fields + $fields_settings;
430 }else{
431 $fields = $fields + $default_show;
432 }
433
434 return $fields;
435 }
436
437 /**
438 * [is_products_have_field]
439 * @param [string] $field_id
440 * @param [object] $products
441 * @return boolean
442 */
443 public function is_products_have_field( $field_id, $products ) {
444 foreach ( $products as $product_id => $product ) {
445 if ( isset( $product[ $field_id ] ) && ( ! empty( $product[ $field_id ] ) && '-' !== $product[ $field_id ] && 'N/A' !== $product[ $field_id ] ) ) {
446 return true;
447 }
448 }
449 return false;
450 }
451
452 /**
453 * [compare_display_field]
454 * @param [string] $field_id
455 * @param [array] $product
456 * @return [html]
457 */
458 public function compare_display_field( $field_id, $product ) {
459
460 $type = $field_id;
461
462 if ( 'pa_' === substr( $field_id, 0, 3 ) ) {
463 $type = 'attribute';
464 }
465
466 switch ( $type ) {
467 case 'primary':
468 ?>
469 <div class="htcompare-primary-content-area">
470 <a href="#" class="htcompare-remove" data-product_title="<?php echo esc_attr( $product['title'] ); ?>" data-product_id="<?php echo esc_attr( $product['id'] ); ?>">&nbsp;</a>
471 <a href="<?php echo esc_url(get_permalink( $product['id'] )); ?>" class="htcompare-product-image">
472 <?php echo wp_kses_post($product['primary']['image']); ?>
473 </a>
474 </div>
475 <?php
476 break;
477
478 case 'title':
479 echo '<a href="'.esc_url(get_permalink( $product['id'] )).'" class="htcompare-product-title">'.esc_html($product[ $field_id ]).'</a>';
480 break;
481
482 case 'ratting':
483 echo '<span class="htcompare-product-ratting">'.wp_kses_post( $product[ $field_id ] ).'</span>';
484 break;
485
486 case 'price':
487 echo '<div class="htcompare-product-price">'.wp_kses_post( $product[ $field_id ] ).'</div>';
488 break;
489
490 case 'add_to_cart':
491 echo wp_kses_post(apply_filters( 'htcompare_add_to_cart_btn', $product[ $field_id ] ));
492 break;
493
494 case 'attribute':
495 echo wp_kses_post( $product[ $field_id ] );
496 break;
497
498 case 'weight':
499 if ( $product[ $field_id ] ) {
500 $unit = $product[ $field_id ] !== '-' ? get_option( 'woocommerce_weight_unit' ) : '';
501 echo wp_kses_post(wc_format_localized_decimal( $product[ $field_id ] )) . ' ' . esc_attr( $unit );
502 }
503 break;
504
505 case 'description':
506 echo wp_kses_post(apply_filters( 'woocommerce_short_description', $product[ $field_id ] ));
507 break;
508
509 default:
510 echo wp_kses_post( $product[ $field_id ] );
511 break;
512 }
513 }
514
515 /**
516 * [add_to_cart_html] Generate Cart button
517 * @param [object] $product
518 */
519 public function add_to_cart_html( $product ) {
520 if ( ! $product ) return;
521
522 $defaults = array(
523 'quantity' => 1,
524 'class' => implode( ' ', array_filter( array(
525 'htcompare-cart-button button',
526 'product_type_' . $product->get_type(),
527 $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
528 $product->supports( 'ajax_add_to_cart' ) && $product->is_purchasable() && $product->is_in_stock() ? 'ajax_add_to_cart' : '',
529 ) ) ),
530 'attributes' => array(
531 'data-product_id' => $product->get_id(),
532 'data-product_sku' => $product->get_sku(),
533 'aria-label' => $product->add_to_cart_description(),
534 'rel' => 'nofollow',
535 ),
536 );
537
538 $args = apply_filters( 'woocommerce_loop_add_to_cart_args', $defaults, $product );
539
540 if ( isset( $args['attributes']['aria-label'] ) ) {
541 $args['attributes']['aria-label'] = wp_strip_all_tags( $args['attributes']['aria-label'] );
542 }
543
544 return apply_filters( 'woocommerce_loop_add_to_cart_link',
545 sprintf( '<a href="%s" data-quantity="%s" class="%s add-to-cart-loop" %s><span>%s</span></a>',
546 esc_url( $product->add_to_cart_url() ),
547 esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 ),
548 esc_attr( isset( $args['class'] ) ? $args['class'] : 'button' ),
549 isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '',
550 esc_html( $product->add_to_cart_text() )
551 ),
552 $product, $args );
553 }
554
555 /**
556 * [availability_html]
557 * @param [object] $product
558 * @return [html]
559 */
560 public function availability_html( $product ) {
561 $html = '';
562 $availability = $product->get_availability();
563
564 if( empty( $availability['availability'] ) ) {
565 $availability['availability'] = __( 'In stock', 'ever-compare' );
566 }
567
568 if ( ! empty( $availability['availability'] ) ) {
569 ob_start();
570
571 wc_get_template( 'single-product/stock.php', array(
572 'product' => $product,
573 'class' => $availability['class'],
574 'availability' => $availability['availability'],
575 ) );
576
577 $html = ob_get_clean();
578 }
579
580 return apply_filters( 'woocommerce_get_stock_html', $html, $product );
581 }
582
583 /**
584 * [compare_cookie_name] Get Compare cookie name
585 * @return [string]
586 */
587 public function get_cookie_name() {
588 $name = 'ever_compare_compare_list';
589 if ( is_multisite() ){
590 $name .= '_' . get_current_blog_id();
591 }
592 return $name;
593 }
594
595 /**
596 * [is_product_in_compare]
597 * @param [int] $id product id
598 * @return [array] product id list
599 */
600 public function is_product_in_compare( $id ) {
601 $list = $this->get_compared_products();
602 return in_array( absint($id), $list, true );
603 }
604
605 /**
606 * [get_compared_products]
607 * @return [json]
608 */
609 public function get_compared_products() {
610 $cookie_name = $this->get_cookie_name();
611 if(!empty( $_COOKIE[ $cookie_name ] )) {
612 $decoded = json_decode( sanitize_text_field(wp_unslash( $_COOKIE[ $cookie_name ] )), true );
613 if ( is_array( $decoded ) ) {
614 return array_filter( array_map( 'absint', $decoded ) );
615 }
616 }
617 return [];
618 }
619
620 /**
621 * [compare_json_response]
622 * @return [json] product json
623 */
624 public function compare_json_response() {
625 $count = 0;
626 $products = $this->get_compared_products();
627
628 ob_start();
629
630 $this->get_response_html();
631
632 $table_html = ob_get_clean();
633
634 if ( is_array( $products ) ) {
635 $count = count( $products );
636 }
637
638 $res = [
639 'count' => $count,
640 'table' => $table_html,
641 'products' => $products,
642 'limitReached' => '<div class="ever-compare-message-error"><p>'. wp_kses_post( esc_html__( 'You have already added the maximum number of products.', 'ever-compare' ) ).'</p></div>'
643 ];
644 wp_send_json( $res );
645
646 }
647
648 /**
649 * [get_compare_page_url] Compare Page Link
650 * @return [URL]
651 */
652 public function get_compare_page_url() {
653 $page_id = ever_compare_get_option( 'compare_page', 'ever_compare_table_settings_tabs' );
654 return get_permalink( $page_id );
655 }
656
657 /**
658 * [field_name]
659 * @param [string] $field
660 * @return [string]
661 */
662 public function field_name( $field = '', $custom = false ){
663
664 if( empty( $field ) ){
665 return;
666 }
667
668 if( $custom === true ){
669 return $field;
670 }
671
672 $default = ever_compare_get_default_fields();
673
674 $str = substr( $field, 0, 3 );
675 if( 'pa_' === $str ){
676 $field_name = wc_attribute_label( $field );
677 }else{
678 $field_name = $default[$field];
679 }
680 return $field_name;
681
682 }
683
684
685 }