: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
public static function get_selected_upsell_display_args() {
$selected_args = array();
$selected_args['posts_per_page'] = et_()->array_get(
$selected_args['columns'] = et_()->array_get(
$selected_args['orderby'] = et_()->array_get(
// Set default values when parameters are empty.
$default = ET_Builder_Module_Helper_Woocommerce_Modules::get_columns_posts_default_value();
if ( empty( $selected_args['posts_per_page'] ) ) {
$selected_args['posts_per_page'] = $default;
if ( empty( $selected_args['columns'] ) ) {
$selected_args['columns'] = $default;
$selected_args = array_filter( $selected_args, 'strlen' );
* Renders the module output.
* @param array $attrs List of attributes.
* @param string $content Content being processed.
* @param string $render_slug Slug of module that is used for rendering output.
public function render( $attrs, $content = null, $render_slug ) {
ET_Builder_Module_Helper_Woocommerce_Modules::process_background_layout_data( $render_slug, $this );
ET_Builder_Module_Helper_Woocommerce_Modules::add_star_rating_style(
'%%order_class%% ul.products li.product .star-rating',
'%%order_class%% ul.products li.product:hover .star-rating'
$sale_badge_color_hover = $this->get_hover_value( 'sale_badge_color' );
$sale_badge_color_values = et_pb_responsive_options()->get_property_values( $this->props, 'sale_badge_color' );
$icon_hover_color_values = et_pb_responsive_options()->get_property_values( $this->props, 'icon_hover_color' );
$hover_overlay_color_value = et_pb_responsive_options()->get_property_values( $this->props, 'hover_overlay_color' );
et_pb_responsive_options()->generate_responsive_css( $sale_badge_color_values, '%%order_class%% span.onsale', 'background-color', $render_slug, ' !important;', 'color' );
if ( et_builder_is_hover_enabled( 'sale_badge_color', $this->props ) ) {
ET_Builder_Element::set_style(
'selector' => '%%order_class%%:hover span.onsale',
'declaration' => sprintf(
'background-color: %1$s !important;',
esc_html( $sale_badge_color_hover )
et_pb_responsive_options()->generate_responsive_css( $icon_hover_color_values, '%%order_class%% .et_overlay:before', 'color', $render_slug, ' !important;', 'color' );
et_pb_responsive_options()->generate_responsive_css(
$hover_overlay_color_value,
'%%order_class%% .et_overlay',
// 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->generate_css_filters(
self::$data_utils->array_get( $this->advanced_fields['image']['css'], 'main', '%%order_class%%' )
$this->add_classname( $this->get_text_orientation_classname() );
$is_shop = function_exists( 'is_shop' ) && is_shop();
$is_wc_loop_prop_get_set_exists = function_exists( 'wc_get_loop_prop' ) && function_exists( 'wc_set_loop_prop' );
$is_product_category = function_exists( 'is_product_category' ) && is_product_category();
$display_type = ET_Builder_Module_Helper_Woocommerce_Modules::set_display_type_to_render_only_products( 'woocommerce_shop_page_display' );
} else if ( is_product_category() ) {
$display_type = ET_Builder_Module_Helper_Woocommerce_Modules::set_display_type_to_render_only_products( 'woocommerce_category_archive_display' );
// Required to handle Customizer preview pane.
// Refer: https://github.com/elegantthemes/Divi/issues/17998#issuecomment-565955422
if ( $is_wc_loop_prop_get_set_exists && is_customize_preview() ) {
$is_filtered = wc_get_loop_prop( 'is_filtered' );
wc_set_loop_prop( 'is_filtered', true );
$output = self::get_upsells( $this->props );
// Required to handle Customizer preview pane.
// Refer: https://github.com/elegantthemes/Divi/issues/17998#issuecomment-565955422
if ( $is_wc_loop_prop_get_set_exists && is_customize_preview() && isset( $is_filtered ) ) {
wc_set_loop_prop( 'is_filtered', $is_filtered );
if ( $is_shop && isset( $display_type ) ) {
ET_Builder_Module_Helper_Woocommerce_Modules::reset_display_type( 'woocommerce_shop_page_display', $display_type );
} else if ( $is_product_category && isset( $display_type ) ) {
ET_Builder_Module_Helper_Woocommerce_Modules::reset_display_type( 'woocommerce_category_archive_display', $display_type );
// Render empty string if no output is generated to avoid unwanted vertical space.
"et_builder_module_{$render_slug}_outer_wrapper_attrs",
'ET_Builder_Module_Helper_Woocommerce_Modules',
'output_data_icon_attrs',
$output = $this->_render_module_wrapper( $output, $render_slug );
"et_builder_module_{$render_slug}_outer_wrapper_attrs",
'ET_Builder_Module_Helper_Woocommerce_Modules',
'output_data_icon_attrs',
new ET_Builder_Module_Woocommerce_Upsells();