PluginProbe
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant / 1.8.2
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant v1.8.2
2.3.2 2.3.1 2.3.0 2.2.8 2.2.7 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.10.5 1.11.0 1.11.1 1.11.2 1.6 1.7 1.8 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 1.9.10 1.9.11 All 60 releases
merchant / inc / modules / trust-badges / class-trust-badges.php

class-trust-badges.php in Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant 1.8.2, at inc/modules/trust-badges/class-trust-badges.php

429 lines 12.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Trust Badges.
5 *
6 * @package Merchant
7 */
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit; // Exit if accessed directly
11 }
12
13 /**
14 * Trust Badges Class.
15 *
16 */
17 class Merchant_Trust_Badges extends Merchant_Add_Module {
18
19 /**
20 * Module ID.
21 *
22 */
23 const MODULE_ID = 'trust-badges';
24
25 /**
26 * Is module preview.
27 *
28 */
29 public static $is_module_preview = false;
30
31 /**
32 * Whether the module has a shortcode or not.
33 *
34 * @var bool
35 */
36 public $has_shortcode = true;
37
38 /**
39 * Constructor.
40 *
41 */
42 public function __construct() {
43
44 // Module id.
45 $this->module_id = self::MODULE_ID;
46
47 // WooCommerce only.
48 $this->wc_only = true;
49
50 // Parent construct.
51 parent::__construct();
52
53 // Module section.
54 $this->module_section = 'build-trust';
55
56 // Module default settings.
57 $this->module_default_settings = array(
58 'badges' => '',
59 'align' => 'center',
60 'title' => __( 'Product Quality Guaranteed!', 'merchant' ),
61 );
62
63 // Mount preview url.
64 $preview_url = site_url( '/' );
65
66 if ( function_exists( 'wc_get_products' ) ) {
67 $products = wc_get_products( array( 'limit' => 1 ) );
68
69 if ( ! empty( $products ) && ! empty( $products[0] ) ) {
70 $preview_url = get_permalink( $products[0]->get_id() );
71 }
72 }
73
74 // Module data.
75 $this->module_data = Merchant_Admin_Modules::$modules_data[ self::MODULE_ID ];
76 $this->module_data[ 'preview_url' ] = $preview_url;
77
78 // Module options path.
79 $this->module_options_path = MERCHANT_DIR . 'inc/modules/' . self::MODULE_ID . '/admin/options.php';
80
81 // Is module preview page.
82 if ( is_admin() && parent::is_module_settings_page() ) {
83 self::$is_module_preview = true;
84
85 // Enqueue admin styles.
86 add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_css' ) );
87
88 // Admin preview box.
89 add_filter( 'merchant_module_preview', array( $this, 'render_admin_preview' ), 10, 2 );
90
91 // Custom CSS.
92 // The custom CSS should be added here as well due to ensure preview box works properly.
93 add_filter( 'merchant_custom_css', array( $this, 'admin_custom_css' ) );
94
95 }
96
97 if ( Merchant_Modules::is_module_active( self::MODULE_ID ) && is_admin() ) {
98 // Init translations.
99 $this->init_translations();
100 }
101
102 if ( ! Merchant_Modules::is_module_active( self::MODULE_ID ) ) {
103 return;
104 }
105
106 // Return early if it's on admin but not in the respective module settings page.
107 if ( is_admin() && ! parent::is_module_settings_page() ) {
108 return;
109 }
110
111 // Enqueue styles.
112 add_action( 'merchant_enqueue_before_main_css_js', array( $this, 'enqueue_css' ) );
113
114 // Add trust badges after add to cart form on single product pages.
115 add_action( 'woocommerce_after_add_to_cart_form', array( $this, 'trust_badges_output' ) );
116
117 // Custom CSS.
118 add_filter( 'merchant_custom_css', array( $this, 'frontend_custom_css' ) );
119 }
120
121 /**
122 * Print shortcode content.
123 *
124 * @return string
125 */
126 public function shortcode_handler() {
127 // Check if module is active.
128 if ( ! Merchant_Modules::is_module_active( $this->module_id ) ) {
129 return '';
130 }
131
132 // Check if shortcode is enabled.
133 if ( ! $this->is_shortcode_enabled() ) {
134 return '';
135 }
136
137 // Check if we are on a single product page.
138 if ( ! is_singular( 'product' ) ) {
139 // If user is admin, show error message.
140 if ( current_user_can( 'manage_options' ) ) {
141 return $this->shortcode_placement_error();
142 }
143
144 return '';
145 }
146 ob_start();
147
148 $settings = $this->get_module_settings();
149 $is_placeholder = empty( $settings[ 'badges' ] ) ? true : false;
150 $badges = $this->get_badges( $settings[ 'badges' ] );
151 ?>
152 <fieldset class="merchant-trust-badges">
153 <?php if ( ! empty( $settings[ 'title' ] ) ) : ?>
154 <legend class="merchant-trust-badges-title"><?php echo esc_html( Merchant_Translator::translate( $settings[ 'title' ] ) ); ?></legend>
155 <?php endif; ?>
156 <?php if ( ! $is_placeholder ) : ?>
157 <div class="merchant-trust-badges-images">
158 <?php foreach ( $badges as $image_id ) : ?>
159 <?php $imagedata = wp_get_attachment_image_src( $image_id, 'full' ); ?>
160 <?php if ( ! empty( $imagedata ) && ! empty( $imagedata[0] ) ) : ?>
161 <?php printf( '<img src="%s" />', esc_url( $imagedata[0] ) ); ?>
162 <?php endif; ?>
163 <?php endforeach; ?>
164 </div>
165 <?php else : ?>
166 <div class="merchant-trust-badges-images is-placeholder">
167 <?php foreach ( $badges as $badge_src ) : ?>
168 <img src="<?php echo esc_url( $badge_src ); ?>" />
169 <?php endforeach; ?>
170 </div>
171 <?php endif; ?>
172 </fieldset>
173 <?php
174 $shortcode_content = ob_get_clean();
175
176 /**
177 * Filter the shortcode html content.
178 *
179 * @param string $shortcode_content shortcode html content
180 * @param string $module_id module id
181 * @param int $post_id product id
182 *
183 * @since 1.8
184 */
185 return apply_filters( 'merchant_module_shortcode_content_html', $shortcode_content, $this->module_id, get_the_ID() );
186 }
187
188 /**
189 * Init translations.
190 *
191 * @return void
192 */
193 public function init_translations() {
194 $settings = $this->get_module_settings();
195 if ( ! empty( $settings['title'] ) ) {
196 Merchant_Translator::register_string( $settings['title'], esc_html__( 'Trust badges text above logos', 'merchant' ) );
197 }
198 }
199
200 /**
201 * Admin enqueue CSS.
202 *
203 * @return void
204 */
205 public function admin_enqueue_css() {
206 $page = ( ! empty( $_GET['page'] ) ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
207 $module = ( ! empty( $_GET['module'] ) ) ? sanitize_text_field( wp_unslash( $_GET['module'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
208
209 if ( 'merchant' === $page && self::MODULE_ID === $module ) {
210 wp_enqueue_style( 'merchant-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/trust-badges.min.css', array(), MERCHANT_VERSION );
211 wp_enqueue_style( 'merchant-admin-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/admin/preview.min.css', array(), MERCHANT_VERSION );
212 }
213 }
214
215 /**
216 * Enqueue CSS.
217 *
218 * @return void
219 */
220 public function enqueue_css() {
221 if ( ! is_singular( 'product' ) && ! Merchant_Modules::is_module_active( 'quick-view' ) ) {
222 return;
223 }
224
225 // Specific module styles.
226 wp_enqueue_style( 'merchant-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/trust-badges.min.css', array(), MERCHANT_VERSION );
227 }
228
229 /**
230 * Render admin preview
231 *
232 * @param Merchant_Admin_Preview $preview
233 * @param string $module
234 *
235 * @return Merchant_Admin_Preview
236 */
237 public function render_admin_preview( $preview, $module ) {
238 if ( self::MODULE_ID === $module ) {
239 ob_start();
240 self::admin_preview_content();
241 $content = ob_get_clean();
242
243 // HTML.
244 $preview->set_html( $content );
245
246 // Text Above the Logos.
247 $preview->set_text( 'title', '.merchant-trust-badges-title' );
248
249 }
250
251 return $preview;
252 }
253
254 /**
255 * Admin preview content.
256 *
257 * @return void
258 */
259 public function admin_preview_content() {
260 ?>
261
262 <div class="mrc-preview-single-product-elements">
263 <div class="mrc-preview-left-column">
264 <div class="mrc-preview-product-image-wrapper">
265 <div class="mrc-preview-product-image"></div>
266 <div class="mrc-preview-product-image-thumbs">
267 <div class="mrc-preview-product-image-thumb"></div>
268 <div class="mrc-preview-product-image-thumb"></div>
269 <div class="mrc-preview-product-image-thumb"></div>
270 </div>
271 </div>
272 </div>
273 <div class="mrc-preview-right-column">
274 <div class="mrc-preview-text-placeholder"></div>
275 <div class="mrc-preview-text-placeholder mrc-mw-70"></div>
276 <div class="mrc-preview-text-placeholder mrc-mw-30 mrc-hide-on-smaller-screens"></div>
277 <div class="mrc-preview-addtocart-placeholder mrc-hide-on-smaller-screens"></div>
278 <?php $this->trust_badges_output(); ?>
279 </div>
280 </div>
281
282 <?php
283 }
284
285 /**
286 * Get trust badges.
287 *
288 * @param string $badges
289 * @return array $badges Array of logos.
290 */
291 public function get_badges( $badges ) {
292 return ! empty( $badges )
293 ? explode( ',', $badges )
294 : array(
295 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge1.svg',
296 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge2.svg',
297 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge3.svg',
298 );
299 }
300
301 /**
302 * Render trust badges.
303 * TODO: Render through template files.
304 *
305 * @return void
306 */
307 public function trust_badges_output() {
308 if ( $this->is_shortcode_enabled() ) {
309 return;
310 }
311
312 if ( is_archive() ) {
313 return;
314 }
315
316 $settings = $this->get_module_settings();
317 $is_placeholder = empty( $settings[ 'badges' ] ) ? true : false;
318 $badges = $this->get_badges( $settings[ 'badges' ] );
319
320 ?>
321
322 <fieldset class="merchant-trust-badges">
323
324 <?php if ( ! empty( $settings[ 'title' ] ) ) : ?>
325 <legend class="merchant-trust-badges-title"><?php echo esc_html( Merchant_Translator::translate( $settings[ 'title' ] ) ); ?></legend>
326 <?php endif; ?>
327
328 <?php if ( ! $is_placeholder ) : ?>
329
330 <div class="merchant-trust-badges-images">
331
332 <?php foreach ( $badges as $image_id ) : ?>
333
334 <?php $imagedata = wp_get_attachment_image_src( $image_id, 'full' ); ?>
335
336 <?php if ( ! empty( $imagedata ) && ! empty( $imagedata[0] ) ) : ?>
337
338 <?php echo wp_kses_post( wp_get_attachment_image( $image_id ) ) ?>
339
340 <?php endif; ?>
341
342 <?php endforeach; ?>
343
344 </div>
345
346 <?php else : ?>
347
348 <div class="merchant-trust-badges-images is-placeholder">
349 <?php foreach ( $badges as $badge_src ) : ?>
350 <img src="<?php echo esc_url( $badge_src ); ?>" />
351 <?php endforeach; ?>
352 </div>
353
354 <?php endif; ?>
355
356 </fieldset>
357
358 <?php
359 }
360
361 /**
362 * Custom CSS.
363 *
364 * @return string
365 */
366 public function get_module_custom_css() {
367 $css = '';
368
369 // Font Size.
370 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'font-size', 15, '.merchant-trust-badges', '--mrc-tb-font-size', 'px' );
371
372 // Text Color.
373 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'text-color', '#212121', '.merchant-trust-badges', '--mrc-tb-text-color' );
374
375 // Border Color.
376 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'border-color', '#e5e5e5', '.merchant-trust-badges', '--mrc-tb-border-color' );
377
378 // Margin Top.
379 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'margin-top', 20, '.merchant-trust-badges', '--mrc-tb-margin-top', 'px' );
380
381 // Margin Bottom.
382 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'margin-bottom', 20, '.merchant-trust-badges', '--mrc-tb-margin-bottom', 'px' );
383
384 // Align.
385 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'align', 'center', '.merchant-trust-badges', '--mrc-tb-align' );
386
387 // Image Max Width.
388 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'image-max-width', 70, '.merchant-trust-badges', '--mrc-tb-image-max-width', 'px' );
389
390 // Image Max Height.
391 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'image-max-height', 70, '.merchant-trust-badges', '--mrc-tb-image-max-height', 'px' );
392
393 return $css;
394 }
395
396 /**
397 * Admin custom CSS.
398 *
399 * @param string $css The custom CSS.
400 * @return string $css The custom CSS.
401 */
402 public function admin_custom_css( $css ) {
403 $css .= $this->get_module_custom_css();
404
405 return $css;
406 }
407
408 /**
409 * Frontend custom CSS.
410 *
411 * @param string $css The custom CSS.
412 * @return string $css The custom CSS.
413 */
414 public function frontend_custom_css( $css ) {
415 if ( ! is_singular( 'product' ) && ! Merchant_Modules::is_module_active( 'quick-view' ) ) {
416 return $css;
417 }
418
419 $css .= $this->get_module_custom_css();
420
421 return $css;
422 }
423 }
424
425 // Initialize the module.
426 add_action( 'init', function() {
427 new Merchant_Trust_Badges();
428 } );
429