PluginProbe
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant / 1.8
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant v1.8
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, at inc/modules/trust-badges/class-trust-badges.php

432 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 /**
123 * Print shortcode content.
124 *
125 * @return string
126 */
127 public function shortcode_handler() {
128 // Check if module is active.
129 if ( ! Merchant_Modules::is_module_active( $this->module_id ) ) {
130 return '';
131 }
132
133 // Check if shortcode is enabled.
134 if ( ! $this->is_shortcode_enabled() ) {
135 return '';
136 }
137
138 // Check if we are on a single product page.
139 if ( ! is_singular( 'product' ) ) {
140 // If user is admin, show error message.
141 if ( current_user_can( 'manage_options' ) ) {
142 return $this->shortcode_placement_error();
143 }
144
145 return '';
146 }
147 ob_start();
148
149 $settings = $this->get_module_settings();
150 $is_placeholder = empty( $settings[ 'badges' ] ) ? true : false;
151 $badges = $this->get_badges( $settings[ 'badges' ] );
152 ?>
153 <fieldset class="merchant-trust-badges">
154 <?php if ( ! empty( $settings[ 'title' ] ) ) : ?>
155 <legend class="merchant-trust-badges-title"><?php echo esc_html( Merchant_Translator::translate( $settings[ 'title' ] ) ); ?></legend>
156 <?php endif; ?>
157 <?php if ( ! $is_placeholder ) : ?>
158 <div class="merchant-trust-badges-images">
159 <?php foreach ( $badges as $image_id ) : ?>
160 <?php $imagedata = wp_get_attachment_image_src( $image_id, 'full' ); ?>
161 <?php if ( ! empty( $imagedata ) && ! empty( $imagedata[0] ) ) : ?>
162 <?php echo sprintf( '<img src="%s" />', esc_url( $imagedata[0] ) ); ?>
163 <?php endif; ?>
164 <?php endforeach; ?>
165 </div>
166 <?php else : ?>
167 <div class="merchant-trust-badges-images is-placeholder">
168 <?php foreach ( $badges as $badge_src ) : ?>
169 <img src="<?php echo esc_url( $badge_src ); ?>" />
170 <?php endforeach; ?>
171 </div>
172 <?php endif; ?>
173 </fieldset>
174 <?php
175 $shortcode_content = ob_get_clean();
176
177 /**
178 * Filter the shortcode html content.
179 *
180 * @param string $shortcode_content shortcode html content
181 * @param string $module_id module id
182 * @param int $post_id product id
183 *
184 * @since 1.8
185 */
186 return apply_filters( 'merchant_module_shortcode_content_html', $shortcode_content, $this->module_id, get_the_ID() );
187 }
188
189 /**
190 * Init translations.
191 *
192 * @return void
193 */
194 public function init_translations() {
195 $settings = $this->get_module_settings();
196 if ( ! empty( $settings['title'] ) ) {
197 Merchant_Translator::register_string( $settings['title'], esc_html__( 'Trust badges text above logos', 'merchant' ) );
198 }
199 }
200
201 /**
202 * Admin enqueue CSS.
203 *
204 * @return void
205 */
206 public function admin_enqueue_css() {
207 $page = ( ! empty( $_GET['page'] ) ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
208 $module = ( ! empty( $_GET['module'] ) ) ? sanitize_text_field( wp_unslash( $_GET['module'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
209
210 if ( 'merchant' === $page && self::MODULE_ID === $module ) {
211 wp_enqueue_style( 'merchant-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/trust-badges.min.css', [], MERCHANT_VERSION );
212 wp_enqueue_style( 'merchant-admin-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/admin/preview.min.css', array(), MERCHANT_VERSION );
213 }
214 }
215
216 /**
217 * Enqueue CSS.
218 *
219 * @return void
220 */
221 public function enqueue_css() {
222 if ( ! is_singular( 'product' ) && ! Merchant_Modules::is_module_active( 'quick-view' ) ) {
223 return;
224 }
225
226 // Specific module styles.
227 wp_enqueue_style( 'merchant-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/trust-badges.min.css', array(), MERCHANT_VERSION );
228 }
229
230 /**
231 * Render admin preview
232 *
233 * @param Merchant_Admin_Preview $preview
234 * @param string $module
235 *
236 * @return Merchant_Admin_Preview
237 */
238 public function render_admin_preview( $preview, $module ) {
239 if ( self::MODULE_ID === $module ) {
240 ob_start();
241 self::admin_preview_content();
242 $content = ob_get_clean();
243
244 // HTML.
245 $preview->set_html( $content );
246
247 // Text Above the Logos.
248 $preview->set_text( 'title', '.merchant-trust-badges-title' );
249
250 }
251
252 return $preview;
253 }
254
255 /**
256 * Admin preview content.
257 *
258 * @return void
259 */
260 public function admin_preview_content() {
261 ?>
262
263 <div class="mrc-preview-single-product-elements">
264 <div class="mrc-preview-left-column">
265 <div class="mrc-preview-product-image-wrapper">
266 <div class="mrc-preview-product-image"></div>
267 <div class="mrc-preview-product-image-thumbs">
268 <div class="mrc-preview-product-image-thumb"></div>
269 <div class="mrc-preview-product-image-thumb"></div>
270 <div class="mrc-preview-product-image-thumb"></div>
271 </div>
272 </div>
273 </div>
274 <div class="mrc-preview-right-column">
275 <div class="mrc-preview-text-placeholder"></div>
276 <div class="mrc-preview-text-placeholder mrc-mw-70"></div>
277 <div class="mrc-preview-text-placeholder mrc-mw-30 mrc-hide-on-smaller-screens"></div>
278 <div class="mrc-preview-addtocart-placeholder mrc-hide-on-smaller-screens"></div>
279 <?php $this->trust_badges_output(); ?>
280 </div>
281 </div>
282
283 <?php
284 }
285
286 /**
287 * Get trust badges.
288 *
289 * @param string $badges
290 * @return array $badges Array of logos.
291 */
292 public function get_badges( $badges ) {
293 return ! empty( $badges )
294 ? explode( ',', $badges )
295 : array(
296 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge1.svg',
297 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge2.svg',
298 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge3.svg'
299 );
300 }
301
302 /**
303 * Render trust badges.
304 * TODO: Render through template files.
305 *
306 * @return void
307 */
308 public function trust_badges_output() {
309 if ( $this->is_shortcode_enabled() ) {
310 return;
311 }
312
313 if ( is_archive() ) {
314 return;
315 }
316
317 $settings = $this->get_module_settings();
318 $is_placeholder = empty( $settings[ 'badges' ] ) ? true : false;
319 $badges = $this->get_badges( $settings[ 'badges' ] );
320
321 ?>
322
323 <fieldset class="merchant-trust-badges">
324
325 <?php if ( ! empty( $settings[ 'title' ] ) ) : ?>
326 <legend class="merchant-trust-badges-title"><?php echo esc_html( Merchant_Translator::translate( $settings[ 'title' ] ) ); ?></legend>
327 <?php endif; ?>
328
329 <?php if ( ! $is_placeholder ) : ?>
330
331 <div class="merchant-trust-badges-images">
332
333 <?php foreach ( $badges as $image_id ) : ?>
334
335 <?php $imagedata = wp_get_attachment_image_src( $image_id, 'full' ); ?>
336
337 <?php if ( ! empty( $imagedata ) && ! empty( $imagedata[0] ) ) : ?>
338
339 <?php echo wp_kses_post( wp_get_attachment_image( $image_id ) ) ?>
340
341 <?php endif; ?>
342
343 <?php endforeach; ?>
344
345 </div>
346
347 <?php else : ?>
348
349 <div class="merchant-trust-badges-images is-placeholder">
350 <?php foreach ( $badges as $badge_src ) : ?>
351 <img src="<?php echo esc_url( $badge_src ); ?>" />
352 <?php endforeach; ?>
353 </div>
354
355 <?php endif; ?>
356
357 </fieldset>
358
359 <?php
360
361 }
362
363 /**
364 * Custom CSS.
365 *
366 * @return string
367 */
368 public function get_module_custom_css() {
369 $css = '';
370
371 // Font Size.
372 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'font-size', 15, '.merchant-trust-badges', '--mrc-tb-font-size', 'px' );
373
374 // Text Color.
375 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'text-color', '#212121', '.merchant-trust-badges', '--mrc-tb-text-color' );
376
377 // Border Color.
378 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'border-color', '#e5e5e5', '.merchant-trust-badges', '--mrc-tb-border-color' );
379
380 // Margin Top.
381 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'margin-top', 20, '.merchant-trust-badges', '--mrc-tb-margin-top', 'px' );
382
383 // Margin Bottom.
384 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'margin-bottom', 20, '.merchant-trust-badges', '--mrc-tb-margin-bottom', 'px' );
385
386 // Align.
387 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'align', 'center', '.merchant-trust-badges', '--mrc-tb-align' );
388
389 // Image Max Width.
390 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'image-max-width', 70, '.merchant-trust-badges', '--mrc-tb-image-max-width', 'px' );
391
392 // Image Max Height.
393 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'image-max-height', 70, '.merchant-trust-badges', '--mrc-tb-image-max-height', 'px' );
394
395 return $css;
396 }
397
398 /**
399 * Admin custom CSS.
400 *
401 * @param string $css The custom CSS.
402 * @return string $css The custom CSS.
403 */
404 public function admin_custom_css( $css ) {
405 $css .= $this->get_module_custom_css();
406
407 return $css;
408 }
409
410 /**
411 * Frontend custom CSS.
412 *
413 * @param string $css The custom CSS.
414 * @return string $css The custom CSS.
415 */
416 public function frontend_custom_css( $css ) {
417 if ( ! is_singular( 'product' ) && ! Merchant_Modules::is_module_active( 'quick-view' ) ) {
418 return $css;
419 }
420
421 $css .= $this->get_module_custom_css();
422
423 return $css;
424 }
425
426 }
427
428 // Initialize the module.
429 add_action( 'init', function() {
430 new Merchant_Trust_Badges();
431 } );
432