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 / Shortcode.php

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

206 lines 7.6 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 * Shortcode handler class
7 */
8 class Shortcode {
9
10 /**
11 * [$_instance]
12 * @var null
13 */
14 private static $_instance = null;
15
16 /**
17 * [instance] Initializes a singleton instance
18 * @return [Base]
19 */
20 public static function instance() {
21 if ( is_null( self::$_instance ) ) {
22 self::$_instance = new self();
23 }
24 return self::$_instance;
25 }
26
27 /**
28 * Initializes the class
29 */
30 function __construct() {
31 add_shortcode( 'evercompare_button', [ $this, 'button_shortcode' ] );
32 add_shortcode( 'evercompare_table', [ $this, 'table_shortcode' ] );
33 add_shortcode( 'evercompare_counter', [ $this, 'counter_shortcode' ] );
34 }
35
36 /**
37 * [button_shortcode] Compare Button Shortcode callable function
38 * @param [type] $atts
39 * @param string $content
40 * @return [HTML]
41 */
42 public function button_shortcode( $atts, $content = '' ){
43
44 wp_enqueue_style( 'evercompare-frontend' );
45 wp_enqueue_script( 'evercompare-frontend' );
46
47 global $product;
48 $product_id = '';
49 $product_title = '';
50 if ( $product && is_a( $product, 'WC_Product' ) ) {
51 $product_id = $product->get_id();
52 $product_title = $product->get_name();
53 } else if (get_post_type(get_the_ID()) === 'product') {
54 $product_id = get_the_ID();
55 $product_title = get_the_title($product_id);
56 }
57
58 // Fetch option data
59 $remove_on_click = ever_compare_get_option( 'remove_on_click','ever_compare_settings_tabs', 'off' );
60 $button_text = ever_compare_get_option( 'button_text','ever_compare_settings_tabs', 'Compare' );
61 $button_added_text = ever_compare_get_option( 'added_button_text','ever_compare_settings_tabs', 'Added' );
62 $button_remove_text = ever_compare_get_option( 'remove_button_text','ever_compare_settings_tabs', 'Remove' );
63 $button_remove_text = empty($button_remove_text) ? __('Remove', 'ever-compare') : $button_remove_text;
64
65 $shop_page_btn_position = ever_compare_get_option( 'shop_btn_position', 'ever_compare_settings_tabs', 'after_cart_btn' );
66 $product_page_btn_position = ever_compare_get_option( 'product_btn_position', 'ever_compare_settings_tabs', 'after_cart_btn' );
67 $button_style = ever_compare_get_option( 'button_style', 'ever_compare_style_tabs', 'theme' );
68
69 $button_class = array(
70 'htcompare-btn',
71 'htcompare-btn-style-'.$button_style,
72 'htcompare-shop-'.$shop_page_btn_position,
73 'htcompare-product-'.$product_page_btn_position,
74 );
75
76 if( $button_style === 'theme' ){
77 $button_class[] = 'button';
78 }
79
80 $button_icon = $this->get_icon();
81 $added_button_icon = $this->get_icon('added_');
82
83 if( !empty( $button_text ) ){
84 $button_text = '<span class="evercompare-btn-text">'.$button_text.'</span>';
85 }
86
87 if($remove_on_click === 'off'){
88 if( !empty( $button_added_text ) ){
89 $button_added_text = '<span class="evercompare-btn-text">'.$button_added_text.'</span>';
90 }
91 } else {
92 $button_added_text = '<span class="evercompare-btn-text">'.$button_remove_text.'</span>';
93 }
94
95 // Shortcode atts
96 $default_atts = array(
97 'product_id' => $product_id,
98 'product_title' => $product_title,
99 'button_url' => Manage_Compare::instance()->get_compare_page_url(),
100 'button_class' => implode(' ', $button_class ),
101 'button_text' => $button_icon.$button_text,
102 'button_added_text' => $added_button_icon.$button_added_text,
103 'template_name' => 'add',
104 );
105
106 $atts = shortcode_atts( $default_atts, $atts, $content );
107 return Manage_Compare::instance()->button_html( $atts );
108
109 }
110
111 /**
112 * [table_shortcode] Compare table shortcode callable function
113 * @param [type] $atts
114 * @param string $content
115 * @return [HTML]
116 */
117 public function table_shortcode( $atts, $content = '' ){
118
119 wp_enqueue_style( 'evercompare-frontend' );
120 wp_enqueue_script( 'evercompare-frontend' );
121
122 // Shareable link via query param — render server-side (not cached due to query param)
123 if ( ! empty( $_GET['evcompare'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
124 /* Fetch From option data */
125 $empty_compare_text = ever_compare_get_option('empty_table_text','ever_compare_table_settings_tabs');
126 $return_shop_button = ever_compare_get_option('shop_button_text','ever_compare_table_settings_tabs','Return to shop');
127
128 /* Product and Field */
129 $products = Manage_Compare::instance()->get_compared_products_data();
130 $fields = Manage_Compare::instance()->get_compare_fields();
131
132 $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();
133
134 $default_atts = array(
135 'evercompare' => Manage_Compare::instance(),
136 'products' => $products,
137 'fields' => $fields,
138 'return_shop_button'=> $return_shop_button,
139 'heading_txt' => $custom_heading,
140 'empty_compare_text'=> $empty_compare_text,
141 );
142
143 $atts = shortcode_atts( $default_atts, $atts, $content );
144 return Manage_Compare::instance()->table_html( $atts );
145 }
146
147 // Cookie-based: render placeholder that JS will populate via AJAX
148 return '<div class="htcompare-table" data-ajax-load="true"></div>';
149
150 }
151
152 /**
153 * Evercompare Counter Shortcode
154 *
155 * @param [array] $atts
156 * @param string $content
157 * @return void
158 */
159 public function counter_shortcode( $atts, $content = '' ){
160
161 wp_enqueue_style( 'evercompare-frontend' );
162 wp_enqueue_script( 'evercompare-frontend' );
163
164 $default_atts = array(
165 'count' => 0,
166 'page_url' => Manage_Compare::instance()->get_compare_page_url(),
167 );
168
169 $atts = shortcode_atts( $default_atts, $atts, $content );
170 return Manage_Compare::instance()->count_html( $atts );
171
172 }
173
174 /**
175 * [get_icon]
176 * @param string $type
177 * @return [HTML]
178 */
179 public function get_icon( $type = '' ){
180
181 $default_icon = ever_compare_icon_list('default');
182 $default_loader = '<span class="ever-compare-loader">'.ever_compare_icon_list('loading').'</span>';
183
184 $button_text = ( $type === 'added' ) ? ever_compare_get_option( 'added_button_text','ever_compare_settings_tabs', 'Added' ) : ever_compare_get_option( 'button_text','ever_compare_settings_tabs', 'Compare' );
185
186 $button_icon_type = ever_compare_get_option( $type.'button_icon_type', 'ever_compare_settings_tabs', 'default' );
187
188 if( $button_icon_type === 'custom' ){
189 $button_icon = ever_compare_get_option( $type.'button_custom_icon','ever_compare_settings_tabs', '' );
190 }elseif( $button_icon_type === 'default' ){
191 return $default_icon;
192 }else{
193 $button_icon = '';
194 }
195
196 if( !empty( $button_icon ) ){
197 $button_icon = '<span class="ever-compare-btn-image"><img src="'.esc_url( $button_icon ).'" alt="'.esc_attr( $button_text ).'"></span>';
198 }
199
200 return $default_loader.$button_icon;
201
202 }
203
204
205 }
206