'; } $customClasses = ''; if( ! empty( $slides['properties']['props']['sliderclass'] ) ) { $customClasses = ' '.$slides['properties']['props']['sliderclass']; } if( ! empty( $embed['className'] ) ) { $customClasses .= ' '.$embed['className']; } // Use srcset $useSrcset = (bool) get_option('ls_use_srcset', true ); if( isset( $slides['properties']['attrs']['useSrcset'] ) ) { if( is_bool( $slides['properties']['attrs']['useSrcset'] ) ) { $useSrcset = $slides['properties']['attrs']['useSrcset']; } elseif( $slides['properties']['attrs']['useSrcset'] === 'enabled' || $slides['properties']['attrs']['useSrcset'] === '1' ) { $useSrcset = true; } elseif( $slides['properties']['attrs']['useSrcset'] === 'disabled') { $useSrcset = false; } } $slides['properties']['attrs']['useSrcset'] = $useSrcset; // Enhanced lazy load $enhancedLazyLoad = (bool) get_option('ls_enhanced_lazy_load', false ); if( isset( $slides['properties']['props']['enhancedLazyLoad'] ) ) { if( is_bool( $slides['properties']['props']['enhancedLazyLoad'] ) ) { $enhancedLazyLoad = $slides['properties']['props']['enhancedLazyLoad']; } elseif( $slides['properties']['props']['enhancedLazyLoad'] === 'enabled' || $slides['properties']['props']['enhancedLazyLoad'] === '1') { $enhancedLazyLoad = true; } elseif( $slides['properties']['props']['enhancedLazyLoad'] === 'disabled') { $enhancedLazyLoad = false; } } $slides['properties']['props']['enhancedLazyLoad'] = $enhancedLazyLoad; // Performance mode $performanceMode = (bool) get_option('ls_performance_mode', true ); if( isset( $slides['properties']['attrs']['performanceMode'] ) ) { if( is_bool( $slides['properties']['attrs']['performanceMode'] ) ) { $performanceMode = $slides['properties']['attrs']['performanceMode']; } elseif( $slides['properties']['attrs']['performanceMode'] === 'enabled' || $slides['properties']['attrs']['performanceMode'] === '1') { $performanceMode = true; } elseif( $slides['properties']['attrs']['performanceMode'] === 'disabled' || empty( $slides['properties']['attrs']['performanceMode'] ) ) { $performanceMode = false; } } $slides['properties']['attrs']['performanceMode'] = $performanceMode; // Project-level Google Fonts if( get_option('layerslider-google-fonts-enabled', true ) ) { $slides = ls_merge_google_fonts( $slides ); // Load Google Fonts from Project if( ! empty( $slides['googlefonts'] ) && is_array( $slides['googlefonts'] ) ) { $fontFragments = []; foreach( $slides['googlefonts'] as $font ) { $fontName = explode( ':' , $font['param'] ); $fontName = urldecode( $fontName[0] ); // Prevent loading fonts that are already loaded from other sliders if( ! in_array( $fontName, $GLOBALS['lsLoadedFonts'] ) ) { $fontFragments[] = urlencode( $fontName ).':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i'; $GLOBALS['lsLoadedFonts'][] = $fontName; } } if( ! empty( $fontFragments ) ) { $fontsURL = implode('%7C', $fontFragments); $lsContainer[] = ''; } } } // STICKY + SCROLL SCENE $type = ! empty( $slides['properties']['attrs']['type'] ) ? $slides['properties']['attrs']['type'] : 'responsive'; $scene = ! empty( $slides['properties']['attrs']['scene'] ) ? $slides['properties']['attrs']['scene'] : ''; $needsSceneWrapper = ( $type !== 'popup' && ! empty( $scene ) ); $sceneWrapperHeight = ''; if( $needsSceneWrapper ) { $sceneDuration = ! empty( $slides['properties']['attrs']['sceneDuration'] ) ? (float) $slides['properties']['attrs']['sceneDuration'] : 1; $sceneSpeed = ! empty( $slides['properties']['attrs']['sceneSpeed'] ) ? (float) $slides['properties']['attrs']['sceneSpeed'] : 100; $sceneSpeed = max( 10, $sceneSpeed ); $sceneSpeed = min( 999, $sceneSpeed ); $sceneHeight = ! empty( $slides['properties']['attrs']['sceneHeight'] ) ? $slides['properties']['attrs']['sceneHeight'] : '200%'; $canvasHeight = (float) $slides['properties']['props']['height']; if( in_array( $type, ['fixedsize', 'responsive', 'fullwidth'] ) ) { if( $scene === 'scroll' ) { $sceneWrapperHeight = round( $canvasHeight + ( $canvasHeight * $sceneDuration / ( $sceneSpeed / 100 ) ) ) . 'px'; } elseif( $scene === 'sticky' ) { if( strpos( $sceneHeight, '%') !== false || strpos( $sceneHeight, 'sh') !== false ) { $sceneWrapperHeight = round( $canvasHeight * ( (float) $sceneHeight / 100 ) ) . 'px'; } elseif( strpos( $sceneHeight, 'px') !== false ) { $sceneWrapperHeight = round( max( (float) $sceneHeight, $canvasHeight ) ). 'px'; } else { $sceneWrapperHeight = $sceneHeight; } } } else { if( $scene === 'scroll' ) { $sceneWrapperHeight = 100 + ( 100 * $sceneDuration / ( $sceneSpeed / 100 ) ) . 'vh'; } elseif( $scene === 'sticky' ) { if( strpos( $sceneHeight, '%') !== false || strpos( $sceneHeight, 'sh') !== false ) { $sceneWrapperHeight = max( 100, 100 * ( (float) $sceneHeight / 100 ) ) . 'vh'; } elseif( strpos( $sceneHeight, 'px') !== false ) { $sceneWrapperHeight = round( max( (float) $sceneHeight, $canvasHeight ) ) . 'px'; } else { $sceneWrapperHeight = max( 100, (float) $sceneHeight ) . 'vh'; } } } // Sticky + Scroll Scene wrapper START $lsContainer[] = ''; } // Start of slider container $lsContainer[] = '
'; // Add slides if(!empty($slider['slides']) && is_array($slider['slides'])) { foreach($slider['slides'] as $slidekey => $slide) { // Skip this slide? if( ! empty( $slide['props']['skip'] ) ) { continue; } // Schedule start if( ! empty( $slide['props']['schedule_start'] ) && (int) $slide['props']['schedule_start'] > time() ) { continue; } // Schedule end if( ! empty( $slide['props']['schedule_end'] ) && (int) $slide['props']['schedule_end'] < time() ) { continue; } // First slide only for Scroll Scene if( ( $scene === 'scroll' && $type !== 'popup' ) && $slidekey > 0 ) { break; } // Get slide attributes $slideId = !empty($slide['props']['id']) ? ' id="'.$slide['props']['id'].'"' : ''; $slideAttrs = !empty($slide['attrs']) ? ls_array_to_attr($slide['attrs']) : ''; if( ! empty( $slide['props']['customProperties'] ) && is_array( $slide['props']['customProperties'] ) ) { $slideAttrs .= ls_array_to_attr( $slide['props']['customProperties'] ); } $postContent = false; // Check for the origami plugin if( ! empty( $slide['attrs']['transitionorigami'] ) ) { $lsPlugins[] = 'origami'; } // Post content //if( !isset($slide['props']['post_content']) || $slide['props']['post_content']) { $queryArgs = [ 'post_status' => 'publish', 'limit' => 1, 'posts_per_page' => 1, 'suppress_filters' => false ]; if(isset($slide['props']['post_offset'])) { if($slide['props']['post_offset'] == -1) { $slide['props']['post_offset'] = $slidekey; } $queryArgs['offset'] = $slide['props']['post_offset']; } if(!empty($slides['properties']['props']['post_type'])) { $queryArgs['post_type'] = $slides['properties']['props']['post_type']; } if(!empty($slides['properties']['props']['post_orderby'])) { $queryArgs['orderby'] = $slides['properties']['props']['post_orderby']; } if(!empty($slides['properties']['props']['post_order'])) { $queryArgs['order'] = $slides['properties']['props']['post_order']; } if(!empty($slides['properties']['props']['post_categories'][0])) { $queryArgs['category__in'] = $slides['properties']['props']['post_categories']; } if(!empty($slides['properties']['props']['post_tags'][0])) { $queryArgs['tag__in'] = $slides['properties']['props']['post_tags']; } if(!empty($slides['properties']['props']['post_taxonomy']) && !empty($slides['properties']['props']['post_tax_terms'])) { $queryArgs['tax_query'][] = [ 'taxonomy' => $slides['properties']['props']['post_taxonomy'], 'field' => 'id', 'terms' => $slides['properties']['props']['post_tax_terms'] ]; } $postContent = LS_Posts::find($queryArgs); //} // Start of slide $slideAttrs = !empty($slideAttrs) ? 'data-ls="'.$slideAttrs.'"' : ''; $lsMarkup[] = '
'; // Add slide background if( ! empty( $slide['props']['background'] ) && ls_assets_cond( $slide['props'], 'background') ) { $lsBG = ''; $alt = ''; if( ! empty($slide['props']['backgroundId'])) { if( has_filter('wpml_object_id') && get_option('ls_wpml_media_translation', true ) ) { $slide['props']['backgroundId'] = apply_filters('wpml_object_id', $slide['props']['backgroundId'], 'attachment', true ); } $lsBG = ls_get_markup_image( $slide['props']['backgroundId'], ['class' => 'ls-bg'] ); } elseif($slide['props']['background'] == '[image-url]') { $src = $postContent->getWithFormat($slide['props']['background']); if(is_object($postContent->post)) { $attchID = get_post_thumbnail_id($postContent->post->ID); $lsBG = ls_get_markup_image( $attchID, ['class' => 'ls-bg'] ); } } else { $src = do_shortcode($slide['props']['background']); $alt = 'Slide background'; } if( ! empty( $lsBG ) ) { if( ! $useSrcset ) { $lsBG = preg_replace('/srcset="[^\"]*"/', '', $lsBG); $lsBG = preg_replace('/sizes="[^\"]*"/', '', $lsBG); } if( $enhancedLazyLoad ) { $lsBG = str_replace(' src="', ' data-src="', $lsBG); $lsBG = str_replace(' srcset="', ' data-srcset="', $lsBG); } $lsMarkup[] = $lsBG; } elseif( ! empty( $src ) ) { $lsMarkup[] = ''.$alt.''; } } // Add slide thumbnail if(!isset($slides['properties']['attrs']['thumbnailNavigation']) || $slides['properties']['attrs']['thumbnailNavigation'] != 'disabled') { if( ! empty( $slide['props']['thumbnail'] ) && ls_assets_cond( $slide['props'], 'thumbnail') ) { $lsTN = ''; if( ! empty($slide['props']['thumbnailId']) ) { if( has_filter('wpml_object_id') && get_option('ls_wpml_media_translation', true ) ) { $slide['props']['thumbnailId'] = apply_filters('wpml_object_id', $slide['props']['thumbnailId'], 'attachment', true ); } $lsTN = ls_get_markup_image( $slide['props']['thumbnailId'], ['class' => 'ls-tn'] ); } if( ! empty( $lsTN ) && ! $useSrcset ) { $lsTN = preg_replace('/srcset="[^\"]*"/', '', $lsTN); $lsTN = preg_replace('/sizes="[^\"]*"/', '', $lsTN); } if( ! empty( $lsTN ) && $enhancedLazyLoad ) { $lsTN = str_replace(' src="', ' data-src="', $lsTN); $lsTN = str_replace(' srcset="', ' data-srcset="', $lsTN); } $lsMarkup[] = ! empty( $lsTN ) ? $lsTN : 'Slide thumbnail'; } } // Add layers if(!empty($slide['layers']) && is_array($slide['layers'])) { foreach($slide['layers'] as $layerkey => $layer) { $svgIB = false; // Skip this layer? if( ! empty( $layer['props']['skip'] ) ) { $skip = ls_normalize_hide_layer_value( $layer['props']['skip'] ); if( $skip === 'all' ) { continue; } } unset($layerAttributes); unset($innerAttributes); $layerAttributes = ['style' => '', 'class' => 'ls-l']; $innerAttributes = ['style' => '', 'class' => '']; if( empty( $layer['props']['url'] ) ) { $innerAttributes =& $layerAttributes; } if( empty( $layer['props']['styles'] ) ) { $layer['props']['styles'] = []; } $layer['props']['html'] = ( ! empty( $layer['props']['html'] ) || ( isset( $layer['props']['html'] ) && $layer['props']['html'] === '0' ) ) ? trim( $layer['props']['html'] ) : ''; $layer['props']['type'] = !empty($layer['props']['type']) ? $layer['props']['type'] : ''; $layer['props']['media'] = !empty($layer['props']['media']) ? $layer['props']['media'] : ''; // Premium layer content checks if( ! $GLOBALS['lsIsActivatedSite'] ) { if( $layer['props']['media'] === 'shape' ) { continue; } if( $layer['props']['media'] === 'icon' && ! empty( $layer['props']['html'] ) && strpos( $layer['props']['html'], ' layer on slide #'.($slidekey+1).' in slider #'.$id.''; $layer['props']['html'] = apply_filters( 'wpml_translate_single_string', $layer['props']['html'], 'LayerSlider WP', $string_name); } // Fallback WPML support for older sliders. if( ! empty( $layer['props']['url'] ) ) { // Don't try to modify the URL if it's auto-generated if( empty( $layer['props']['linkId'] ) && $layer['props']['url'] !== '[post-url]' ) { // Don't try to modify the URL if it starts with a hash tag. $firstChar = function_exists('mb_substr') ? mb_substr( $layer['props']['url'], 0, 1 ) : substr( $layer['props']['url'], 0, 1 ); if( $firstChar !== '#' ) { // Carry over the 'lang' URI param if it's set and the URL is non-relative, non-external if( ! empty( $_GET['lang'] ) && ( strpos($layer['props']['url'], 'http') !== 0 || strpos( $layer['props']['url'], $_SERVER['SERVER_NAME'] ) !== false ) ) { if(strpos($layer['props']['url'], '?') !== false) { $layer['props']['url'] .= '&lang=' . ICL_LANGUAGE_CODE; } else { $layer['props']['url'] .= '?lang=' . ICL_LANGUAGE_CODE; } } } } } } // v7.0.0: Normalize HTML element tag for old versions if( empty( $layer['props']['htmlTag'] ) ) { $layer['props']['htmlTag'] = ! empty( $layer['props']['type'] ) ? $layer['props']['type'] : 'ls-layer'; if( ! empty( $layer['props']['media'] ) ) { switch( $layer['props']['media'] ) { case 'img': $layer['props']['htmlTag'] = 'img'; break; case 'button': case 'icon': $layer['props']['htmlTag'] = 'span'; break; case 'html': case 'media': $layer['props']['htmlTag'] = 'div'; break; case 'post': $layer['props']['htmlTag'] = 'div'; break; } } } // Post layer if( $layer['props']['media'] === 'post' ) { $layer['props']['post_text_length'] = !empty($layer['props']['post_text_length']) ? $layer['props']['post_text_length'] : 0; $layer['props']['html'] = $postContent->getWithFormat($layer['props']['html'], $layer['props']['post_text_length']); $layer['props']['html'] = do_shortcode($layer['props']['html']); } // Handle media uploads if( $layer['props']['media'] === 'media' && isset( $layer['props']['mediaAttachments'] ) ) { // Make sure to empty the layer's HTML in case of using uploaded media $layer['props']['html'] = ''; if( ! empty( $layer['props']['mediaAttachments'] ) ) { $mediaHTML = ''; $mediaType = $layer['props']['mediaAttachments'][0]['type']; if( $mediaType === 'video' ) { $mediaHTML .= '
'; } } // End of slider container $lsMarkup[] = '
'; // End of scene wrapper if( $needsSceneWrapper ) { $lsMarkup[] = '
'; } // End of Popup wrapper if( !empty($slides['properties']['attrs']['type']) && $slides['properties']['attrs']['type'] === 'popup' ) { $lsMarkup[] = ''; } // After slider content hook if(has_action('layerslider_after_slider_content')) { do_action('layerslider_after_slider_content'); }