Skip to content

Instantly share code, notes, and snippets.

@lots0logs
Last active July 18, 2022 12:02
Show Gist options
  • Save lots0logs/f52e9d00aba04f28c34e76700902135c to your computer and use it in GitHub Desktop.
Save lots0logs/f52e9d00aba04f28c34e76700902135c to your computer and use it in GitHub Desktop.
WordPress :: Divi Builder :: Post Slider :: Display projects instead of posts.
<?php
/* DON'T copy the first line (above) if your functions.php already has it.
* ---------------------------------------------------------------------- */
function my_et_theme_setup() {
if ( class_exists( 'ET_Builder_Module_Post_Slider' ) ) {
get_template_part( 'my-main-modules' );
add_filter( 'my_et_post_slider_args', 'my_et_post_slider_args_cb' );
$et_pb_post_slider = new My_ET_Builder_Module_Post_Slider();
remove_shortcode('et_pb_post_slider');
add_shortcode('et_pb_post_slider', array( $et_pb_post_slider, '_shortcode_callback' ) );
}
}
add_action( 'wp', 'my_et_theme_setup', 99 );
function my_et_post_slider_args_cb( $args ) {
$post_type = get_post_meta( get_the_ID(), 'my_et_pb_post_slider_post_type', true );
if ( 'project' === $post_type ) {
$default_args = array(
'post_type' => 'project',
);
$args = wp_parse_args( $args, $default_args );
}
return $args;
}
<?php
class My_ET_Builder_Module_Post_Slider extends ET_Builder_Module_Post_Slider {
function shortcode_callback( $atts, $content = null, $function_name ) {
$module_id = $this->shortcode_atts['module_id'];
$module_class = $this->shortcode_atts['module_class'];
$show_arrows = $this->shortcode_atts['show_arrows'];
$show_pagination = $this->shortcode_atts['show_pagination'];
$parallax = $this->shortcode_atts['parallax'];
$parallax_method = $this->shortcode_atts['parallax_method'];
$auto = $this->shortcode_atts['auto'];
$auto_speed = $this->shortcode_atts['auto_speed'];
$auto_ignore_hover = $this->shortcode_atts['auto_ignore_hover'];
$top_padding = $this->shortcode_atts['top_padding'];
$body_font_size = $this->shortcode_atts['body_font_size'];
$bottom_padding = $this->shortcode_atts['bottom_padding'];
$remove_inner_shadow = $this->shortcode_atts['remove_inner_shadow'];
$hide_content_on_mobile = $this->shortcode_atts['hide_content_on_mobile'];
$hide_cta_on_mobile = $this->shortcode_atts['hide_cta_on_mobile'];
$show_image_video_mobile = $this->shortcode_atts['show_image_video_mobile'];
$background_position = $this->shortcode_atts['background_position'];
$background_size = $this->shortcode_atts['background_size'];
$posts_number = $this->shortcode_atts['posts_number'];
$include_categories = $this->shortcode_atts['include_categories'];
$show_more_button = $this->shortcode_atts['show_more_button'];
$more_text = $this->shortcode_atts['more_text'];
$content_source = $this->shortcode_atts['content_source'];
$background_color = $this->shortcode_atts['background_color'];
$show_image = $this->shortcode_atts['show_image'];
$image_placement = $this->shortcode_atts['image_placement'];
$background_image = $this->shortcode_atts['background_image'];
$background_layout = $this->shortcode_atts['background_layout'];
$use_bg_overlay = $this->shortcode_atts['use_bg_overlay'];
$bg_overlay_color = $this->shortcode_atts['bg_overlay_color'];
$use_text_overlay = $this->shortcode_atts['use_text_overlay'];
$text_overlay_color = $this->shortcode_atts['text_overlay_color'];
$orderby = $this->shortcode_atts['orderby'];
$show_meta = $this->shortcode_atts['show_meta'];
$button_custom = $this->shortcode_atts['custom_button'];
$custom_icon = $this->shortcode_atts['button_icon'];
$use_manual_excerpt = $this->shortcode_atts['use_manual_excerpt'];
$excerpt_length = $this->shortcode_atts['excerpt_length'];
$text_border_radius = $this->shortcode_atts['text_border_radius'];
$dot_nav_custom_color = $this->shortcode_atts['dot_nav_custom_color'];
$arrows_custom_color = $this->shortcode_atts['arrows_custom_color'];
$top_padding_tablet = $this->shortcode_atts['top_padding_tablet'];
$top_padding_phone = $this->shortcode_atts['top_padding_phone'];
$bottom_padding_tablet = $this->shortcode_atts['bottom_padding_tablet'];
$bottom_padding_phone = $this->shortcode_atts['bottom_padding_phone'];
$module_class = ET_Builder_Element::add_module_order_class( $module_class, $function_name );
$hide_on_mobile_class = self::HIDE_ON_MOBILE;
if ( '' !== $top_padding || '' !== $top_padding_tablet || '' !== $top_padding_phone ) {
$padding_values = array(
'desktop' => $top_padding,
'tablet' => $top_padding_tablet,
'phone' => $top_padding_phone,
);
et_pb_generate_responsive_css( $padding_values, '%%order_class%% .et_pb_slide_description, .et_pb_slider_fullwidth_off%%order_class%% .et_pb_slide_description', 'padding-top', $function_name );
}
if ( '' !== $bottom_padding || '' !== $bottom_padding_tablet || '' !== $bottom_padding_phone ) {
$padding_values = array(
'desktop' => $bottom_padding,
'tablet' => $bottom_padding_tablet,
'phone' => $bottom_padding_phone,
);
et_pb_generate_responsive_css( $padding_values, '%%order_class%% .et_pb_slide_description, .et_pb_slider_fullwidth_off%%order_class%% .et_pb_slide_description', 'padding-bottom', $function_name );
}
if ( '' !== $bottom_padding || '' !== $top_padding ) {
ET_Builder_Module::set_style( $function_name, array(
'selector' => '%%order_class%% .et_pb_slide_description, .et_pb_slider_fullwidth_off%%order_class%% .et_pb_slide_description',
'declaration' => 'padding-right: 0; padding-left: 0;',
) );
}
if ( 'default' !== $background_position && 'off' === $parallax ) {
$processed_position = str_replace( '_', ' ', $background_position );
ET_Builder_Module::set_style( $function_name, array(
'selector' => '%%order_class%% .et_pb_slide',
'declaration' => sprintf(
'background-position: %1$s;',
esc_html( $processed_position )
),
) );
}
if ( 'default' !== $background_size && 'off' === $parallax ) {
ET_Builder_Module::set_style( $function_name, array(
'selector' => '%%order_class%% .et_pb_slide',
'declaration' => sprintf(
'-moz-background-size: %1$s;
-webkit-background-size: %1$s;
background-size: %1$s;',
esc_html( $background_size )
),
) );
}
if ( '' !== $background_color ) {
ET_Builder_Element::set_style( $function_name, array(
'selector' => '%%order_class%%.et_pb_post_slider',
'declaration' => sprintf(
'background-color: %1$s;',
esc_html( $background_color )
),
) );
}
if ( '' !== $background_image ) {
ET_Builder_Element::set_style( $function_name, array(
'selector' => '%%order_class%%, %%order_class%%.et_pb_bg_layout_dark, %%order_class%%.et_pb_bg_layout_light',
'declaration' => sprintf(
'background-image: url(%1$s);',
esc_html( $background_image )
),
) );
}
if ( 'on' === $use_bg_overlay && '' !== $bg_overlay_color ) {
ET_Builder_Element::set_style( $function_name, array(
'selector' => '%%order_class%% .et_pb_slide .et_pb_slide_overlay_container',
'declaration' => sprintf(
'background-color: %1$s;',
esc_html( $bg_overlay_color )
),
) );
}
if ( 'on' === $use_text_overlay && '' !== $text_overlay_color ) {
ET_Builder_Element::set_style( $function_name, array(
'selector' => '%%order_class%% .et_pb_slide .et_pb_slide_title, %%order_class%% .et_pb_slide .et_pb_slide_content',
'declaration' => sprintf(
'background-color: %1$s;',
esc_html( $text_overlay_color )
),
) );
}
if ( '' !== $text_border_radius ) {
$border_radius_value = et_builder_process_range_value( $text_border_radius );
ET_Builder_Element::set_style( $function_name, array(
'selector' => '%%order_class%%.et_pb_slider_with_text_overlay h2.et_pb_slide_title',
'declaration' => sprintf(
'-webkit-border-top-left-radius: %1$s;
-webkit-border-top-right-radius: %1$s;
-moz-border-radius-topleft: %1$s;
-moz-border-radius-topright: %1$s;
border-top-left-radius: %1$s;
border-top-right-radius: %1$s;',
esc_html( $border_radius_value )
),
) );
ET_Builder_Element::set_style( $function_name, array(
'selector' => '%%order_class%%.et_pb_slider_with_text_overlay .et_pb_slide_content',
'declaration' => sprintf(
'-webkit-border-bottom-right-radius: %1$s;
-webkit-border-bottom-left-radius: %1$s;
-moz-border-radius-bottomright: %1$s;
-moz-border-radius-bottomleft: %1$s;
border-bottom-right-radius: %1$s;
border-bottom-left-radius: %1$s;',
esc_html( $border_radius_value )
),
) );
}
$fullwidth = 'et_pb_fullwidth_slider' === $function_name ? 'on' : 'off';
$class = '';
$class .= 'off' === $fullwidth ? ' et_pb_slider_fullwidth_off' : '';
$class .= 'off' === $show_arrows ? ' et_pb_slider_no_arrows' : '';
$class .= 'off' === $show_pagination ? ' et_pb_slider_no_pagination' : '';
$class .= 'on' === $parallax ? ' et_pb_slider_parallax' : '';
$class .= 'on' === $auto ? ' et_slider_auto et_slider_speed_' . esc_attr( $auto_speed ) : '';
$class .= 'on' === $auto_ignore_hover ? ' et_slider_auto_ignore_hover' : '';
$class .= 'on' === $remove_inner_shadow ? ' et_pb_slider_no_shadow' : '';
$class .= 'on' === $show_image_video_mobile ? ' et_pb_slider_show_image' : '';
$class .= ' et_pb_post_slider_image_' . $image_placement;
$class .= 'on' === $use_bg_overlay ? ' et_pb_slider_with_overlay' : '';
$class .= 'on' === $use_text_overlay ? ' et_pb_slider_with_text_overlay' : '';
$data_dot_nav_custom_color = '' !== $dot_nav_custom_color
? sprintf( ' data-dots_color="%1$s"', esc_attr( $dot_nav_custom_color ) )
: '';
$data_arrows_custom_color = '' !== $arrows_custom_color
? sprintf( ' data-arrows_color="%1$s"', esc_attr( $arrows_custom_color ) )
: '';
$args = array( 'posts_per_page' => (int) $posts_number );
if ( '' !== $include_categories ) {
$args['cat'] = $include_categories;
}
if ( 'date_desc' !== $orderby ) {
switch( $orderby ) {
case 'date_asc' :
$args['orderby'] = 'date';
$args['order'] = 'ASC';
break;
case 'title_asc' :
$args['orderby'] = 'title';
$args['order'] = 'ASC';
break;
case 'title_desc' :
$args['orderby'] = 'title';
$args['order'] = 'DESC';
break;
case 'rand' :
$args['orderby'] = 'rand';
break;
}
}
$args = apply_filters( 'my_et_post_slider_args', $args );
ob_start();
query_posts( $args );
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
$slide_class = 'off' !== $show_image && in_array( $image_placement, array( 'left', 'right' ) ) && has_post_thumbnail() ? ' et_pb_slide_with_image' : '';
$slide_class .= " et_pb_bg_layout_{$background_layout}";
?>
<div class="et_pb_slide et_pb_media_alignment_center<?php echo esc_attr( $slide_class ); ?>" <?php if ( 'on' !== $parallax && 'off' !== $show_image && 'background' === $image_placement ) { printf( 'style="background-image:url(%1$s)"', esc_url( wp_get_attachment_url( get_post_thumbnail_id() ) ) ); } ?><?php echo $data_dot_nav_custom_color; echo $data_arrows_custom_color; ?>>
<?php if ( 'on' === $parallax && 'off' !== $show_image && 'background' === $image_placement ) { ?>
<div class="et_parallax_bg<?php if ( 'off' === $parallax_method ) { echo ' et_pb_parallax_css'; } ?>" style="background-image: url(<?php echo esc_url( wp_get_attachment_url( get_post_thumbnail_id() ) ); ?>);"></div>
<?php } ?>
<?php if ( 'on' === $use_bg_overlay ) { ?>
<div class="et_pb_slide_overlay_container"></div>
<?php } ?>
<div class="et_pb_container clearfix">
<?php if ( 'off' !== $show_image && has_post_thumbnail() && ! in_array( $image_placement, array( 'background', 'bottom' ) ) ) { ?>
<div class="et_pb_slide_image">
<?php the_post_thumbnail(); ?>
</div>
<?php } ?>
<div class="et_pb_slide_description">
<h2 class="et_pb_slide_title"><?php the_title(); ?></h2>
<div class="et_pb_slide_content <?php if ( 'on' === $hide_content_on_mobile ) { echo esc_attr( $hide_on_mobile_class ); } ?>">
<?php
if ( 'off' !== $show_meta ) {
printf(
'<p class="post-meta">%1$s | %2$s | %3$s | %4$s</p>',
et_get_safe_localization( sprintf( __( 'by %s', 'et_builder' ), '<span class="author vcard">' . et_pb_get_the_author_posts_link() . '</span>' ) ),
et_get_safe_localization( sprintf( __( '%s', 'et_builder' ), '<span class="published">' . esc_html( get_the_date() ) . '</span>' ) ),
get_the_category_list(', '),
sprintf( esc_html( _nx( '1 Comment', '%s Comments', get_comments_number(), 'number of comments', 'et_builder' ) ), number_format_i18n( get_comments_number() ) )
);
}
?>
<?php
$post_content = get_the_content();
// do not display the content if it contains Blog, Post Slider, Fullwidth Post Slider, or Portfolio modules to avoid infinite loops
if ( ! has_shortcode( $post_content, 'et_pb_blog' ) && ! has_shortcode( $post_content, 'et_pb_portfolio' ) && ! has_shortcode( $post_content, 'et_pb_post_slider' ) && ! has_shortcode( $post_content, 'et_pb_fullwidth_post_slider' ) ) {
if ( 'on' === $content_source ) {
global $more;
// page builder doesn't support more tag, so display the_content() in case of post made with page builder
if ( et_pb_is_pagebuilder_used( get_the_ID() ) ) {
$more = 1;
the_content();
} else {
$more = null;
the_content( '' );
}
} else {
if ( has_excerpt() && 'off' !== $use_manual_excerpt ) {
the_excerpt();
} else {
truncate_post( intval( $excerpt_length ) );
}
}
} else if ( has_excerpt() ) {
the_excerpt();
}
?>
</div>
<?php if ( 'off' !== $show_more_button && '' !== $more_text ) {
printf(
'<a href="%1$s" class="et_pb_more_button et_pb_button%4$s%5$s"%3$s>%2$s</a>',
esc_url( get_permalink() ),
esc_html( $more_text ),
'' !== $custom_icon && 'on' === $button_custom ? sprintf(
' data-icon="%1$s"',
esc_attr( et_pb_process_font_icon( $custom_icon ) )
) : '',
'' !== $custom_icon && 'on' === $button_custom ? ' et_pb_custom_button_icon' : '',
'on' === $hide_cta_on_mobile ? esc_attr( " {$hide_on_mobile_class}" ) : ''
);
}
?>
</div> <!-- .et_pb_slide_description -->
<?php if ( 'off' !== $show_image && has_post_thumbnail() && 'bottom' === $image_placement ) { ?>
<div class="et_pb_slide_image">
<?php the_post_thumbnail(); ?>
</div>
<?php } ?>
</div> <!-- .et_pb_container -->
</div> <!-- .et_pb_slide -->
<?php
} // end while
wp_reset_query();
} // end if
$content = ob_get_contents();
ob_end_clean();
$output = sprintf(
'<div%3$s class="et_pb_module et_pb_slider et_pb_post_slider%1$s%4$s">
<div class="et_pb_slides">
%2$s
</div> <!-- .et_pb_slides -->
</div> <!-- .et_pb_slider -->
',
$class,
$content,
( '' !== $module_id ? sprintf( ' id="%1$s"', esc_attr( $module_id ) ) : '' ),
( '' !== $module_class ? sprintf( ' %1$s', esc_attr( $module_class ) ) : '' )
);
return $output;
}
}
@danielbxl
Copy link

Hi @lots0logs & @daneloctober,

I'm currently working on a new project for one of my customers where I would like to work with filterable portfolios but at the same time I would like to implement a project slider. This solution would therefore be very welcome therefore thank you very much for sharing.

I'm using the latest version of Divi (4.4.3) but when I implement this code into my child theme the page is not loading anymore in the backend (see screenshot attached). I applied as well the fix pointed out by @daneloctober back in July last year but still no succes.

If you could support me in fixing this code would be very much appreciated.

Kind regards,

Daniel

ProjectSliderIssue_01

@lewishalliday
Copy link

@danielbxl did you find a solution to this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment