PluginProbe
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant / trunk
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant vtrunk
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 1.9.12 All 59 releases
merchant / admin / classes / class-merchant-admin-modules.php

class-merchant-admin-modules.php in Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant trunk, at admin/classes/class-merchant-admin-modules.php

684 lines 29.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Merchant_Admin_Modules Class.
4 */
5
6 if ( ! defined( 'ABSPATH' ) ) {
7 exit; // Exit if accessed directly
8 }
9
10 if ( ! class_exists( 'Merchant_Admin_Modules' ) ) {
11 class Merchant_Admin_Modules {
12
13 /**
14 * Upsell modules.
15 */
16 public static $modules_data = array();
17
18 /**
19 * The single class instance.
20 */
21 private static $instance = null;
22
23 /**
24 * Instance.
25 */
26 public static function instance() {
27 if ( is_null( self::$instance ) ) {
28 self::$instance = new self();
29 }
30 return self::$instance;
31 }
32
33 /**
34 * Constructor.
35 */
36 public function __construct() {
37 self::$modules_data = array(
38 'pre-orders' => array(
39 'pro' => false,
40 'section' => 'boost-revenue',
41 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-pre-orders' ),
42 ),
43 'wait-list' => array(
44 'pro' => true,
45 'section' => 'boost-revenue',
46 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-wait-list' ),
47 ),
48 'product-bundles' => array(
49 'pro' => true,
50 'section' => 'boost-revenue',
51 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-product-bundles' ),
52 ),
53 'frequently-bought-together' => array(
54 'pro' => true,
55 'section' => 'boost-revenue',
56 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-frequently-bought-together' ),
57 ),
58 'buy-x-get-y' => array(
59 'pro' => true,
60 'section' => 'boost-revenue',
61 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-buy-x-get-y' ),
62 ),
63 'complementary-products' => array(
64 'pro' => true,
65 'section' => 'boost-revenue',
66 'icon' => Merchant_SVG_Icons::get_svg_icon( 'complementary-products' ),
67 ),
68 'volume-discounts' => array(
69 'pro' => true,
70 'section' => 'boost-revenue',
71 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-volume-discounts' ),
72 ),
73 'storewide-sale' => array(
74 'pro' => true,
75 'section' => 'boost-revenue',
76 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-storewide-sale' ),
77 ),
78 'spending-goal' => array(
79 'pro' => true,
80 'section' => 'boost-revenue',
81 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-spending-goal' ),
82 ),
83 'free-gifts' => array(
84 'pro' => true,
85 'section' => 'boost-revenue',
86 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-free-gifts' ),
87 ),
88 'free-shipping-progress-bar' => array(
89 'pro' => true,
90 'section' => 'boost-revenue',
91 'icon' => Merchant_SVG_Icons::get_svg_icon( 'free-shipping-progress-bar' ),
92 ),
93 'product-labels' => array(
94 'pro' => false,
95 'section' => 'convert-more',
96 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-product-labels' ),
97 ),
98 'quick-view' => array(
99 'pro' => false,
100 'section' => 'convert-more',
101 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-quick-view' ),
102 ),
103 'added-to-cart-popup' => array(
104 'pro' => true,
105 'section' => 'convert-more',
106 'icon' => Merchant_SVG_Icons::get_svg_icon( 'added-to-cart-popup' ),
107 ),
108 'countdown-timer' => array(
109 'pro' => true,
110 'section' => 'convert-more',
111 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-countdown-timer' ),
112 ),
113 'stock-scarcity' => array(
114 'pro' => true,
115 'section' => 'convert-more',
116 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-stock-scarcity' ),
117 ),
118 'checkout' => array(
119 'pro' => true,
120 'section' => 'convert-more',
121 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-checkout' ),
122 ),
123 'sticky-add-to-cart' => array(
124 'pro' => true,
125 'section' => 'convert-more',
126 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-sticky-add-to-cart' ),
127 ),
128 'recently-viewed-products' => array(
129 'pro' => true,
130 'section' => 'convert-more',
131 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-recently-viewed-products' ),
132 ),
133 'buy-now' => array(
134 'pro' => false,
135 'section' => 'reduce-abandonment',
136 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-buy-now' ),
137 ),
138 'cart-count-favicon' => array(
139 'pro' => false,
140 'section' => 'reduce-abandonment',
141 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-cart-count-favicon' ),
142 ),
143 'inactive-tab-message' => array(
144 'pro' => false,
145 'section' => 'reduce-abandonment',
146 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-inactive-tab-message' ),
147 ),
148 'cart-reserved-timer' => array(
149 'pro' => true,
150 'section' => 'reduce-abandonment',
151 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-cart-reserved-timer' ),
152 ),
153 'side-cart' => array(
154 'pro' => true,
155 'section' => 'reduce-abandonment',
156 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-side-cart' ),
157 ),
158 'payment-logos' => array(
159 'pro' => false,
160 'section' => 'build-trust',
161 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-payment-logos' ),
162 ),
163 'trust-badges' => array(
164 'pro' => false,
165 'section' => 'build-trust',
166 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-trust-badges' ),
167 ),
168 'advanced-reviews' => array(
169 'pro' => true,
170 'section' => 'build-trust',
171 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-advanced-reviews' ),
172 ),
173 'recent-sales-notifications' => array(
174 'pro' => true,
175 'section' => 'build-trust',
176 'icon' => Merchant_SVG_Icons::get_svg_icon( 'recent-sales-notifications' ),
177 ),
178 'reasons-to-buy' => array(
179 'pro' => true,
180 'section' => 'build-trust',
181 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-reasons-to-buy' ),
182 ),
183 'quick-social-links' => array(
184 'pro' => true,
185 'section' => 'build-trust',
186 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-quick-social-links' ),
187 ),
188 'product-brand-image' => array(
189 'pro' => true,
190 'section' => 'build-trust',
191 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-product-brand-image' ),
192 ),
193 'animated-add-to-cart' => array(
194 'pro' => false,
195 'section' => 'improve-experience',
196 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-animated-add-to-cart' ),
197 ),
198 'add-to-cart-text' => array(
199 'pro' => false,
200 'section' => 'improve-experience',
201 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-add-to-cart-text' ),
202 ),
203 'auto-external-links' => array(
204 'pro' => false,
205 'section' => 'improve-experience',
206 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-auto-external-links' ),
207 ),
208 'real-time-search' => array(
209 'pro' => false,
210 'section' => 'improve-experience',
211 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-real-time-search' ),
212 ),
213 'scroll-to-top-button' => array(
214 'pro' => false,
215 'section' => 'improve-experience',
216 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-scroll-to-top-button' ),
217 ),
218 'address-autocomplete' => array(
219 'pro' => true,
220 'section' => 'improve-experience',
221 'icon' => Merchant_SVG_Icons::get_svg_icon( 'google-autocomplete' ),
222 ),
223 'size-chart' => array(
224 'pro' => true,
225 'section' => 'improve-experience',
226 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-size-chart' ),
227 ),
228 'product-swatches' => array(
229 'pro' => true,
230 'section' => 'improve-experience',
231 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-product-swatches' ),
232 ),
233 'wishlist' => array(
234 'pro' => true,
235 'section' => 'improve-experience',
236 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-wishlist' ),
237 ),
238 'product-navigation-links' => array(
239 'pro' => true,
240 'section' => 'improve-experience',
241 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-product-navigation-links' ),
242 ),
243 'product-video' => array(
244 'pro' => true,
245 'section' => 'improve-experience',
246 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-product-video' ),
247 ),
248 'product-audio' => array(
249 'pro' => true,
250 'section' => 'improve-experience',
251 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-product-audio' ),
252 ),
253 'login-popup' => array(
254 'pro' => true,
255 'section' => 'improve-experience',
256 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-login-popup' ),
257 ),
258 'clear-cart' => array(
259 'pro' => false,
260 'section' => 'improve-experience',
261 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-clear-cart' ),
262 ),
263 'agree-to-terms-checkbox' => array(
264 'pro' => false,
265 'section' => 'protect-your-store',
266 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-agree-to-terms-checkbox' ),
267 ),
268 'cookie-banner' => array(
269 'pro' => false,
270 'section' => 'protect-your-store',
271 'icon' => Merchant_SVG_Icons::get_svg_icon( 'module-cookie-banner' ),
272 ),
273 );
274 }
275
276 /**
277 * Get modules.
278 */
279 public static function get_modules() {
280
281 $modules = array(
282
283 'boost-revenue' => array(
284 'title' => esc_html__( 'Boost Revenue', 'merchant' ),
285 'modules' => array(),
286 ),
287
288 'convert-more' => array(
289 'title' => esc_html__( 'Convert More', 'merchant' ),
290 'modules' => array(),
291 ),
292
293 'reduce-abandonment' => array(
294 'title' => esc_html__( 'Reduce Cart Abandonment', 'merchant' ),
295 'modules' => array(),
296 ),
297
298 'build-trust' => array(
299 'title' => esc_html__( 'Build Trust', 'merchant' ),
300 'modules' => array(),
301 ),
302
303 'improve-experience' => array(
304 'title' => esc_html__( 'Improve Experience', 'merchant' ),
305 'modules' => array(),
306 ),
307
308 'protect-your-store' => array(
309 'title' => esc_html__( 'Protect Store', 'merchant' ),
310 'modules' => array(),
311 ),
312
313 );
314
315 /**
316 * Hook: merchant_modules
317 *
318 * @since 1.0
319 */
320 $modules = apply_filters( 'merchant_modules', $modules, self::modules_translation_data() );
321
322 // Populate modules with data and translations
323 foreach ( self::$modules_data as $module_id => $module_data ) {
324 if ( isset( self::modules_translation_data()[ $module_id ] ) ) {
325 $modules[ $module_data['section'] ]['modules'][ $module_id ] = array_merge(
326 $module_data,
327 array(
328 'title' => self::modules_translation_data()[ $module_id ]['title'],
329 'desc' => self::modules_translation_data()[ $module_id ]['desc'],
330 'tutorial_url' => self::modules_translation_data()[ $module_id ]['tutorial_url'],
331 'ai_examples' => self::get_module_ai_examples( $module_id ),
332 )
333 );
334 }
335 }
336
337 return $modules;
338 }
339
340 /**
341 * Get a module's AI prompt examples.
342 *
343 * Prefers the module's own class (see Merchant_Add_Module::get_ai_examples())
344 * and falls back to modules_translation_data() for modules that don't yet
345 * define their own.
346 *
347 * @param string $module_id The module identifier.
348 *
349 * @return array Array with 'blurb' and 'prompts' keys, or an empty array.
350 */
351 private static function get_module_ai_examples( $module ) {
352 $module_instance = Merchant_Modules::get_module( $module );
353
354 if ( $module_instance && ! empty( $module_instance->get_ai_examples() ) ) {
355 return $module_instance->get_ai_examples();
356 }
357
358 return self::modules_translation_data()[ $module ]['ai_examples'] ?? array();
359 }
360
361 /**
362 * Get upsell modules.
363 */
364 public static function get_upsell_modules() {
365 $upsell_modules = array_filter( self::$modules_data, static function ( $module ) {
366 return isset( $module['pro'] ) && $module['pro'] ? $module : false;
367 } );
368
369 // Add translations to upsell modules
370 foreach ( $upsell_modules as $module_id => $module_data ) {
371 if ( isset( self::modules_translation_data()[ $module_id ] ) ) {
372 $upsell_modules[ $module_id ] = array_merge(
373 $module_data,
374 array(
375 'title' => self::modules_translation_data()[ $module_id ]['title'],
376 'desc' => self::modules_translation_data()[ $module_id ]['desc'],
377 'tutorial_url' => self::modules_translation_data()[ $module_id ]['tutorial_url'],
378 )
379 );
380 }
381 }
382
383 return $upsell_modules;
384 }
385
386 /**
387 * Add upsell to modules.
388 */
389 public static function add_upsell_modules( $modules ) {
390 if ( defined( 'MERCHANT_PRO_VERSION' ) ) {
391 return $modules;
392 }
393
394 foreach ( self::get_upsell_modules() as $module_id => $module_data ) {
395 $modules[ $module_data['section'] ]['modules'][ $module_id ] = $module_data;
396 }
397
398 return $modules;
399 }
400
401 /**
402 * Get module info.
403 */
404 public static function get_module_info( $module ) {
405 // Check if module exists in modules_data
406 if ( isset( self::$modules_data[ $module ] ) && isset( self::modules_translation_data()[ $module ] ) ) {
407 return array_merge(
408 self::$modules_data[ $module ],
409 array(
410 'title' => self::modules_translation_data()[ $module ]['title'],
411 'desc' => self::modules_translation_data()[ $module ]['desc'],
412 'tutorial_url' => self::modules_translation_data()[ $module ]['tutorial_url'],
413 'ai_examples' => self::get_module_ai_examples( $module ),
414 )
415 );
416 }
417
418 // Fallback to checking get_modules
419 $modules = self::get_modules();
420 $maybe_found = array_column( array_column( $modules, 'modules' ), $module );
421
422 if ( ! empty( $maybe_found ) && ! empty( $maybe_found[0] ) ) {
423 return $maybe_found[0];
424 }
425
426 return false;
427 }
428
429 /**
430 * Supply modules translatable title and descriptions to modules data.
431 *
432 * @return array Array of modules data.
433 */
434 private static function modules_translation_data() {
435 /**
436 * Hook: merchant_modules_translation_data
437 * Allow translating module data later when needed.
438 *
439 * @param array $modules_data Array of modules data.
440 *
441 * @since 2.1.0
442 */
443 return apply_filters( 'merchant_modules_translation_data', array(
444 'pre-orders' => array(
445 'title' => esc_html__( 'Pre-Orders', 'merchant' ),
446 'desc' => esc_html__( 'Allow visitors to pre-order products that are either out of stock or not yet released', 'merchant' ),
447 'tutorial_url' => 'https://docs.athemes.com/article/pre-orders/',
448 ),
449 'wait-list' => array(
450 'title' => esc_html__( 'Waitlist', 'merchant' ),
451 'desc' => esc_html__( 'Build waitlists for sold-out items and auto-notify potential customers when items are restocked', 'merchant' ),
452 'tutorial_url' => 'https://docs.athemes.com/article/merchant-waitlist/',
453 ),
454 'product-bundles' => array(
455 'title' => esc_html__( 'Product Bundles', 'merchant' ),
456 'desc' => esc_html__( 'Create bundles of products to be sold together and boost your average order value', 'merchant' ),
457 'tutorial_url' => 'https://docs.athemes.com/article/merchant-product-bundles/',
458 ),
459 'frequently-bought-together' => array(
460 'title' => esc_html__( 'Frequently Bought Together', 'merchant' ),
461 'desc' => esc_html__( 'Create bundles of related products that customers can add to their cart with just one click', 'merchant' ),
462 'tutorial_url' => 'https://docs.athemes.com/article/merchant-frequently-bought-together/',
463 ),
464 'buy-x-get-y' => array(
465 'title' => esc_html__( 'Buy X, Get Y', 'merchant' ),
466 'desc' => esc_html__( 'Create offers where purchasing a specific quantity of Product X triggers a discount on Product Y', 'merchant' ),
467 'tutorial_url' => 'https://docs.athemes.com/article/merchant-buy-x-get-y/',
468 ),
469 'complementary-products' => array(
470 'title' => esc_html__( 'Complementary Products', 'merchant' ),
471 'desc' => esc_html__( 'Offer complementary products to help increase average order value', 'merchant' ),
472 'tutorial_url' => 'https://docs.athemes.com/article/merchant-complementary-products/',
473 ),
474 'volume-discounts' => array(
475 'title' => esc_html__( 'Bulk Discounts', 'merchant' ),
476 'desc' => esc_html__( 'Offer discounts on larger quantity purchases to drive up average order value', 'merchant' ),
477 'tutorial_url' => 'https://docs.athemes.com/article/merchant-bulk-discounts/',
478 ),
479 'storewide-sale' => array(
480 'title' => esc_html__( 'Storewide Sale', 'merchant' ),
481 'desc' => esc_html__( 'Create discount campaigns for all your products, specific categories, or specific products', 'merchant' ),
482 'tutorial_url' => 'https://docs.athemes.com/article/merchant-storewide-sale/',
483 ),
484 'spending-goal' => array(
485 'title' => esc_html__( 'Spending Discount Goal', 'merchant' ),
486 'desc' => esc_html__( 'Motivate higher order values by offering customers discounts for reaching spending goals', 'merchant' ),
487 'tutorial_url' => 'https://docs.athemes.com/article/merchant-spending-goal/',
488 ),
489 'free-gifts' => array(
490 'title' => esc_html__( 'Free Gifts', 'merchant' ),
491 'desc' => esc_html__( 'Reward shoppers with a gift if they hit a specified spending target or apply a coupon', 'merchant' ),
492 'tutorial_url' => 'https://docs.athemes.com/article/merchant-gift-card/',
493 ),
494 'free-shipping-progress-bar' => array(
495 'title' => esc_html__( 'Free Shipping Bar', 'merchant' ),
496 'desc' => esc_html__( 'Encourage customers to spend more by displaying the amount left needed for free shipping', 'merchant' ),
497 'tutorial_url' => 'https://docs.athemes.com/article/merchant-free-shipping-progress-bar/',
498 ),
499 'product-labels' => array(
500 'title' => esc_html__( 'Product Labels', 'merchant' ),
501 'desc' => esc_html__( 'Create customizable product labels with display conditions and color settings', 'merchant' ),
502 'tutorial_url' => 'https://docs.athemes.com/article/product-labels/',
503 ),
504 'quick-view' => array(
505 'title' => esc_html__( 'Quick View', 'merchant' ),
506 'desc' => esc_html__( 'Allows users to quickly view product details without leaving the current page', 'merchant' ),
507 'tutorial_url' => 'https://docs.athemes.com/article/quick-view/',
508 ),
509 'added-to-cart-popup' => array(
510 'title' => esc_html__( 'Added To Cart Popup', 'merchant' ),
511 'desc' => esc_html__( 'Display a dynamic popup with product suggestions when items are added to the cart', 'merchant' ),
512 'tutorial_url' => 'https://docs.athemes.com/article/merchant-added-to-cart-popup/',
513 ),
514 'countdown-timer' => array(
515 'title' => esc_html__( 'Countdown Timer', 'merchant' ),
516 'desc' => esc_html__( 'Create a sense of urgency by displaying a countdown timer on your discounted products', 'merchant' ),
517 'tutorial_url' => 'https://docs.athemes.com/article/merchant-countdown-timer/',
518 ),
519 'stock-scarcity' => array(
520 'title' => esc_html__( 'Stock Scarcity', 'merchant' ),
521 'desc' => esc_html__( 'Let visitors know that stock is running low on products they are looking at', 'merchant' ),
522 'tutorial_url' => 'https://docs.athemes.com/article/merchant-stock-scarcity/',
523 ),
524 'checkout' => array(
525 'title' => esc_html__( 'Checkouts', 'merchant' ),
526 'desc' => esc_html__( 'Choose from three different checkout layouts: Shopify-style, Multi-step or One-page', 'merchant' ),
527 'tutorial_url' => 'https://docs.athemes.com/article/merchant-checkouts/',
528 ),
529 'sticky-add-to-cart' => array(
530 'title' => esc_html__( 'Sticky Add To Cart', 'merchant' ),
531 'desc' => esc_html__( 'Display a sticky add to cart bar when visitors are scrolling on your product pages', 'merchant' ),
532 'tutorial_url' => 'https://docs.athemes.com/article/merchant-sticky-add-to-cart/',
533 ),
534 'recently-viewed-products' => array(
535 'title' => esc_html__( 'Recently Viewed Products', 'merchant' ),
536 'desc' => esc_html__( 'Show recently viewed products on product pages and in the cart', 'merchant' ),
537 'tutorial_url' => 'https://docs.athemes.com/article/merchant-recently-viewed-products/',
538 ),
539 'buy-now' => array(
540 'title' => esc_html__( 'Buy Now', 'merchant' ),
541 'desc' => esc_html__( 'Send your customers directly to checkout instead of the cart with Buy Now buttons', 'merchant' ),
542 'tutorial_url' => 'https://docs.athemes.com/article/buy-now/',
543 ),
544 'cart-count-favicon' => array(
545 'title' => esc_html__( 'Cart Count Favicon', 'merchant' ),
546 'desc' => esc_html__( 'Make your browser tab stand out by showing the number of items in the cart on the favicon', 'merchant' ),
547 'tutorial_url' => 'https://docs.athemes.com/article/cart-count-favicon/',
548 ),
549 'inactive-tab-message' => array(
550 'title' => esc_html__( 'Inactive Tab Message', 'merchant' ),
551 'desc' => esc_html__( 'Modify the browser tab\'s title when the visitor navigates away from your store', 'merchant' ),
552 'tutorial_url' => 'https://docs.athemes.com/article/merchant-inactive-tab-message/',
553 ),
554 'cart-reserved-timer' => array(
555 'title' => esc_html__( 'Cart Reserved Timer', 'merchant' ),
556 'desc' => esc_html__( 'Create urgency by letting visitors know that the products in cart are reserved for a limited time', 'merchant' ),
557 'tutorial_url' => 'https://docs.athemes.com/article/merchant-cart-reserved-timer/',
558 ),
559 'side-cart' => array(
560 'title' => esc_html__( 'Side Cart', 'merchant' ),
561 'desc' => esc_html__( 'Show a sliding cart whenever a customer adds a product to the cart', 'merchant' ),
562 'tutorial_url' => 'https://docs.athemes.com/article/merchant-side-cart/',
563 ),
564 'payment-logos' => array(
565 'title' => esc_html__( 'Payment Logos', 'merchant' ),
566 'desc' => esc_html__( 'Display the logos of the payment methods you accept on product pages', 'merchant' ),
567 'tutorial_url' => 'https://docs.athemes.com/article/payment-logos/',
568 ),
569 'trust-badges' => array(
570 'title' => esc_html__( 'Trust Badges', 'merchant' ),
571 'desc' => esc_html__( 'Reassure customers by showcasing different badge-shaped store benefits', 'merchant' ),
572 'tutorial_url' => 'https://docs.athemes.com/article/trust-badges/',
573 ),
574 'advanced-reviews' => array(
575 'title' => esc_html__( 'Advanced Reviews', 'merchant' ),
576 'desc' => esc_html__( 'Enhance your customer reviews with advanced features including photo uploads and more', 'merchant' ),
577 'tutorial_url' => 'https://docs.athemes.com/article/merchant-advanced-reviews/',
578 ),
579 'recent-sales-notifications' => array(
580 'title' => esc_html__( 'Recent Sales Notifications', 'merchant' ),
581 'desc' => esc_html__( 'Build trust by displaying real-time notifications of purchases and other user activity on your store', 'merchant' ),
582 'tutorial_url' => 'https://docs.athemes.com/article/merchant-recent-sales-notifications/',
583 ),
584 'reasons-to-buy' => array(
585 'title' => esc_html__( 'Reasons To Buy List', 'merchant' ),
586 'desc' => esc_html__( 'Provide customers with a summary of the key features and benefits of your products', 'merchant' ),
587 'tutorial_url' => 'https://docs.athemes.com/article/merchant-reasons-to-buy/',
588 ),
589 'quick-social-links' => array(
590 'title' => esc_html__( 'Quick Social Links', 'merchant' ),
591 'desc' => esc_html__( 'Display floating social media icons to make it easier for your customers to connect with you', 'merchant' ),
592 'tutorial_url' => 'https://docs.athemes.com/article/merchant-quick-social-links/',
593 ),
594 'product-brand-image' => array(
595 'title' => esc_html__( 'Product Brand Image', 'merchant' ),
596 'desc' => esc_html__( 'Add brand images to products to instill confidence in potential buyers', 'merchant' ),
597 'tutorial_url' => 'https://docs.athemes.com/article/merchant-product-brand-image/',
598 ),
599 'animated-add-to-cart' => array(
600 'title' => esc_html__( 'Animated Add to Cart', 'merchant' ),
601 'desc' => esc_html__( 'Make your Add To Cart button stand out by adding an animation on mouse over or page load', 'merchant' ),
602 'tutorial_url' => 'https://docs.athemes.com/article/animated-add-to-cart/',
603 ),
604 'add-to-cart-text' => array(
605 'title' => esc_html__( 'Add To Cart Text', 'merchant' ),
606 'desc' => esc_html__( 'Change your store\'s \'Add to Cart\' text for various product types, as well as individual products', 'merchant' ),
607 'tutorial_url' => 'https://docs.athemes.com/article/merchant-add-to-cart-text/',
608 ),
609 'auto-external-links' => array(
610 'title' => esc_html__( 'Auto External Links', 'merchant' ),
611 'desc' => esc_html__( 'Keep users from navigating away from your store by opening external links in a new browser tab', 'merchant' ),
612 'tutorial_url' => 'https://docs.athemes.com/article/auto-external-links/',
613 ),
614 'real-time-search' => array(
615 'title' => esc_html__( 'Real-Time Search', 'merchant' ),
616 'desc' => esc_html__( 'Help visitors instantly find the products they\'re looking for by using predictive search', 'merchant' ),
617 'tutorial_url' => 'https://docs.athemes.com/article/real-time-search/',
618 ),
619 'scroll-to-top-button' => array(
620 'title' => esc_html__( 'Scroll to Top Button', 'merchant' ),
621 'desc' => esc_html__( 'Help your customers get back easily to the top of the page with a single click', 'merchant' ),
622 'tutorial_url' => 'https://docs.athemes.com/article/scroll-to-top-button/',
623 ),
624 'address-autocomplete' => array(
625 'title' => esc_html__( 'Google Address Autocomplete', 'merchant' ),
626 'desc' => esc_html__( 'Streamline your checkout process and reduce user errors by autocompleting the address fields', 'merchant' ),
627 'tutorial_url' => 'https://docs.athemes.com/article/merchant-google-address-autocomplete/',
628 ),
629 'size-chart' => array(
630 'title' => esc_html__( 'Size Chart', 'merchant' ),
631 'desc' => esc_html__( 'Reduce returns and increase sales by showing a size chart on specific products or all products', 'merchant' ),
632 'tutorial_url' => 'https://docs.athemes.com/article/merchant-size-chart/',
633 ),
634 'product-swatches' => array(
635 'title' => esc_html__( 'Variation Swatches', 'merchant' ),
636 'desc' => esc_html__( 'Display variable product options as customizable color/image icons, buttons, or dropdowns', 'merchant' ),
637 'tutorial_url' => 'https://docs.athemes.com/article/merchant-variation-swatches/',
638 ),
639 'wishlist' => array(
640 'title' => esc_html__( 'Wishlist', 'merchant' ),
641 'desc' => esc_html__( 'Allow customers to easily save products they are interested in for later', 'merchant' ),
642 'tutorial_url' => 'https://docs.athemes.com/article/merchant-wishlist/',
643 ),
644 'product-navigation-links' => array(
645 'title' => esc_html__( 'Product Navigation Links', 'merchant' ),
646 'desc' => esc_html__( 'Enable easy navigation from one product to the next with next/previous links', 'merchant' ),
647 'tutorial_url' => 'https://docs.athemes.com/article/merchant-product-navigation-links/',
648 ),
649 'product-video' => array(
650 'title' => esc_html__( 'Product Video', 'merchant' ),
651 'desc' => esc_html__( 'Upload video to be viewed in product galleries and on archive pages', 'merchant' ),
652 'tutorial_url' => 'https://docs.athemes.com/article/merchant-product-video/',
653 ),
654 'product-audio' => array(
655 'title' => esc_html__( 'Product Audio', 'merchant' ),
656 'desc' => esc_html__( 'Upload audio to be listened to in product galleries and on archive pages', 'merchant' ),
657 'tutorial_url' => 'https://docs.athemes.com/article/merchant-product-audio/',
658 ),
659 'login-popup' => array(
660 'title' => esc_html__( 'Login Popup', 'merchant' ),
661 'desc' => esc_html__( 'Allow users to log in with a simple pop up without navigating to a new page', 'merchant' ),
662 'tutorial_url' => 'https://docs.athemes.com/article/merchant-login-popup/',
663 ),
664 'clear-cart' => array(
665 'title' => esc_html__( 'Clear Cart', 'merchant' ),
666 'desc' => esc_html__( 'Display a clear cart button to let customers empty their carts and start fresh', 'merchant' ),
667 'tutorial_url' => 'https://docs.athemes.com/article/merchant-clear-cart/',
668 ),
669 'agree-to-terms-checkbox' => array(
670 'title' => esc_html__( 'Agree to Terms Checkbox', 'merchant' ),
671 'desc' => esc_html__( 'Get customers to agree to your Terms & Conditions as part of the checkout process', 'merchant' ),
672 'tutorial_url' => 'https://docs.athemes.com/article/agree-to-terms-checkbox/',
673 ),
674 'cookie-banner' => array(
675 'title' => esc_html__( 'Cookie Banner', 'merchant' ),
676 'desc' => esc_html__( 'Inform your visitors that the site uses cookies via a dismissable banner', 'merchant' ),
677 'tutorial_url' => 'https://docs.athemes.com/article/cookie-banner/',
678 ),
679 ) );
680 }
681 }
682
683 Merchant_Admin_Modules::instance();
684 }