: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
$video_background = $this->video_background();
$parallax_image_background = $this->get_parallax_image_background();
$content_source_both = count( $multi_view->get_values( 'content_source', true ) ) > 1;
$is_show_image = $multi_view->has_value( 'show_image', 'on' );
$is_show_meta = $multi_view->has_value( 'show_meta', 'on' );
$multi_view_attrs_button = $multi_view->render_attrs( array(
'content' => '{{more_text}}',
'more_text' => '__not_empty',
'show_more_button' => 'on',
$multi_view_attrs_show_meta = $multi_view->render_attrs( array(
$multi_view_attrs_show_image = $multi_view->render_attrs( array(
// Background layout class names.
$background_layout_class_names = et_pb_background_layout_options()->get_background_layout_class( $this->props );
$show_no_results_template = true;
'posts_number' => $posts_number,
'include_categories' => implode( ',', self::filter_include_categories( $include_categories ) ),
'content_source' => $content_source_both ? 'both' : $multi_view->get_value( 'content_source' ),
'use_manual_excerpt' => $use_manual_excerpt,
'excerpt_length' => $excerpt_length,
'offset_number' => $offset_number,
if ( 'on' === $use_current_loop ) {
if ( ! have_posts() || is_singular() ) {
// Force an empty result set in order to avoid loops over the current post.
$args = array( 'post__in' => array( 0 ) );
$show_no_results_template = false;
// Only allow certain args when `Posts For Current Page` is set.
$original = $wp_query->query_vars;
$custom = array_intersect_key( $args, array_flip( $allowed ) );
$args = array_merge( $original, $custom );
$query = self::get_blog_posts( $args, array(), array(), false );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
ET_Post_Stack::replace( $post );
$has_post_thumbnail = $query->posts[ $post_index ]->has_post_thumbnail;
$multi_view->set_custom_prop( 'content_source_both', $content_source_both );
if ( $content_source_both ) {
$multi_view->set_custom_prop( 'post_excerpt', $query->posts[ $post_index ]->post_excerpt );
$multi_view->set_custom_prop( 'post_content', $query->posts[ $post_index ]->post_content );
$multi_view->set_custom_prop( 'has_post_thumbnail', $query->posts[ $post_index ]->has_post_thumbnail );
$multi_view->set_custom_prop( 'post_featured_image', $query->posts[ $post_index ]->post_featured_image );
$multi_view->set_custom_prop( 'background_image_featured', $multi_view->get_values( 'show_image', false ) );
$multi_view->set_custom_prop( 'background_image_parallax', $multi_view->get_values( 'show_image', false ) );
$multi_view_attrs_wrapper = $multi_view->render_attrs( array(
'background-image' => '{{background_image_featured}}',
'et_pb_slide_with_image' => array(
'has_post_thumbnail' => true,
'image_placement' => array( 'left', 'right' ),
'et_pb_slide_with_no_image' => array(
'has_post_thumbnail' => false,
$multi_view_attrs_parallax_bg = 'on' === $parallax ? $multi_view->render_attrs( array(
'background-image' => '{{background_image_parallax}}',
$slide_class = 'off' !== $show_image && in_array( $image_placement, array( 'left', 'right' ) ) && $has_post_thumbnail ? ' et_pb_slide_with_image' : '';
$slide_class .= 'off' !== $show_image && ! $has_post_thumbnail ? ' et_pb_slide_with_no_image' : '';
$slide_class .= ' ' . implode( ' ', $background_layout_class_names );
// Reapply module background on slide item with featured image
$slide_post_id = $query->posts[ $post_index ]->ID;
$slide_class .= " et_pb_post_slide-{$slide_post_id}";
ET_Builder_Module_Helper_Slider::reapply_module_background_on_slide( array(
'slide_post_id' => $slide_post_id,
'post_featured_image' => $query->posts[ $post_index ]->post_featured_image,
'render_slug' => $render_slug,
<div class="et_pb_slide et_pb_media_alignment_center<?php echo esc_attr( $slide_class ); ?>" <?php echo et_core_esc_previously( $multi_view_attrs_wrapper ); ?>>
<?php if ( 'on' === $parallax && $is_show_image && 'background' === $image_placement ) { ?>
<div class="et_parallax_bg_wrap">
<div class="et_parallax_bg<?php if ( 'off' === $parallax_method ) { echo ' et_pb_parallax_css'; } ?>" style="background-image: url(<?php echo esc_url( $query->posts[ $post_index ]->post_featured_image ); ?>);"<?php echo et_core_esc_previously( $multi_view_attrs_parallax_bg ); ?>></div>
<?php if ( 'on' === $use_bg_overlay ) { ?>
<div class="et_pb_slide_overlay_container"></div>
<div class="et_pb_container clearfix">
<div class="et_pb_slider_container_inner">
<?php if ( 'off' !== $show_image && $has_post_thumbnail && ! in_array( $image_placement, array( 'background', 'bottom' ) ) ) { ?>
<div class="et_pb_slide_image"<?php echo et_core_esc_previously( $multi_view_attrs_show_image ); ?>>
<?php the_post_thumbnail(); ?>
<div class="et_pb_slide_description">
<?php if ( $is_text_overlay_applied ) : ?><div class="et_pb_text_overlay_wrapper"><?php endif; ?>
<<?php echo et_pb_process_header_level( $header_level, 'h2' ) ?> class="et_pb_slide_title"><a href="<?php esc_url( the_permalink() ); ?>"><?php the_title(); ?></a></<?php echo et_pb_process_header_level( $header_level, 'h2' ) ?>>
<div class="et_pb_slide_content <?php if ( 'on' !== $show_content_on_mobile ) { echo esc_attr( $hide_on_mobile_class ); } ?>">
'<p class="post-meta"%5$s>%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(', '),
number_format_i18n( get_comments_number() )
$multi_view_attrs_show_meta
$multi_view->render_element( array(
'content' => '{{content_source}}',
<?php if ( $is_text_overlay_applied ) : ?></div><?php endif; ?>
$button_classname = array( 'et_pb_more_button' );
if ( 'on' !== $show_cta_on_mobile ) {
$button_classname[] = $hide_on_mobile_class;
echo et_core_esc_previously( $this->render_button( array(
'button_classname' => $button_classname,
'button_custom' => $button_custom,
'button_rel' => $button_rel,
'button_text' => $more_text,
'button_url' => get_permalink(),
'custom_icon' => $custom_icon,
'custom_icon_tablet' => $custom_icon_tablet,
'custom_icon_phone' => $custom_icon_phone,
'display_button' => $multi_view->has_value( 'show_more_button', 'on' ) && $multi_view->has_value( 'more_text' ),
'multi_view_data' => $multi_view->render_attrs( array(
'content' => '{{more_text}}',
'more_text' => '__not_empty',
'show_more_button' => 'on',
</div> <!-- .et_pb_slide_description -->
<?php if ( $is_show_image && $has_post_thumbnail && 'bottom' === $image_placement ) { ?>
<div class="et_pb_slide_image"<?php echo et_core_esc_previously( $multi_view_attrs_show_image ); ?>>
<?php the_post_thumbnail(); ?>
</div> <!-- .et_pb_container -->
</div> <!-- .et_pb_slide -->
$content = ob_get_clean();
if ( ! $content && $show_no_results_template ) {
$content = '<div class="et_pb_no_results">';
$content .= self::get_no_results_template();
// Images: Add CSS Filters and Mix Blend Mode rules (if set)
if ( array_key_exists( 'image', $this->advanced_fields ) && array_key_exists( 'css', $this->advanced_fields['image'] ) ) {
$this->add_classname( $this->generate_css_filters(
self::$data_utils->array_get( $this->advanced_fields['image']['css'], 'main', '%%order_class%%' )
$this->add_classname( array(
"et_pb_post_slider_image_{$image_placement}",
$this->add_classname( 'et_pb_slider_fullwidth_off' );
if ( 'off' === $show_arrows ) {
$this->add_classname( 'et_pb_slider_no_arrows' );
if ( 'off' === $show_pagination ) {
$this->add_classname( 'et_pb_slider_no_pagination' );
if ( 'on' === $parallax ) {
$this->add_classname( 'et_pb_slider_parallax' );
$this->add_classname( array(
"et_slider_speed_{$auto_speed}",
if ( 'on' === $auto_ignore_hover ) {
$this->add_classname( 'et_slider_auto_ignore_hover' );
if ( 'on' === $show_image_video_mobile ) {
$this->add_classname( 'et_pb_slider_show_image' );
if ( 'on' === $use_bg_overlay ) {
$this->add_classname( 'et_pb_slider_with_overlay' );
if ( 'on' === $use_text_overlay ) {
$this->add_classname( 'et_pb_slider_with_text_overlay' );
// Background layout data attributes.
$data_background_layout = et_pb_background_layout_options()->get_background_layout_attrs( $this->props );
$muti_view_data_attr = $multi_view->render_attrs( array(
'et_pb_slider_no_arrows' => array(
'et_pb_slider_no_pagination' => array(
'show_pagination' => 'off',
'et_pb_post_slider_image_background' => array(
'image_placement' => 'background',
'et_pb_post_slider_image_left' => array(
'image_placement' => 'left',
'et_pb_post_slider_image_right' => array(
'image_placement' => 'right',
'et_pb_post_slider_image_top' => array(
'image_placement' => 'top',
'et_pb_post_slider_image_bottom' => array(
'image_placement' => 'bottom',
'<div%3$s class="%1$s"%7$s%8$s>
<div class="et_pb_slides">
</div> <!-- .et_pb_slides -->
</div> <!-- .et_pb_slider -->
$this->module_classname( $render_slug ),
$parallax_image_background, // #5
$this->inner_shadow_back_compatibility( $render_slug ),
et_core_esc_previously( $data_background_layout ),
private function inner_shadow_back_compatibility( $functions_name ) {
$utils = ET_Core_Data_Utils::instance();
version_compare( $utils->array_get( $atts, '_builder_version', '3.0.93' ), '3.0.99', 'lt' )
$class = self::get_module_order_class( $functions_name );
'.%1$s.et_pb_slider .et_pb_slide {'
. '-webkit-box-shadow: none; '
. '-moz-box-shadow: none; '
if ( 'off' !== $utils->array_get( $atts, 'show_inner_shadow' ) ) {
'.%1$s > .box-shadow-overlay { '
. '-webkit-box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1); '
. '-moz-box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1); '
. 'box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1); '
* Filter multi view value.
* @see ET_Builder_Module_Helper_MultiViewOptions::filter_value
* @param mixed $raw_value Props raw value.
* @type string $context Context param: content, attrs, visibility, classes.
* @type string $name Module options props name.
* @type string $mode Current data mode: desktop, hover, tablet, phone.
* @type string $attr_key Attribute key for attrs context data. Example: src, class, etc.
* @type string $attr_sub_key Attribute sub key that availabe when passing attrs value as array such as styes. Example: padding-top, margin-botton, etc.
* @param ET_Builder_Module_Helper_MultiViewOptions $multi_view Multiview object instance.
public function multi_view_filter_value( $raw_value, $args, $multi_view ) {
$name = et_()->array_get( $args, 'name', '' );
if ( 'background_image_featured' === $name ) {
$image_placement = et_()->array_get( $this->props, 'image_placement', '' );
$parallax = et_()->array_get( $this->props, 'parallax', '' );
if ( 'on' !== $raw_value || 'background' !== $image_placement || 'on' === $parallax || ! $multi_view->get_value( 'has_post_thumbnail' ) ) {
return sprintf( 'url(%1$s)', $multi_view->get_value( 'post_featured_image' ) );
} else if ( 'background_image_parallax' === $name ) {
$image_placement = et_()->array_get( $this->props, 'image_placement', '' );
$parallax = et_()->array_get( $this->props, 'parallax', '' );
if ( 'on' !== $raw_value || 'background' !== $image_placement || 'on' !== $parallax || ! $multi_view->get_value( 'has_post_thumbnail' ) ) {
return sprintf( 'url(%1$s)', $multi_view->get_value( 'post_featured_image' ) );
} else if ( 'content_source' === $name ) {
if ( 'on' !== $raw_value && $multi_view->get_value( 'content_source_both' ) ) {
return $multi_view->get_value( 'post_excerpt' );
return $multi_view->get_value( 'post_content' );
new ET_Builder_Module_Post_Slider;