PluginProbe
Ever Compare – Products Compare Plugin for WooCommerce / trunk
Ever Compare – Products Compare Plugin for WooCommerce vtrunk
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 trunk, at includes/classes/Frontend/Manage_Compare.php

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