PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.0
ShopBuilder – WooCommerce Builder For Elementor v3.2.0
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
shopbuilder / app / Controllers / AssetsController.php

AssetsController.php in ShopBuilder – WooCommerce Builder For Elementor 3.2.0, at app/Controllers/AssetsController.php

616 lines 18.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Assets Controller Class
4 *
5 * @package RadiusTheme\SB
6 */
7
8 namespace RadiusTheme\SB\Controllers;
9
10 use RadiusTheme\SB\AI\AIFns;
11 use RadiusTheme\SB\Helpers\Fns;
12 use RadiusTheme\SB\Models\Settings;
13 use RadiusTheme\SB\Helpers\BuilderFns;
14 use RadiusTheme\SB\Traits\SingletonTrait;
15
16 // Do not allow directly accessing this file.
17 if ( ! defined( 'ABSPATH' ) ) {
18 exit( 'This script cannot be accessed directly.' );
19 }
20
21 /**
22 * Assets Controller Class
23 */
24 class AssetsController {
25
26 use SingletonTrait;
27
28 /**
29 * Plugin version
30 *
31 * @var string
32 */
33 private $version;
34
35 /**
36 * Ajax URL
37 *
38 * @var string
39 */
40 private static $ajaxurl;
41
42 /**
43 * Styles.
44 *
45 * @var array
46 */
47 private $styles = [];
48
49 /**
50 * Scripts.
51 *
52 * @var array
53 */
54 private $scripts = [];
55
56 /**
57 * Cached bundled assets.
58 *
59 * @var array|null
60 */
61 private $cached_bundled_assets = null;
62
63 /**
64 * Class Constructor
65 */
66 public function __construct() {
67 $this->version = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? time() : RTSB_VERSION;
68
69 // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
70 if ( in_array( 'sitepress-multilingual-cms/sitepress.php', get_option( 'active_plugins' ) ) ) {
71 self::$ajaxurl = admin_url( 'admin-ajax.php?lang=' . ICL_LANGUAGE_CODE );
72 } else {
73 self::$ajaxurl = admin_url( 'admin-ajax.php' );
74 }
75 add_filter( 'rtsb/optimizer/scripts/deps', [ $this, 'extend_shared_dependencies' ], 99 );
76 /**
77 * Admin scripts.
78 */
79 add_action( 'admin_enqueue_scripts', [ $this, 'register_backend_assets' ], 1 );
80 add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_backend_scripts' ], 15 );
81
82 /**
83 * Public scripts.
84 */
85 add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_public_scripts' ], 25 );
86 /**
87 * General scripts.
88 */
89 add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_general_public_scripts' ], 30 );
90 }
91 /**
92 * Shared dependencies.
93 *
94 * @param array $deps Dependencies.
95 *
96 * @return array
97 */
98 public function extend_shared_dependencies( $deps ) {
99 if ( Fns::is_elementor_widget_active( 'products_slider' ) ) {
100 $deps[] = 'swiper';
101 }
102 return array_unique( $deps );
103 }
104 /**
105 * Get all frontend scripts.
106 *
107 * @return void
108 */
109 private function get_public_assets() {
110 $this->get_public_styles()->get_public_scripts();
111 }
112
113 /**
114 * Get public styles.
115 *
116 * @return object
117 */
118 private function get_public_styles() {
119 $rtl_suffix = is_rtl() ? '-rtl' : '';
120 $rtl_dir = is_rtl() ? trailingslashit( 'rtl' ) : trailingslashit( 'css' );
121
122 $this->styles[] = [
123 'handle' => 'rtsb-odometer',
124 'src' => rtsb()->get_assets_uri( 'vendor/odometer/css/odometer.min.css' ),
125 ];
126
127 $this->styles[] = [
128 'handle' => 'rtsb-fonts',
129 'src' => rtsb()->get_assets_uri( 'css/frontend/rtsb-fonts.css' ),
130 ];
131 if ( rtsb()->has_pro() ) {
132 $this->styles[] = [
133 'handle' => 'rtsb-noui-slider',
134 'src' => rtsbpro()->get_assets_uri( 'vendors/nouislider/nouislider.min.css' ),
135 ];
136 }
137
138 $pro_version = defined( 'RTSBPRO_VERSION' ) ? RTSBPRO_VERSION : '0';
139 $addon_condition = version_compare( $pro_version, '1.9.0', '<' );
140
141 if ( ! rtsb()->has_pro() && Fns::is_optimization_enabled() ) {
142 $this->styles[] = AssetRegistry::instance()->load_optimized_assets();
143 } else {
144 if ( $addon_condition ) {
145 $this->styles[] = [
146 'handle' => 'rtsb-general-addons',
147 'src' => rtsb()->get_assets_uri( $rtl_dir . 'frontend/general-addons' . $rtl_suffix . '.css' ),
148 ];
149 }
150 $this->styles[] = [
151 'handle' => 'rtsb-frontend',
152 'src' => rtsb()->get_assets_uri( $rtl_dir . 'frontend/frontend' . $rtl_suffix . '.css' ),
153 ];
154 }
155 if ( BuilderFns::is_builder_preview() && 'elementor' == Fns::page_edit_with( get_the_ID() ) ) {
156 $this->styles[] = [
157 'handle' => 'photoswipe',
158 'src' => plugins_url( 'assets/css/photoswipe/photoswipe.min.css', WC_PLUGIN_FILE ),
159 ];
160
161 $this->styles[] = [
162 'handle' => 'photoswipe-default-skin',
163 'src' => plugins_url( 'assets/css/photoswipe/default-skin/default-skin.min.css', WC_PLUGIN_FILE ),
164 ];
165
166 // Load only for elementor editor page and fix some issue.
167 $this->styles[] = [
168 'handle' => 'elementor-editor-style-fix',
169 'src' => rtsb()->get_assets_uri( 'css/backend/elementor-editor-style-fix.css' ),
170 ];
171 }
172
173 return $this;
174 }
175
176 /**
177 * Get public scripts.
178 *
179 * @return object
180 */
181 private function get_public_scripts() {
182 $this->scripts[] = [
183 'handle' => 'swiper',
184 'src' => esc_url( $this->get_swiper_url() ),
185 'deps' => [ 'jquery' ],
186 'footer' => true,
187 ];
188 $this->scripts[] = [
189 'handle' => 'rtsb-waypoints',
190 'src' => rtsb()->get_assets_uri( 'vendor/waypoints/js/jquery.waypoints.min.js' ),
191 'deps' => [ 'jquery' ],
192 'footer' => true,
193 ];
194 $this->scripts[] = [
195 'handle' => 'rtsb-odometer',
196 'src' => rtsb()->get_assets_uri( 'vendor/odometer/js/odometer.min.js' ),
197 'deps' => [ 'jquery' ],
198 'footer' => true,
199 ];
200
201 $this->scripts[] = [
202 'handle' => 'rtsb-tipsy',
203 'src' => rtsb()->get_assets_uri( 'vendor/tipsy/tipsy.min.js' ),
204 'deps' => [ 'jquery' ],
205 'footer' => true,
206 ];
207
208 if ( BuilderFns::is_builder_preview() && 'elementor' == Fns::page_edit_with( get_the_ID() ) ) {
209 $this->scripts[] = [
210 'handle' => 'wc-flexslider',
211 'src' => plugins_url( 'assets/js/flexslider/jquery.flexslider.js', WC_PLUGIN_FILE ),
212 'deps' => [ 'jquery' ],
213 'footer' => true,
214 ];
215
216 $this->scripts[] = [
217 'handle' => 'photoswipe',
218 'src' => plugins_url( 'assets/js/photoswipe/photoswipe.js', WC_PLUGIN_FILE ),
219 'deps' => [ 'jquery' ],
220 'footer' => true,
221 ];
222
223 $this->scripts[] = [
224 'handle' => 'wc-zoom',
225 'src' => plugins_url( 'assets/js/zoom/jquery.zoom.js', WC_PLUGIN_FILE ),
226 'deps' => [ 'jquery' ],
227 'footer' => true,
228 ];
229
230 $this->scripts[] = [
231 'handle' => 'wc-photoswipe-ui-default',
232 'src' => plugins_url( 'assets/js/photoswipe/photoswipe-ui-default.js', WC_PLUGIN_FILE ),
233 'deps' => [ 'jquery', 'photoswipe' ],
234 'footer' => true,
235 ];
236
237 $this->scripts[] = [
238 'handle' => 'wc-single-product',
239 'src' => plugins_url( 'assets/js/frontend/single-product.js', WC_PLUGIN_FILE ),
240 'deps' => [ 'jquery', 'wc-flexslider', 'photoswipe', 'wc-photoswipe-ui-default', 'wc-zoom' ],
241 'footer' => true,
242 ];
243
244 }
245
246 if ( rtsb()->has_pro() ) {
247 $this->scripts[] = [
248 'handle' => 'rtsb-noui-slider',
249 'src' => rtsbpro()->get_assets_uri( 'vendors/nouislider/nouislider.min.js' ),
250 'deps' => [ 'jquery' ],
251 'footer' => true,
252 ];
253
254 $this->scripts[] = [
255 'handle' => 'rtsb-sticky-sidebar',
256 'src' => rtsbpro()->get_assets_uri( 'vendors/sticky-sidebar/sticky-sidebar.min.js' ),
257 'deps' => [ 'jquery' ],
258 'footer' => true,
259 ];
260
261 $this->scripts[] = [
262 'handle' => 'rtsb-popper',
263 'src' => rtsbpro()->get_assets_uri( 'vendors/tippy/popper.min.js' ),
264 'deps' => [ 'jquery' ],
265 'footer' => true,
266 ];
267
268 $this->scripts[] = [
269 'handle' => 'rtsb-tippy',
270 'src' => rtsbpro()->get_assets_uri( 'vendors/tippy/tippy.min.js' ),
271 'deps' => [ 'jquery', 'rtsb-popper' ],
272 'footer' => true,
273 ];
274 }
275
276 if ( ! rtsb()->has_pro() && Fns::is_optimization_enabled() ) {
277 $this->scripts[] = AssetRegistry::instance()->load_optimized_assets( 'js' );
278 } else {
279 $this->scripts[] = [
280 'handle' => 'rtsb-public',
281 'src' => rtsb()->get_assets_uri( 'js/frontend/frontend.js' ),
282 'deps' => [ 'jquery', 'imagesloaded', 'swiper' ],
283 'footer' => true,
284 ];
285 }
286
287 return $this;
288 }
289
290 /**
291 * Register public scripts.
292 *
293 * @return void
294 */
295 public function register_public_scripts() {
296 $this->get_public_assets();
297 $this->styles = array_filter( $this->styles );
298 $this->scripts = array_filter( $this->scripts );
299
300 // Register public styles.
301 foreach ( $this->styles as $style ) {
302 wp_register_style( $style['handle'], $style['src'], '', $this->version );
303 }
304
305 // Register public scripts.
306 foreach ( $this->scripts as $script ) {
307 wp_register_script( $script['handle'], $script['src'], $script['deps'], $this->version, $script['footer'] );
308 }
309 }
310
311 /**
312 * Enqueues public scripts.
313 *
314 * @return void
315 */
316 public function enqueue_public_scripts() {
317 /**
318 * Register scripts.
319 */
320 $this->register_public_scripts();
321
322 /**
323 * Enqueue scripts.
324 */
325 if ( BuilderFns::is_builder_preview() && 'elementor' === Fns::page_edit_with( get_the_ID() ) ) {
326 /**
327 * Styles.
328 */
329 wp_enqueue_style( 'photoswipe' );
330 wp_enqueue_style( 'photoswipe-default-skin' );
331 wp_enqueue_style( 'elementor-editor-style-fix' );
332 wp_enqueue_style( 'woocommerce-general' );
333
334 /**
335 * Scripts.
336 */
337 $handle = Fns::optimized_handle( 'rtsb-public' );
338
339 wp_enqueue_script( 'wc-flexslider' );
340 wp_enqueue_script( 'wc-single-product' );
341 wp_dequeue_script( $handle );
342 wp_enqueue_script( 'swiper' );
343
344 if ( Fns::is_optimization_enabled() ) {
345 Fns::enqueue_optimized_assets();
346 } else {
347 wp_enqueue_script( $handle );
348 }
349 }
350
351 wp_enqueue_script( 'rtsb-tipsy' );
352
353 if ( Fns::is_optimization_enabled() ) {
354 Fns::enqueue_optimized_assets();
355 } else {
356 wp_enqueue_style( 'rtsb-fonts' );
357 wp_enqueue_style( 'rtsb-frontend' );
358 wp_enqueue_script( 'rtsb-public' );
359 }
360
361 /**
362 * Localize script.
363 */
364 self::localizeData();
365 }
366
367 /**
368 * Localized Data.
369 *
370 * @static
371 * @return void
372 */
373 public static function localizeData() {
374 $handle = Fns::optimized_handle( 'rtsb-public' );
375 $ai_data = AIFns::activated_ai_data();
376 wp_localize_script(
377 $handle,
378 'rtsbPublicParams',
379 [
380 'ajaxUrl' => esc_url( self::$ajaxurl ),
381 'aiActivated' => ! empty( $ai_data ),
382 'homeurl' => home_url(),
383 'wcCartUrl' => wc_get_cart_url(),
384 'addedToCartText' => esc_html__( 'Product Added', 'shopbuilder' ),
385 'singleCartToastrText' => esc_html__( 'Successfully Added', 'shopbuilder' ),
386 'singleCartBtnText' => apply_filters( 'rtsb/global/single_add_to_cart_success', esc_html__( 'Added to Cart', 'shopbuilder' ) ),
387 'browseCartText' => esc_html__( 'Browse Cart', 'shopbuilder' ),
388 'noProductsText' => apply_filters( 'rtsb/global/no_products_text', esc_html__( 'No more products to load', 'shopbuilder' ) ),
389 'isOptimizationEnabled' => Fns::is_optimization_enabled(),
390 'isLoaderEnabled' => Fns::enable_loader(),
391 'notice' => [
392 'position' => Fns::get_option( 'general', 'notification', 'notification_position', 'center-center' ),
393 ],
394 rtsb()->nonceId => wp_create_nonce( rtsb()->nonceText ),
395 ]
396 );
397 }
398
399 /**
400 * Registers Admin scripts.
401 *
402 * @return void
403 */
404 public function register_backend_assets() {
405 /**
406 * Styles.
407 */
408 wp_register_style( 'rtsb-admin-app', rtsb()->get_assets_uri( 'css/backend/admin-settings.css' ), '', $this->version );
409 wp_register_style( 'rtsb-fonts', rtsb()->get_assets_uri( 'css/frontend/rtsb-fonts.css' ), '', $this->version );
410
411 $current_screen = get_current_screen();
412
413 if ( 'edit-rtsb_builder' === $current_screen->id ) {
414 if ( ! function_exists( 'woocommerce_get_asset_url' ) ) {
415 include_once WC_ABSPATH . 'includes/wc-template-functions.php';
416 }
417
418 wp_deregister_style( 'select2' );
419 wp_register_style( 'select2', plugins_url( 'assets/css/select2.css', WC_PLUGIN_FILE ) ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
420 }
421 wp_register_style( 'rtsb-templatebuilder', rtsb()->get_assets_uri( 'css/backend/template-builder.css' ), '', $this->version );
422
423 /**
424 * Scripts.
425 */
426 wp_register_script( 'rtsb-admin-app', rtsb()->get_assets_uri( 'js/backend/admin-settings.js' ), '', $this->version, true );
427 wp_register_script( 'rtsb-templatebuilder', rtsb()->get_assets_uri( 'js/backend/template-builder.js' ), '', $this->version, true );
428 wp_localize_script(
429 'rtsb-admin-app',
430 'rtsbParams',
431 [
432 'ajaxurl' => esc_url( self::$ajaxurl ),
433 'homeurl' => home_url(),
434 'adminLogo' => rtsb()->get_assets_uri( 'images/icon/ShopBuilder-Logo.svg' ),
435 'blackFriday' => rtsb()->get_assets_uri( 'images/black-friday-ribbon.svg' ),
436 'restApiUrl' => esc_url_raw( rest_url() ),
437 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
438 'nonce' => wp_create_nonce( rtsb()->nonceText ),
439 'pages' => Fns::get_pages(),
440 'hasPro' => rtsb()->has_pro() ? 'yes' : 'no',
441 'proVersion' => defined( 'RTSBPRO_VERSION' ) ? RTSBPRO_VERSION : '0',
442 'updateRates' => esc_html__( 'Update All Rates', 'shopbuilder' ),
443 'sections' => Settings::instance()->get_sections(),
444 'userRoles' => Fns::get_all_user_roles(),
445 'hasElementor' => defined( 'ELEMENTOR_VERSION' ),
446 'loadElementor' => Fns::should_load_elementor_scripts(),
447 'isOptimizationEnabled' => Fns::is_optimization_enabled(),
448 ]
449 );
450 wp_localize_script(
451 'rtsb-admin-app',
452 'rtsbCaAbandonment',
453 [
454 'mainTitle' => esc_html__( 'Abandoned Carts Follow Up', 'shopbuilder' ),
455 'followUpColumnTitle' => [
456 'UserName' => esc_html__( 'Name', 'shopbuilder' ),
457 'EmailTo' => esc_html__( 'Email To', 'shopbuilder' ),
458 'CartTotal' => esc_html__( 'Cart Total', 'shopbuilder' ),
459 'OrderStatus' => esc_html__( 'Order Status', 'shopbuilder' ),
460 'DateTime' => esc_html__( 'Date / Time', 'shopbuilder' ),
461 'Action' => esc_html__( 'Action', 'shopbuilder' ),
462 ],
463 ]
464 );
465 }
466
467 /**
468 * Enqueues admin scripts.
469 *
470 * @return void
471 */
472 public function enqueue_backend_scripts() {
473 ob_start(); ?>
474 #adminmenu .toplevel_page_rtsb .wp-menu-image img {
475 width: auto;
476 height: 22px;
477 padding: 4px 0;
478 box-sizing: content-box;
479 }
480 .post-type-rtsb_builder li#wp-admin-bar-WPML_ALS_all,
481 .post-type-rtsb_builder li.language_all{
482 display: none;
483 }
484
485 <?php
486 $admin_global_style = ob_get_clean();
487 // Speed Optimization.
488 wp_add_inline_style( 'admin-menu', $admin_global_style );
489
490 global $pagenow;
491
492 $whitelisted_pages = [ 'rtsb-settings', 'rtsb-get-help', 'rtsb-themes' ];
493 $current_page = ! empty( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
494
495 if ( 'admin.php' === $pagenow && ! empty( $_GET['page'] ) && in_array( $current_page, $whitelisted_pages, true ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
496 /**
497 * Styles.
498 */
499 wp_enqueue_style( 'rtsb-admin-app' );
500 wp_enqueue_style( 'rtsb-fonts' );
501 }
502
503 if ( 'admin.php' === $pagenow && ! empty( $_GET['page'] ) && 'rtsb-settings' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
504 // Elementor Console Error Fixed For "rtsb-settings" Page.
505 wp_dequeue_script( 'elementor-admin-top-bar' );
506 wp_dequeue_script( 'elementor-common' );
507 wp_dequeue_script( 'elementor-dev-tools' );
508 wp_dequeue_script( 'elementor-web-cli' );
509 wp_dequeue_script( 'elementor-import-export-admin' );
510 wp_dequeue_script( 'elementor-app-loader' );
511 wp_dequeue_script( 'elementor-admin-modules' );
512 wp_dequeue_script( 'elementor-ai-media-library' );
513 wp_dequeue_script( 'elementor-admin' );
514
515 wp_dequeue_style( 'elementor-admin-top-bar' );
516 wp_dequeue_style( 'elementor-admin' );
517 wp_dequeue_style( 'e-theme-ui-light' );
518 wp_dequeue_style( 'elementor-common' );
519
520 /**
521 * Scripts.
522 */
523 wp_enqueue_media();
524 wp_enqueue_script( 'updates' );
525 wp_enqueue_script( 'rtsb-admin-app' );
526 } else {
527 $current_screen = get_current_screen();
528
529 if ( 'edit-rtsb_builder' === $current_screen->id ) {
530 if ( ! function_exists( 'woocommerce_get_asset_url' ) ) {
531 include_once WC_ABSPATH . 'includes/wc-template-functions.php';
532 }
533 /**
534 * Styles.
535 */
536 wp_enqueue_style( 'rtsb-templatebuilder' );
537
538 wp_enqueue_style( 'select2', plugins_url( 'assets/css/select2.css', WC_PLUGIN_FILE ) ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
539
540 wp_enqueue_script( 'selectWoo' );
541 /**
542 * Scripts.
543 */
544 wp_enqueue_script( 'rtsb-templatebuilder' );
545
546 wp_localize_script(
547 'rtsb-templatebuilder',
548 'rtsbParams',
549 [
550 'ajaxurl' => esc_url( self::$ajaxurl ),
551 'homeurl' => home_url(),
552 rtsb()->nonceId => wp_create_nonce( rtsb()->nonceText ),
553 'hasPro' => rtsb()->has_pro() ? 'yes' : 'no',
554 ]
555 );
556 }
557 }
558 }
559
560 /**
561 * Enqueues general public scripts.
562 *
563 * @return void
564 */
565 public function enqueue_general_public_scripts() {
566 $notification_color = Fns::get_option( 'general', 'notification', 'notification_color', '#004BFF' );
567 $notification_bgcolor = Fns::get_option( 'general', 'notification', 'notification_bg', '#F5F8FF' );
568 $notification_button_color = Fns::get_option( 'general', 'notification', 'notification_btn_color', '#0039C0' );
569
570 $dynamic_css = '';
571
572 if ( ! empty( $notification_color ) ) {
573 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success{color:{$notification_color}}";
574 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success:before{background-color:{$notification_color}}";
575 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-close-button{color:{$notification_color}}";
576 }
577
578 if ( ! empty( $notification_bgcolor ) ) {
579 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success{background-color:{$notification_bgcolor}}";
580 }
581
582 if ( ! empty( $notification_button_color ) ) {
583 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success a{color:{$notification_button_color}}";
584 }
585
586 if ( ! empty( $dynamic_css ) ) {
587 wp_add_inline_style( Fns::optimized_handle( 'rtsb-frontend' ), $dynamic_css );
588 }
589 }
590
591 /**
592 * Get the appropriate Swiper JS file URL.
593 *
594 * @return string
595 */
596 private function get_swiper_url() {
597 $default_swiper_url = rtsb()->get_assets_uri( 'vendor/swiper/js/swiper-bundle.min.js' );
598
599 if ( defined( 'ELEMENTOR_ASSETS_PATH' ) && defined( 'ELEMENTOR_ASSETS_URL' ) ) {
600 $experiment = get_option( 'elementor_experiment-e_swiper_latest' );
601
602 $el_relative_path = ( 'active' === $experiment || 'default' === $experiment )
603 ? 'lib/swiper/v8/swiper.min.js'
604 : 'lib/swiper/swiper.min.js';
605
606 $el_full_path = ELEMENTOR_ASSETS_PATH . $el_relative_path;
607
608 if ( file_exists( $el_full_path ) ) {
609 return ELEMENTOR_ASSETS_URL . $el_relative_path;
610 }
611 }
612
613 return $default_swiper_url;
614 }
615 }
616