Last active
August 29, 2015 14:12
-
-
Save eri-trabiccolo/a318a1e98247e6cd7f19 to your computer and use it in GitHub Desktop.
Make a Customizr' slider show recent posts
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
/* Works with Customizr > 3.3.26 and Customizr-Pro > 1.1.9 */ | |
add_filter('tc_core', 'use_custom_slider_class'); | |
function use_custom_slider_class($classes){ | |
//don't instantiate default class | |
unset( $classes['content'][ | |
array_search(array('inc/parts','slider'), $classes['content']) | |
] | |
); | |
//instantiate our class | |
new TC_Slider_mod; | |
return $classes; | |
} | |
add_filter('tc_slider_name_id', 'my_slider_of_posts'); | |
function my_slider_of_posts( $slider_name_id ){ | |
if ( $slider_name_id == 'front-slider' ) | |
return array( | |
'slider' => 'front-slider', | |
'query' => array( | |
'tag' => "front-slider", | |
'posts_per_page' => 5, | |
'order' => 'desc' | |
), | |
); | |
return $slider_name_id; | |
} | |
if ( ! defined('CUSTOMIZR') ) | |
define('CUSTOMIZR', get_template_directory() ); | |
require_once( CUSTOMIZR . '/inc/parts/class-content-slider.php'); | |
class TC_Slider_mod extends TC_slider{ | |
private $saved_slides; | |
private $slider_name_id = false; | |
private $layout_value; | |
private $img_size; | |
private $layout_class; | |
//override tc_set_slider_hooks() | |
function tc_set_slider_hooks() { | |
//gets the actual page id if we are displaying the posts page | |
$queried_id = $this -> tc_get_real_id(); | |
$slider_name_id = apply_filters('tc_slider_name_id', $this ->tc_get_current_slider($queried_id) ); | |
if ( ! is_array( $slider_name_id ) ) | |
return parent::tc_set_slider_hooks(); | |
extract($slider_name_id); | |
$all_sliders = TC_utils::$inst -> tc_opt( 'tc_sliders'); | |
$saved_slides = ( isset($all_sliders[$slider]) ) ? $all_sliders[$slider] : false; | |
//if the slider not longer exists or exists but is empty, return false | |
if ( !isset($saved_slides) || ! is_array($saved_slides) || empty($saved_slides) ) | |
return; | |
add_action( '__after_header' , array( $this , 'tc_slider_display' ) ); | |
add_action( '__after_carousel_inner' , array( $this , 'tc_slider_control_view' ) ); | |
//adds the center-slides-enabled css class | |
add_filter( 'tc_carousel_inner_classes', array( $this, 'tc_set_inner_class') ); | |
$this -> tc_slider_mod_set_properties( $saved_slides, $slider_name_id, $queried_id ); | |
} | |
private function tc_get_current_slider($queried_id) { | |
//gets the current slider id | |
$_home_slider = TC_utils::$inst->tc_opt( 'tc_front_slider' ); | |
$slider_name_id = ( tc__f('__is_home') && $_home_slider ) ? $_home_slider : esc_attr( get_post_meta( $queried_id, $key = 'post_slider_key' , $single = true ) ); | |
return apply_filters( 'tc_slider_name_id', $slider_name_id , $queried_id); | |
} | |
private function tc_get_real_id() { | |
global $wp_query; | |
$queried_id = get_queried_object_id(); | |
return ( ! tc__f('__is_home') && $wp_query -> is_posts_page && ! empty($queried_id) ) ? $queried_id : get_the_ID(); | |
} | |
function tc_slider_mod_set_properties( $saved_slides, $slider_name_id, $queried_id ){ | |
$this -> saved_slides = $saved_slides; | |
$this -> slider_name_id = $slider_name_id; | |
//gets slider options if any | |
$layout_value = tc__f('__is_home') ? TC_utils::$inst->tc_opt( 'tc_slider_width' ) : esc_attr(get_post_meta( $queried_id, $key = 'slider_layout_key' , $single = true )); | |
$this -> layout_value = apply_filters( 'tc_slider_layout', $layout_value, $queried_id ); | |
//declares the layout vars | |
$this -> layout_class = implode( " " , apply_filters( 'tc_slider_layout_class' , ( 0 == $layout_value ) ? array('container', 'carousel', 'customizr-slide') : array('carousel', 'customizr-slide') ) ); | |
$this -> img_size = apply_filters( 'tc_slider_img_size' , ( 0 == $layout_value ) ? 'slider' : 'slider-full'); | |
} | |
//override tc_slider_display | |
function tc_slider_display() { | |
if ( ! $this -> slider_name_id ) | |
return parent::tc_slider_display(); | |
$slider_name_id = $this -> slider_name_id; | |
$img_size = $this -> img_size; | |
$saved_slides = $this -> saved_slides; | |
$layout_class = $this -> layout_class; | |
$slides = $this -> tc_get_posts_slides( $slider_name_id, $img_size, $saved_slides ); | |
//returns nothing if no slides to display | |
if ( ! isset($slides) || ! $slides ) | |
return; | |
extract($slides); | |
//define carousel inner classes | |
$_inner_classes = implode( ' ' , apply_filters( 'tc_carousel_inner_classes' , array( 'carousel-inner' ) ) ); | |
ob_start(); | |
?> | |
<div id="customizr-slider" class="<?php echo $layout_class ?> "> | |
<?php if ( 1 == esc_attr( TC_utils::$inst->tc_opt( 'tc_display_slide_loader') ) && apply_filters( 'tc_display_slider_loader' , true ) ): ?> | |
<div class="tc-slider-loader-wrapper"> | |
<div class="tc-img-gif-loader"> | |
<img data-no-retina src="<?php echo apply_filters('tc_slider_loader_src' , sprintf( '%1$s/%2$s' , TC_BASE_URL , 'inc/assets/img/slider-loader.gif') ) ?>"> | |
</div> | |
</div> | |
<?php endif; ?> | |
<?php do_action( '__before_carousel_inner' , $slides ) ?> | |
<div class="<?php echo $_inner_classes?>"> | |
<?php | |
foreach ($slides as $id => $data){ | |
$_view_model = compact( "id", "data" , "slider_name_id", "img_size" ); | |
$this -> tc_render_single_slide_view( $_view_model ); | |
} | |
?> | |
</div><!-- /.carousel-inner --> | |
<?php do_action( '__after_carousel_inner' , $slides ) ?> | |
</div><!-- /#customizr-slider --> | |
<?php | |
$html = ob_get_contents(); | |
if ($html) ob_end_clean(); | |
echo apply_filters( 'tc_slider_display', $html, $slider_name_id ); | |
} | |
function tc_get_posts_slides( $slider_name_id, $img_size, $saved_slides){ | |
extract($slider_name_id); | |
global $wp_query, $wp_the_query, $post; | |
$wp_query = new WP_Query($query); | |
// if you don't want to show the first attachment when featured image isn't set | |
// remove the line below | |
add_filter('tc_show_single_post_content', '__return_false'); | |
// remove smart load if any | |
$smart_load_enabled = method_exists('TC_utils', 'tc_parse_imgs') && method_exists('TC_utils', 'tc_opt') && esc_attr( TC_utils::$inst->tc_opt( 'tc_img_smart_load' ) ); | |
if ( $smart_load_enabled ) | |
remove_filter('tc_thumb_html', array(TC_utils::$instance, 'tc_parse_imgs')); | |
// build our array of slides | |
//initialize the slides array | |
$slides = array(); | |
//init slide active state index | |
$__loop_index = 0; | |
while ( have_posts() ){ | |
the_post(); | |
//title | |
$title = $post->post_title; | |
$default_title_length = apply_filters( 'tc_slide_title_length', 80 ); | |
$title = ( strlen($title) > $default_title_length ) ? substr( $title,0,strpos( $title, ' ' , $default_title_length) ). ' ...' : $title; | |
//lead text | |
$text = $this -> tc_get_post_slides_excerpt( $post->post_excerpt, apply_filters('tc_slide_text_length', 250), '...'); | |
//button text | |
$button_text = __('Read more »', 'customizr'); | |
$default_button_length = apply_filters( 'tc_slide_button_length', 80 ); | |
$button_text = ( strlen($button_text) > $default_button_length ) ? substr( $button_text,0,strpos( $button_text, ' ' ,$default_button_length)). ' ...' : $button_text; | |
//link post id | |
$link_id = get_the_id(); | |
$id = $link_id; | |
//button link | |
$link_url = $link_id ? get_permalink( $link_id ) : 'javascript:void(0)'; | |
//sets the first slide active | |
$active = ( 0 == $__loop_index ) ? 'active' : ''; | |
$color_style = ''; | |
//attachment image | |
$alt = apply_filters( 'tc_slide_background_alt' , trim(strip_tags( get_the_title() ) ) ); | |
$slide_background = $this -> tc_get_thumbnail_data($img_size, $alt); | |
//adds all values to the slide array only if the content exists (=> handle the case when an attachment has been deleted for example). Otherwise apply a default slide | |
if ( empty($slide_background) && isset($saved_slides[1]) ) | |
$slide_background = wp_get_attachment_image( $saved_slides[1], $img_size, false, array( 'class' => 'slide' , 'alt' => $alt ) ); | |
$slides[$id] = array( | |
'title' => $title, | |
'text' => $text, | |
'button_text' => $button_text, | |
'link_id' => $link_id, | |
'link_url' => $link_url, | |
'active' => $active, | |
'color_style' => $color_style, | |
'slide_background' => $slide_background, | |
); | |
//increments active index | |
$__loop_index++; | |
}//end of slides loop | |
$slides = apply_filters('tc_post_slides', ( !empty($slides) ) ? $slides : false, $img_size); | |
// if you chose to not show the first attachment when featured image isn't set | |
// remove the line below | |
remove_filter('tc_show_single_post_content', '__return_false'); | |
// re-add smart load if removed | |
if ( $smart_load_enabled ) | |
add_filter('tc_thumb_html', array(TC_utils::$instance, 'tc_parse_imgs')); | |
$wp_query = $wp_the_query; | |
//returns the slides or false if nothing | |
return $slides; | |
}// end pf tc_get_the_slides | |
function tc_get_thumbnail_data($img_size, $alt){ | |
$attachment_id = get_post_meta( get_the_ID(), 'slide_img'); | |
if ( $attachment_id ) | |
return wp_get_attachment_image( $attachment_id[0], $img_size, false, array('class' => 'slide' , 'alt' => $alt) ); | |
$thumb = TC_post_thumbnails::$instance -> tc_get_thumbnail_model($img_size); | |
$thumb = isset($thumb) && isset($thumb['tc_thumb']) ? $thumb['tc_thumb'] : null; | |
return $thumb; | |
} | |
function tc_get_post_slides_excerpt( $excerpt, $default_text_length, $more ){ | |
if ( '' == $excerpt ) { | |
$excerpt = get_the_content(''); | |
$excerpt = strip_shortcodes( $excerpt ); | |
$excerpt = apply_filters( 'the_content', $excerpt ); | |
$excerpt = str_replace(']]>', ']]>', $excerpt ); | |
} | |
$excerpt = trim(strip_tags($excerpt)); | |
$end_substr = $excerpt_length = strlen( $excerpt ); | |
if ( $excerpt_length > $default_text_length ){ | |
$end_substr = strpos( $excerpt, ' ' , $default_text_length); | |
$end_substr = ( $end_substr !== FALSE ) ? $end_substr : $default_text_length; | |
$excerpt = substr( $excerpt , 0 , $end_substr ); | |
} | |
return ( $end_substr == $excerpt_length ) ? $excerpt : $excerpt . ' '.$more; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment