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

425 lines 12.4 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_single_product_summary', array( $this, 'trust_badges_output' ), 30 );
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'] );
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 <div class="mrc-preview-single-product-elements">
262 <div class="mrc-preview-left-column">
263 <div class="mrc-preview-product-image-wrapper">
264 <div class="mrc-preview-product-image"></div>
265 <div class="mrc-preview-product-image-thumbs">
266 <div class="mrc-preview-product-image-thumb"></div>
267 <div class="mrc-preview-product-image-thumb"></div>
268 <div class="mrc-preview-product-image-thumb"></div>
269 </div>
270 </div>
271 </div>
272 <div class="mrc-preview-right-column">
273 <div class="mrc-preview-text-placeholder"></div>
274 <div class="mrc-preview-text-placeholder mrc-mw-70"></div>
275 <div class="mrc-preview-text-placeholder mrc-mw-30 mrc-hide-on-smaller-screens"></div>
276 <div class="mrc-preview-addtocart-placeholder mrc-hide-on-smaller-screens"></div>
277 <?php $this->trust_badges_output(); ?>
278 </div>
279 </div>
280
281 <?php
282 }
283
284 /**
285 * Get trust badges.
286 *
287 * @param string $badges
288 * @return array $badges Array of logos.
289 */
290 public function get_badges( $badges ) {
291 return ! empty( $badges )
292 ? explode( ',', $badges )
293 : array(
294 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge1.svg',
295 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge2.svg',
296 MERCHANT_URI . 'inc/modules/' . self::MODULE_ID . '/admin/images/badge3.svg',
297 );
298 }
299
300 /**
301 * Get placeholder badges alternative descriptions.
302 *
303 * @return array $logos_alt Array of badges alternative descriptions.
304 */
305 public function get_placeholder_badges_alt_map() {
306 return array(
307 'badge1.svg' => __( 'Original', 'merchant' ),
308 'badge2.svg' => __( '24/7 Support', 'merchant' ),
309 'badge3.svg' => __( 'Satisfaction', 'merchant' ),
310 );
311 }
312
313 /**
314 * Render trust badges.
315 * TODO: Render through template files.
316 *
317 * @return void
318 */
319 public function trust_badges_output() {
320 if ( $this->is_shortcode_enabled() || ! is_product() ) {
321 return;
322 }
323
324 $settings = $this->get_module_settings();
325 $is_placeholder = empty( $settings['badges'] );
326 $badges = $this->get_badges( $settings[ 'badges' ] );
327 $placeholder_badges_alt = $this->get_placeholder_badges_alt_map();
328 ?>
329 <fieldset class="merchant-trust-badges">
330 <?php if ( ! empty( $settings[ 'title' ] ) ) : ?>
331 <legend class="merchant-trust-badges-title"><?php echo esc_html( Merchant_Translator::translate( $settings[ 'title' ] ) ); ?></legend>
332 <?php endif; ?>
333
334 <?php if ( ! $is_placeholder ) : ?>
335 <div class="merchant-trust-badges-images">
336 <?php
337 foreach ( $badges as $image_id ) {
338 echo wp_kses_post( wp_get_attachment_image( $image_id, 'full' ) );
339 }
340 ?>
341 </div>
342
343 <?php else : ?>
344 <div class="merchant-trust-badges-images is-placeholder">
345 <?php foreach ( $badges as $badge_src ) :
346 $image_basename = basename( $badge_src );
347 $image_alt = isset( $placeholder_badges_alt[ $image_basename ] ) ? $placeholder_badges_alt[ $image_basename ] : '';
348 ?>
349 <img src="<?php echo esc_url( $badge_src ); ?>" alt="<?php echo esc_attr( $image_alt ); ?>"/>
350 <?php endforeach; ?>
351 </div>
352 <?php endif; ?>
353 </fieldset>
354 <?php
355 }
356
357 /**
358 * Custom CSS.
359 *
360 * @return string
361 */
362 public function get_module_custom_css() {
363 $css = '';
364
365 // Font Size.
366 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'font-size', 15, '.merchant-trust-badges', '--mrc-tb-font-size', 'px' );
367
368 // Text Color.
369 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'text-color', '#212121', '.merchant-trust-badges', '--mrc-tb-text-color' );
370
371 // Border Color.
372 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'border-color', '#e5e5e5', '.merchant-trust-badges', '--mrc-tb-border-color' );
373
374 // Margin Top.
375 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'margin-top', 20, '.merchant-trust-badges', '--mrc-tb-margin-top', 'px' );
376
377 // Margin Bottom.
378 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'margin-bottom', 20, '.merchant-trust-badges', '--mrc-tb-margin-bottom', 'px' );
379
380 // Align.
381 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'align', 'center', '.merchant-trust-badges', '--mrc-tb-align' );
382
383 // Image Max Width.
384 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'image-max-width', 70, '.merchant-trust-badges', '--mrc-tb-image-max-width', 'px' );
385
386 // Image Max Height.
387 $css .= Merchant_Custom_CSS::get_variable_css( 'trust-badges', 'image-max-height', 70, '.merchant-trust-badges', '--mrc-tb-image-max-height', 'px' );
388
389 return $css;
390 }
391
392 /**
393 * Admin custom CSS.
394 *
395 * @param string $css The custom CSS.
396 * @return string $css The custom CSS.
397 */
398 public function admin_custom_css( $css ) {
399 $css .= $this->get_module_custom_css();
400
401 return $css;
402 }
403
404 /**
405 * Frontend custom CSS.
406 *
407 * @param string $css The custom CSS.
408 * @return string $css The custom CSS.
409 */
410 public function frontend_custom_css( $css ) {
411 if ( ! is_singular( 'product' ) && ! Merchant_Modules::is_module_active( 'quick-view' ) ) {
412 return $css;
413 }
414
415 $css .= $this->get_module_custom_css();
416
417 return $css;
418 }
419 }
420
421 // Initialize the module.
422 add_action( 'init', function() {
423 new Merchant_Trust_Badges();
424 } );
425