-
-
Save anonymous/2c1059a8049cc3d5a7fe898da3046fcf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
if(!defined('LS_ROOT_FILE')) { | |
header('HTTP/1.0 403 Forbidden'); | |
exit; | |
} | |
$lsContainer = array(); | |
$lsMarkup = array(); | |
// Full-width slider | |
if(isset($slides['properties']['props']['forceresponsive'])) { | |
$lsContainer[] = '<div class="ls-wp-fullwidth-container" style="height:'.layerslider_check_unit($slides['properties']['props']['height']).';">'; | |
$lsContainer[] = '<div class="ls-wp-fullwidth-helper">'; | |
} | |
// Get slider style | |
$sliderStyleAttr[] = 'width:'.layerslider_check_unit($slides['properties']['props']['width']).';'; | |
$sliderStyleAttr[] = 'height:'.layerslider_check_unit($slides['properties']['props']['height']).';'; | |
if(!empty($slides['properties']['props']['maxwidth'])) { | |
$sliderStyleAttr[] = 'max-width:'.layerslider_check_unit($slides['properties']['props']['maxwidth']).';'; | |
} | |
$sliderStyleAttr[] = 'margin:0 auto;'; | |
if(isset($slides['properties']['props']['sliderStyle'])) { | |
$sliderStyleAttr[] = $slides['properties']['props']['sliderStyle']; | |
} | |
// Before slider content hook | |
if(has_action('layerslider_before_slider_content')) { | |
do_action('layerslider_before_slider_content'); | |
} | |
// Start of slider container | |
$lsContainer[] = '<div id="'.$sliderID.'" class="ls-wp-container" style="'.implode('', $sliderStyleAttr).'">'; | |
// 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; } | |
// Get slide attributes | |
$slideId = !empty($slide['props']['id']) ? ' id="'.$slide['props']['id'].'"' : ''; | |
$slideAttrs = !empty($slide['attrs']) ? ls_array_to_attr($slide['attrs']) : ''; | |
$postContent = false; | |
// No transition selected | |
if(empty($slide['attrs']['transition2d']) && empty($slide['attrs']['transition3d'])) { | |
if(empty($slide['attrs']['customtransition2d']) && empty($slide['attrs']['customtransition3d'])) { | |
$slideAttrs .= ' transition2d: all;'; | |
} | |
} | |
// Post content | |
$queryArgs = array( 'post_status' => 'publish', 'limit' => 30, 'posts_per_page' => 30 ); | |
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'][] = array( | |
'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[] = '<div class="ls-slide"'.$slideId.' '.$slideAttrs.'>'; | |
// Add slide background | |
if(!empty($slide['props']['background'])) { | |
if(!empty($slide['props']['backgroundId'])) { | |
$src = apply_filters('ls_get_image', $slide['props']['backgroundId'], $slide['props']['background']); | |
$alt = get_post_meta($slide['props']['backgroundId'], '_wp_attachment_image_alt', true); | |
$alt = empty($alt) ? get_the_title($slide['props']['backgroundId']) : $alt; | |
$alt = empty($alt) ? 'Slide background' : $alt; | |
} 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); | |
$alt = get_post_meta($attchID, '_wp_attachment_image_alt', true); | |
$alt = empty($alt) ? get_the_title($attchID) : $alt; | |
$alt = empty($alt) ? get_the_title($postContent->post->ID) : $alt; | |
$alt = empty($alt) ? 'Slide background' : $alt; | |
} | |
} else { | |
$src = do_shortcode($slide['props']['background']); | |
$alt = 'Slide background'; | |
} | |
$lsMarkup[] = '<img src="'.$src.'" class="ls-bg" alt="'.$alt.'" />'; | |
} | |
// Add slide thumbnail | |
if(!isset($slides['properties']['attrs']['thumbnailNavigation']) || $slides['properties']['attrs']['thumbnailNavigation'] != 'disabled') { | |
if(!empty($slide['props']['thumbnail'])) { | |
$src = !empty($slide['props']['thumbnailId']) ? apply_filters('ls_get_image', $slide['props']['thumbnailId'], $slide['props']['thumbnail']) : $slide['props']['thumbnail']; | |
$lsMarkup[] = '<img src="'.$src.'" class="ls-tn" alt="Slide thumbnail" />'; | |
} | |
} | |
// Add layers | |
if(!empty($slide['layers']) && is_array($slide['layers'])) { | |
foreach($slide['layers'] as $layerkey => $layer) { | |
// Skip this slide? | |
if(!empty($layer['props']['skip'])) { continue; } | |
// WPML support | |
if(function_exists('icl_t')) { | |
$layer['props']['html'] = icl_t('LayerSlider WP', '<'.$layer['props']['type'].':'.substr(sha1($layer['props']['html']), 0, 10).'> layer on slide #'.($slidekey+1).' in slider #'.$id.'', $layer['props']['html']); | |
if(!empty($layer['props']['url']) && !empty($_GET['lang']) && 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; } | |
} | |
} | |
// Get layer type | |
$layer['props']['media'] = !empty($layer['props']['media']) ? $layer['props']['media'] : ''; | |
if(!empty($layer['props']['media'])) { | |
switch($layer['props']['media']) { | |
case 'img': $layer['props']['type'] = 'img'; break; | |
case 'html': $layer['props']['type'] = 'div'; break; | |
case 'post': $layer['props']['type'] = 'div'; break; | |
} | |
} | |
// Post layer | |
if(!empty($layer['props']['media']) && $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']); | |
} | |
// Skip image layer without src | |
if($layer['props']['type'] == 'img' && empty($layer['props']['image'])) { continue; } | |
// Create layer | |
$first = substr($layer['props']['html'], 0, 1); | |
$last = substr($layer['props']['html'], strlen($layer['props']['html'])-1, 1); | |
if($layer['props']['media'] == 'post' && ($first == '<' && $last == '>')) { | |
$type = $layer['props']['html']; | |
} else { | |
$type = '<'.$layer['props']['type'].'>'; | |
} | |
if(!empty($layer['props']['url']) && !preg_match('/^\#[0-9]/', $layer['props']['url'])) { | |
$el = phpQuery::newDocumentHTML('<a>')->children(); | |
if($layer['props']['url'] == '[post-url]') { | |
$layer['props']['url'] = $postContent->getWithFormat($layer['props']['url']); | |
} | |
$el->attr('href', $layer['props']['url']); | |
if(!empty($layer['props']['target'])) { | |
$el->attr('target', $layer['props']['target']); } | |
$inner = $el->append($type)->children(); | |
} else { | |
$el = $inner = phpQuery::newDocumentHTML($type)->children(); | |
} | |
// HTML attributes | |
$level = isset($layer['props']['level']) ? $layer['props']['level'] : ''; | |
$el->addClass('ls-l'.$level); | |
if(!empty($layer['props']['id'])) { $inner->attr('id', $layer['props']['id']); } | |
if(!empty($layer['props']['class'])) { $inner->addClass($layer['props']['class']); } | |
if(!empty($layer['props']['url'])) { | |
if(!empty($layer['props']['rel'])) { | |
$el->attr('rel', $layer['props']['rel']); } | |
if(!empty($layer['props']['title'])) { | |
$el->attr('title', $layer['props']['title']); } | |
} else { | |
if(!empty($layer['props']['title'])) { | |
$inner->attr('title', $layer['props']['title']); } | |
} | |
// Transition & style | |
$el->attr('style', 'top:'.layerslider_check_unit($layer['props']['top']).';'); | |
$el->attr('style', $el->attr('style') . 'left:'.layerslider_check_unit($layer['props']['left']).';'); | |
if(isset($layer['attrs']) && isset($layer['props']['transition'])) { $el->attr('data-ls', ls_array_to_attr($layer['attrs'])); } | |
elseif(isset($layer['attrs'])) { $el->attr('style', $el->attr('style') . ls_array_to_attr($layer['attrs'])); } | |
if(!empty($layer['props']['style'])) { | |
if(substr($layer['props']['style'], -1) != ';') { $layer['props']['style'] .= ';'; } | |
$inner->attr('style', $inner->attr('style') . preg_replace('/\s\s+/', ' ', $layer['props']['style'])); | |
} | |
if(!empty($layer['props']['styles'])) { | |
$layerStyles = json_decode($layer['props']['styles'], true); | |
if($layerStyles === null) { $layerStyles = json_decode(stripslashes($layer['props']['styles']), true); } | |
$inner->attr('style', $inner->attr('style') . ls_array_to_attr($layerStyles, 'css')); | |
} | |
if(empty($layer['props']['wordwrap'])) { | |
$inner->attr('style', $inner->attr('style') . 'white-space: nowrap;'); | |
} | |
// Link to slides | |
if(!empty($layer['props']['url']) && preg_match('/^\#[0-9]/', $layer['props']['url'])) { | |
$el->addClass('ls-linkto-'.substr($layer['props']['url'], 1)); | |
} | |
// Image layer | |
if($layer['props']['type'] == 'img') { | |
if($layer['props']['image'] == '[image-url]') { | |
$src = $postContent->getWithFormat($layer['props']['image']); | |
} else { | |
$src = !empty($layer['props']['imageId']) ? apply_filters('ls_get_image', $layer['props']['imageId'], $layer['props']['image']) : $layer['props']['image']; | |
} | |
$inner->attr('src', $src); | |
if(!empty($layer['props']['alt'])) { | |
$inner->attr('alt', $layer['props']['alt']); } | |
else { $inner->attr('alt', ''); } | |
// Text / HTML layer | |
} elseif($layer['props']['media'] != 'post' || ($first != '<' && $last != '>')) { | |
$inner->html(do_shortcode(__(stripslashes($layer['props']['html'])))); | |
} | |
$lsMarkup[] = $el; | |
} | |
} | |
// Link this slide | |
if(!empty($slide['props']['linkUrl'])) { | |
if(!empty($slide['props']['linkTarget'])) { | |
$target = ' target="'.$slide['props']['linkTarget'].'"'; } else { $target = ''; | |
} | |
if($slide['props']['linkUrl'] == '[post-url]') { | |
$slide['props']['linkUrl'] = $postContent->getWithFormat($slide['props']['linkUrl']); | |
} | |
$lsMarkup[] = '<a href="'.$slide['props']['linkUrl'].'"'.$target.' class="ls-link"></a>'; | |
} | |
// End of slide | |
$lsMarkup[] = '</div>'; | |
} | |
} | |
// End of slider container | |
$lsMarkup[] = '</div>'; | |
// Full-width slider | |
if(isset($slides['properties']['props']['forceresponsive'])) { | |
$lsMarkup[] = '</div>'; | |
$lsMarkup[] = '</div>'; | |
} | |
// After slider content hook | |
if(has_action('layerslider_after_slider_content')) { | |
do_action('layerslider_after_slider_content'); | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment