LittleDemon WebShell


Linux server27.hostingraja.org 2.6.32-954.3.5.lve1.4.93.el6.x86_64 #1 SMP Wed Oct 4 17:04:29 UTC 2023 x86_64
Path : /home/udaipurk/www/websites/rishh/XStore Theme/xstore/framework/compatibility/
File Upload :
Command :
Current File : //home/udaipurk/www/websites/rishh/XStore Theme/xstore/framework/compatibility/elementor.php

<?php
/**
 * Description
 *
 * @package    elementor.php
 * @since      8.0.0
 * @author     Stas
 * @link       http://xstore.8theme.com
 * @license    Themeforest Split Licence
 */

defined( 'ABSPATH' ) || exit( 'Direct script access denied.' );

// compatibility with elementor header/footer builders
// rewritten due to a single post template error
function etheme_register_elementor_locations( $elementor_theme_manager ) {
	
	// the default locations
	$core_locations = $elementor_theme_manager->get_core_locations();
	
	// do not rewrite this locations
	unset($core_locations['archive']);
	unset($core_locations['single']);
	
	foreach ( $core_locations as $location => $settings ) {
		// rewrite locations to default
		$elementor_theme_manager->register_location( $location, $settings );
	}
	
	// previse rewritten all locations
	//$elementor_theme_manager->register_all_core_location();
}

add_action( 'elementor/theme/register_locations', 'etheme_register_elementor_locations' );

add_action( "elementor/theme/before_do_header", function() {
	ob_start();
	
	do_action( 'et_after_body', true )
	
	?>
	<div class="template-container">
	
	<?php
	/**
	 * Hook: etheme_header_before_template_content.
	 *
	 * @hooked etheme_top_panel_content - 10
	 * @hooked etheme_mobile_menu_content - 20
	 *
	 * @version 6.0.0 +
	 * @since 6.0.0 +
	 *
	 */
	do_action( 'etheme_header_before_template_content' );
	?>
	<div class="template-content">
	<div class="page-wrapper">
	<?php
	echo ob_get_clean();
} );

add_action( "elementor/theme/after_do_header", function() {

});

add_action( "elementor/theme/before_do_footer", function() {
	ob_start(); ?>
	</div> <!-- page wrapper -->
	
	</div> <!-- template-content -->
	
	<?php do_action('after_page_wrapper'); ?>
	</div> <!-- template-container -->
	<?php echo ob_get_clean();
});

add_action('wp', function () {
    $is_preview = Elementor\Plugin::$instance->preview->is_preview_mode();
    $is_edit = Elementor\Plugin::$instance->editor->is_edit_mode();
    if ( $is_preview || $is_edit ) {
        add_filter('etheme_cart_redirect_after_add', '__return_false');
        add_filter('etheme_elementor_edit_mode', '__return_true');
        add_filter('etheme_site_preloader', '__return_false');
    }
    $is_static_block = is_singular('staticblocks');
    $is_etheme_slides = is_singular('etheme_slides');
    $is_etheme_mega_menus = is_singular('etheme_mega_menus');
    if ( $is_preview || $is_edit ) :
        if ($is_etheme_slides && false)  : // temp hide
            add_action('wp_body_open', function () {
                foreach (array(
                             'media',
                             'colorpicker'
                         ) as $script_2_load) {
                    switch ($script_2_load) {
                        case 'repeater':
                        case 'sortable':
                            wp_enqueue_script('jquery-ui-sortable');
                            wp_enqueue_script('jquery-ui-draggable');
                            break;
                        case 'media':
                            wp_enqueue_media();
                            break;
                        case 'colorpicker':
                            // works only for backend @todo need to load for frontend
                            wp_enqueue_script( 'jquery-color' );
                            wp_enqueue_style( 'wp-color-picker' );
                            wp_enqueue_script( 'wp-color-picker' );
                            break;
                    }
                }
                $post_type = 'etheme_slides';
                $has_post_thumbnail = has_post_thumbnail();
                $button_atts = array(
                    'class="et-elementor-editor-thumbnail-action"',
                    'data-selector=".swiper-slide-contents"',
                    'data-post_id="'.get_the_ID().'"',
                    'data-post_type="'.$post_type.'"'
                ); ?>
                <div class="et-elementor-editor-thumbnail-actions-wrapper">
                    <span <?php echo implode(' ', $button_atts); ?> data-action="upload">
                        <span class="dashicons dashicons-upload"></span>
                        <?php echo esc_html__('Upload BG Image', 'xstore'); ?>
                    </span>
                    <span <?php echo implode(' ', $button_atts); ?> data-action="settings">
                        <span class="dashicons dashicons-admin-generic"></span>
                        <?php echo esc_html__('BG Settings', 'xstore'); ?>
                    </span>
                    <span <?php echo implode(' ', $button_atts); ?> data-action="remove" <?php if ( !$has_post_thumbnail ) echo ' style="display: none;"'; ?>>
                        <span class="dashicons dashicons-trash"></span>
                        <?php echo esc_html__('Remove BG Image', 'xstore'); ?>
                    </span>
                    <input type="hidden" name="etheme_<?php echo esc_attr($post_type) . '_nonce' ?>" value="<?php echo wp_create_nonce( 'etheme_'.$post_type.'_nonce' ); ?>">
                </div>
        <?php });
        endif;
        if ( $is_static_block || $is_etheme_slides || $is_etheme_mega_menus ) :
            add_action('wp_body_open', function () {
               ?>
                <div class="et-elementor-editor-dark-light-switcher">
            <span class="switcher light-mode" data-light-color="#fff" data-dark-color="#1a1a1a">
                <span class="on"><?php echo esc_html__('Light', 'xstore'); ?></span>
                <span class="off"><?php echo esc_html__('Dark', 'xstore'); ?></span>
                <i>
                    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve" class="light" width="1em" height="1em" fill="currentColor">
                      <g id="Sun">
                          <g>
                              <path style="fill-rule:evenodd;clip-rule:evenodd;" d="M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5    S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5    C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6    C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9    c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44    l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5    c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06    L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z     M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0.789,0.439,1.06l2,2    C28.711,30.832,29.086,31,29.5,31c0.828,0,1.5-0.672,1.5-1.5c0-0.414-0.168-0.789-0.439-1.061L28.561,26.439z M17.5,29    c-0.829,0-1.5,0.672-1.5,1.5v3c0,0.828,0.671,1.5,1.5,1.5s1.5-0.672,1.5-1.5v-3C19,29.672,18.329,29,17.5,29z M17.5,7    C11.71,7,7,11.71,7,17.5S11.71,28,17.5,28S28,23.29,28,17.5S23.29,7,17.5,7z M17.5,25c-4.136,0-7.5-3.364-7.5-7.5    c0-4.136,3.364-7.5,7.5-7.5c4.136,0,7.5,3.364,7.5,7.5C25,21.636,21.636,25,17.5,25z"></path>
                          </g>
                      </g>
                    </svg>
                    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve" class="dark" width="1em" height="1em" fill="currentColor">
                      <path d="M96.76,66.458c-0.853-0.852-2.15-1.064-3.23-0.534c-6.063,2.991-12.858,4.571-19.655,4.571  C62.022,70.495,50.88,65.88,42.5,57.5C29.043,44.043,25.658,23.536,34.076,6.47c0.532-1.08,0.318-2.379-0.534-3.23  c-0.851-0.852-2.15-1.064-3.23-0.534c-4.918,2.427-9.375,5.619-13.246,9.491c-9.447,9.447-14.65,22.008-14.65,35.369  c0,13.36,5.203,25.921,14.65,35.368s22.008,14.65,35.368,14.65c13.361,0,25.921-5.203,35.369-14.65  c3.872-3.871,7.064-8.328,9.491-13.246C97.826,68.608,97.611,67.309,96.76,66.458z"></path>
                    </svg>
                </i>
            </span></div>
                <?php
            });
        endif;
    endif;
    if ( $is_preview ) {
        // disable mega menu lazy load if in Elementor edit mode
        add_filter( 'menu_dropdown_ajax', '__return_false' );
        // disable mobile optimization in editor/preview mode
        // to make Elementor resize work normally
        set_query_var('et_mobile-optimization', false);
    }
    if ( defined('ELEMENTOR_PRO_VERSION') && ( get_query_var('et_is-cart', false) || get_query_var('et_is-checkout', false) ) ) {

        if ( $is_preview ) {
            add_filter('etheme_elementor_cart_page', '__return_true');
            add_filter('etheme_elementor_checkout_page', '__return_true');
        }
//        else {
//
//            $document = \Elementor\Plugin::$instance->documents->get( get_query_var('et_page-id', array('id' => 0))['id'] );
//
//            if ( is_object( $document ) ) {
//                $data = $document->get_elements_data();
//                \Elementor\Plugin::$instance->db->iterate_data( $data, function( $element ) {
//                    if (
//                        isset( $element['widgetType'] )
//                    )  {
//                        switch($element['widgetType']) {
//                            case 'woocommerce-cart':
//                                add_filter('etheme_elementor_cart_page', '__return_true');
//                                break;
//                            case 'woocommerce-checkout-page':
//                                add_filter('etheme_elementor_checkout_page', '__return_true');
//                                break;
//                        }
//                    }
//                });
//            }
//        }
    }
});

$disable_options_edit_mode = array(
    'cssjs_ver',
    'flying_pages'
);

foreach ($disable_options_edit_mode as $disable_option_edit_mode) {
	add_filter('theme_mod_'.$disable_option_edit_mode, function ($origin_value) {
		if ( is_customize_preview() || (class_exists('\Elementor\Plugin') &&
		     \Elementor\Plugin::$instance->editor &&
		     ( \Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) ) ) {
			return false;
		}
		return $origin_value;
	}, 10);
}


add_action( 'elementor/frontend/after_enqueue_scripts', function () {
	// is elementor preview load
	if ( Elementor\Plugin::$instance->preview->is_preview_mode() ) {
		wp_enqueue_script( 'etheme_parallax_scroll_effect' ); // works always
		wp_enqueue_script( 'etheme_parallax_3d_hover_effect' ); // works always
		wp_enqueue_script( 'etheme_parallax_hover_effect' ); // works always
		wp_enqueue_script( 'etheme_parallax_floating_effect' ); // works always
        wp_enqueue_script( 'et_product_hover_slider' ); // for product carousel effect
//        if ( \Elementor\Plugin::$instance->documents->get_current() instanceof \ElementorPro\Modules\ThemeBuilder\Documents\Header ) {
            wp_enqueue_script('etheme_elementor_header_sticky'); // works always
            wp_enqueue_style('etheme-elementor-header-sticky'); // works always
//        }
	}
}, 50 );

add_action( 'elementor/frontend/before_register_scripts', function() {
//    $scripts_2_register = array(
//        'etheme_countdown',
//        'etheme_animated_headline',
//	    'etheme_progress_bar',
//	    'etheme_timeline',
//	    'etheme_product_filters',
//    );
//	foreach ($scripts_2_register as $script){
//		wp_register_script(
//			$scripts[$script]['name'],
//			get_template_directory_uri() . $scripts[$script]['file'],
//			(isset($scripts[$script]['deps']) ? $scripts[$script]['deps'] : array('jquery', 'etheme')),
//			(isset($scripts[$script]['version']) ? $scripts[$script]['version'] : ''),
//			$scripts[$script]['in_footer']
//		);
//	}
	$theme = wp_get_theme();
	foreach (etheme_config_js_files() as $script){
		wp_register_script(
			$script['name'],
			get_template_directory_uri() . $script['file'],
			(isset($script['deps']) ? $script['deps'] : array('jquery', 'etheme')),
			(isset($script['version']) ? $script['version'] : $theme->version),
			$script['in_footer']
		);
	}
	
}, 99);

add_action( 'elementor/frontend/before_register_styles', function() {
 
	$is_rtl = get_query_var('et_is-rtl', false);
	$theme = wp_get_theme();
	
	foreach (etheme_config_css_files() as $script){
		if ( !isset($script['deps'])) $script['deps'] = array("etheme-parent-style");
		
		if ( $is_rtl ) {
			$rtl_file = get_template_directory() . esc_attr( $script['file'] ) . '-rtl'.ETHEME_MIN_CSS.'.css';
			if (file_exists($rtl_file)) {
				$script['file'] .= '-rtl';
			}
		}
		
		wp_register_style(  'etheme-'.$script['name'], get_template_directory_uri() . $script['file'] . ETHEME_MIN_CSS .'.css', $script['deps'], $theme->version );
	}
}, 99);

// filters/action for product grid Elementor widget
add_filter('etheme_product_filters_taxonomies', function ($elements) {
	if ( etheme_get_option( 'enable_brands', 1 ) ) {
		$elements['brand'] = esc_html__( 'Brand', 'xstore' );
	}
    return $elements;
});

add_filter( 'etheme_product_grid_list_product_hover_elements', function ( $elements ) {
	if ( get_theme_mod( 'quick_view', 1 ) )
		$elements['quick_view'] = esc_html__( 'Show Quick View', 'xstore' );
	return $elements;
} );

add_action( 'etheme_product_grid_list_product_hover_element_render', function ( $key, $product, $edit_mode ) {
	if ( $key == 'quick_view' ) {
		if ( !$edit_mode && !wp_doing_ajax() ) {
			etheme_enqueue_style( "quick-view" );
			if ( get_theme_mod( 'quick_view_content_type', 'popup' ) == 'off_canvas' ) {
				etheme_enqueue_style( "off-canvas" );
			}
		}
		echo '<span class="show-quickly" data-prodid="' . esc_attr( $product->get_ID() ) . '" data-text="'.esc_attr__('Quick View', 'xstore').'">' .
            (get_theme_mod('bold_icons', 0) ? '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="currentColor">
                <path d="M20.52 8.592v0c-4.728-4.704-12.384-4.704-17.088 0l-3.384 3.36 3.456 3.456c2.28 2.28 5.328 3.552 8.568 3.552s6.288-1.248 8.568-3.552l3.312-3.36-3.432-3.456zM12 8.376c1.992 0 3.624 1.632 3.624 3.624s-1.632 3.624-3.624 3.624-3.624-1.608-3.624-3.624 1.632-3.624 3.624-3.624zM6.528 12c0 2.040 1.128 3.816 2.784 4.752-1.68-0.456-3.264-1.32-4.56-2.64l-2.16-2.184 2.136-2.136c1.392-1.392 3.072-2.28 4.848-2.712-1.8 0.912-3.048 2.784-3.048 4.92zM17.472 12c0-2.136-1.248-4.008-3.048-4.896 1.776 0.432 3.456 1.344 4.848 2.712l2.16 2.184-2.136 2.136c-1.344 1.32-2.952 2.208-4.656 2.664 1.68-0.936 2.832-2.736 2.832-4.8z"></path>
            </svg>' :
		     '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="currentColor">
                        <path d="M20.664 8.688v0c-4.8-4.776-12.6-4.776-17.376 0l-3.288 3.264 3.36 3.36c2.328 2.328 5.4 3.6 8.712 3.6 3.288 0 6.384-1.272 8.712-3.6l3.216-3.264-3.336-3.36zM4.152 14.496l-2.52-2.544 2.496-2.496c4.344-4.344 11.4-4.344 15.744 0l2.52 2.544-2.496 2.496c-4.344 4.32-11.4 4.32-15.744 0zM12 6.648c-2.952 0-5.352 2.4-5.352 5.352s2.4 5.352 5.352 5.352c2.952 0 5.352-2.4 5.352-5.352s-2.4-5.352-5.352-5.352zM12 16.176c-2.304 0-4.176-1.872-4.176-4.176s1.872-4.176 4.176-4.176 4.176 1.872 4.176 4.176-1.872 4.176-4.176 4.176z"></path>
                    </svg>') .
		     '</span>';
	}
}, 10, 3 );

add_filter('etheme_product_grid_list_product_elements', 'etheme_product_grid_list_product_and_hover_elements_filter');
add_filter('etheme_product_grid_list_product_hover_elements', 'etheme_product_grid_list_product_and_hover_elements_filter');

function etheme_product_grid_list_product_and_hover_elements_filter($elements) {
	if ( 'yes' === get_option( 'woocommerce_manage_stock' ) ) {
		$excerpt_position = array_search('excerpt', array_keys($elements));
		if ( $excerpt_position > 1 ) {
			$elements = array_slice( $elements, 0, $excerpt_position, true ) +
			            array( 'stock_line' => esc_html__( 'Show Stock Line', 'xstore' ) ) +
			            array_slice( $elements, $excerpt_position, count( $elements ) - $excerpt_position, true );
		}
		else {
			$elements['stock_line'] = esc_html__( 'Show Stock Line', 'xstore' );
		}
	}

    if ( class_exists( 'WeDevs_Dokan' ) || class_exists( 'Dokan_Pro' ) ) {
        $seller_position = array_search('rating', array_keys($elements));
        if ( $seller_position > 1 ) {
            $elements = array_slice( $elements, 0, $seller_position, true ) +
                array( 'dokan_seller' => esc_html__( 'Show Seller (dokan)', 'xstore' ) ) +
                array_slice( $elements, $seller_position, count( $elements ) - $seller_position, true );
        }
        else {
            $elements['dokan_seller'] = esc_html__( 'Show Seller (dokan)', 'xstore' );
        }
        add_filter('etheme_product_grid_list_product_dokan_seller_styles', '__return_true');
    }

    $enabled_brands = get_query_var('et_brands', 'undefined');
    if ( $enabled_brands === 'undefined' ) {
        $enabled_brands = etheme_get_option( 'enable_brands', 1 );
        set_query_var('et_brands', $enabled_brands);
    }
	if ( $enabled_brands ) {
		$rating_position = array_search('rating', array_keys($elements));
		if ( $rating_position > 1 ) {
			$elements = array_slice( $elements, 0, $rating_position, true ) +
			            array( 'brands' => esc_html__( 'Show Brands', 'xstore' ) ) +
			            array_slice( $elements, $rating_position, count( $elements ) - $rating_position, true );
		}
		else {
			$elements['brands'] = esc_html__( 'Show Brands', 'xstore' );
		}
        add_filter('etheme_product_grid_list_product_brands_styles', '__return_true');
	}

    $enabled_swatch = get_query_var('et_is-swatches', 'undefined');
    if ( $enabled_swatch === 'undefined' ) {
        $enabled_swatch = etheme_get_option( 'enable_swatch', 1 );
        set_query_var('et_is-swatches', $enabled_brands);
    }

	if ( $enabled_swatch ) {
        $swatch_position = get_query_var('et_swatches-pos', 'undefined');
        if ( $swatch_position === 'undefined' ) {
            $swatch_position = etheme_get_option('swatch_position_shop', 'before');
            set_query_var('et_swatches-pos', $swatch_position);
        }
		if ( $swatch_position != 'disable' ) {
			$categories_position = $swatch_position == 'before' ? array_search('categories', array_keys($elements)) : array_search('button', array_keys($elements));
//			$categories_position_after = $swatch_position == 'after' ? 1 : 0;
			$categories_position_after = 0;
			if ( $categories_position > 0 ) {
				$elements = array_slice( $elements, 0, $categories_position + $categories_position_after, true ) +
				            array( 'swatches' => esc_html__( 'Show Swatches', 'xstore' ) ) +
				            array_slice( $elements, $categories_position, count( $elements ) - $categories_position + $categories_position_after, true );
			}
			else {
				$elements['swatches'] = esc_html__( 'Show Swatches', 'xstore' );
			}
        }
    }

	return $elements;
}

add_filter('etheme_product_grid_list_product_hover_info_elements', function ($elements) {
	$elements[] = 'brands';
	$elements[] = 'stock_line';
	$elements[] = 'swatches';
//    $elements[] = 'dokan_seller';
	return $elements;
});

add_action( 'etheme_product_grid_list_product_element_render', 'etheme_product_grid_list_product_and_hover_element_render', 10, 4 );
add_action( 'etheme_product_grid_list_product_hover_element_render', 'etheme_product_grid_list_product_and_hover_element_render', 10, 4 );

function etheme_product_grid_list_product_and_hover_element_render($key, $product, $edit_mode, $main_class) {
	switch ($key) {
		case 'stock_line':
			echo et_product_stock_line($product);
			break;
		case 'brands':
			etheme_product_brands();
			break;
		case 'swatches':
			wp_enqueue_style('etheme-swatches-style');
			global $local_settings;
			$specific_hover = isset($local_settings['hover_effect']) && in_array($local_settings['hover_effect'], array('info', 'overlay', 'default'));
			$product_type_quantity_types = apply_filters('etheme_product_type_show_quantity', array('simple', 'variable', 'variation'));
			$has_quantity = !!$local_settings['product_button_quantity'] && in_array($product->get_type(), $product_type_quantity_types);
			if ( $specific_hover ) {
			    add_filter('theme_mod_swatch_layout_shop', '__return_false');
            }
			if ( $has_quantity ) {
				remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
				add_filter('woocommerce_product_add_to_cart_text', '__return_false');
				remove_action( 'woocommerce_before_quantity_input_field', 'et_quantity_minus_icon' );
				remove_action( 'woocommerce_after_quantity_input_field', 'et_quantity_plus_icon' );
				add_action( 'woocommerce_before_quantity_input_field', array($main_class, 'quantity_minus_icon') );
				add_action( 'woocommerce_after_quantity_input_field', array($main_class, 'quantity_plus_icon') );
				add_filter('esc_html', array($main_class, 'escape_text'), 10, 2);
				add_filter('woocommerce_loop_add_to_cart_args', array($main_class, 'add_class_for_button'), 10, 1);
				add_filter('woocommerce_product_add_to_cart_text', array($main_class, 'add_to_cart_icon'), 10);
            }
			else {
			    add_filter('theme_mod_product_page_smart_addtocart', '__return_false');
            }
			do_action('loop_swatch', 'normal');
			if ( $specific_hover ) {
				remove_filter('theme_mod_swatch_layout_shop', '__return_false');
			}
			if ( $has_quantity ) {
				remove_filter('woocommerce_product_add_to_cart_text', array($main_class, 'add_to_cart_icon'), 10);
				remove_filter('woocommerce_loop_add_to_cart_args', array($main_class, 'add_class_for_button'), 10, 1);
				remove_filter('esc_html', array($main_class, 'escape_text'), 10, 2);
				remove_action( 'woocommerce_before_quantity_input_field', array($main_class, 'quantity_minus_icon') );
				remove_action( 'woocommerce_after_quantity_input_field', array($main_class, 'quantity_plus_icon') );
				add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
				remove_filter('woocommerce_product_add_to_cart_text', '__return_false');
            }
			else {
				remove_filter('theme_mod_product_page_smart_addtocart', '__return_false');
			}
			break;
        case 'dokan_seller':
            etheme_dokan_seller();
            break;
	}
}

add_action('etheme_product_grid_list_product_elements_style', 'etheme_product_grid_list_product_and_hover_elements_style');

function etheme_product_grid_list_product_and_hover_elements_style ($control) {
    if ( apply_filters('etheme_product_grid_list_product_brands_styles', false) ) {
        $control->start_controls_section(
            'section_brands_style',
            [
                'label' => __('Brands', 'xstore'),
                'tab' => \Elementor\Controls_Manager::TAB_STYLE,
                'condition' => [
                    'product_brands!' => ''
                ],
            ]
        );

        $control->add_group_control(
            \Elementor\Group_Control_Typography::get_type(),
            [
                'name' => 'brands_typography',
                'selector' => '{{WRAPPER}} .products-page-brands',
            ]
        );

        $control->start_controls_tabs('tabs_brands_colors');

        $control->start_controls_tab('tabs_brands_color_normal',
            [
                'label' => esc_html__('Normal', 'xstore')
            ]
        );

        $control->add_control(
            'brands_color',
            [
                'label' => __('Color', 'xstore'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .products-page-brands, {{WRAPPER}} .products-page-brands a' => 'color: {{VALUE}};',
                ],
            ]
        );

        $control->end_controls_tab();

        $control->start_controls_tab('tabs_brands_color_hover',
            [
                'label' => esc_html__('Hover', 'xstore')
            ]
        );

        $control->add_control(
            'brands_color_hover',
            [
                'label' => __('Color', 'xstore'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .products-page-brands a:hover' => 'color: {{VALUE}};',
                ],
            ]
        );

        $control->end_controls_tab();
        $control->end_controls_tabs();

        $control->add_control(
            'brands_space',
            [
                'label' => __('Bottom Space', 'xstore'),
                'type' => \Elementor\Controls_Manager::SLIDER,
                'size_units' => ['px'],
                'range' => [
                    'px' => [
                        'min' => 0,
                        'max' => 50,
                        'step' => 1,
                    ],
                ],
                'selectors' => [
                    '{{WRAPPER}} .products-page-brands' => 'margin-bottom: {{SIZE}}{{UNIT}};',
                ],
            ]
        );

        $control->end_controls_section();
    }

    if ( apply_filters('etheme_product_grid_list_product_dokan_seller_styles', false) ) {
        $control->start_controls_section(
            'section_dokan_seller_style',
            [
                'label' => __('Seller (dokan)', 'xstore'),
                'tab' => \Elementor\Controls_Manager::TAB_STYLE,
                'condition' => [
                    'product_dokan_seller!' => ''
                ],
            ]
        );

        $control->add_group_control(
            \Elementor\Group_Control_Typography::get_type(),
            [
                'name' => 'dokan_seller_typography',
                'selector' => '{{WRAPPER}} .product_seller',
            ]
        );

        $control->start_controls_tabs('tabs_dokan_seller_colors');

        $control->start_controls_tab('tabs_dokan_seller_color_normal',
            [
                'label' => esc_html__('Normal', 'xstore')
            ]
        );

        $control->add_control(
            'dokan_seller_color',
            [
                'label' => __('Color', 'xstore'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .product_seller, {{WRAPPER}} .product_seller a' => 'color: {{VALUE}};',
                ],
            ]
        );

        $control->end_controls_tab();

        $control->start_controls_tab('tabs_dokan_seller_color_hover',
            [
                'label' => esc_html__('Hover', 'xstore')
            ]
        );

        $control->add_control(
            'dokan_seller_color_hover',
            [
                'label' => __('Color', 'xstore'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .product_seller a:hover' => 'color: {{VALUE}};',
                ],
            ]
        );

        $control->end_controls_tab();
        $control->end_controls_tabs();

        $control->add_control(
            'dokan_seller_space',
            [
                'label' => __('Bottom Space', 'xstore'),
                'type' => \Elementor\Controls_Manager::SLIDER,
                'size_units' => ['px'],
                'range' => [
                    'px' => [
                        'min' => 0,
                        'max' => 50,
                        'step' => 1,
                    ],
                ],
                'selectors' => [
                    '{{WRAPPER}} .product_seller' => 'margin-bottom: {{SIZE}}{{UNIT}}; display: block;',
                ],
            ]
        );

        $control->end_controls_section();
    }
}

add_filter('etheme_product_grid_list_product_hover_info_elements_render', function ($info_elements, $hover_effect, $all_elements) {
	if ( in_array($hover_effect, array('info', 'overlay', 'default')) ) {
	    if ( array_key_exists('brands', $all_elements) ) {
		    $info_elements['brands'] = $all_elements['brands'];
        }
		if ( array_key_exists('stock_line', $all_elements) ) {
			$info_elements['stock_line'] = $all_elements['stock_line'];
		}
		if ( array_key_exists('swatches', $all_elements) ) {
			$info_elements['swatches'] = $all_elements['swatches'];
		}
    }
	return $info_elements;
}, 10, 3);

add_filter('etheme_product_grid_list_product_hover_elements_render', function ($elements, $hover_effect, $info_elements) {
	if ( in_array($hover_effect, array('info', 'overlay', 'default')) ) {
		if ( array_key_exists('brands', $elements) ) {
			unset($elements['brands']);
		}
		if ( array_key_exists('stock_line', $elements) ) {
			unset($elements['stock_line']);
		}
		if ( array_key_exists('swatches', $elements) ) {
			unset($elements['swatches']);
		}
	}
	return $elements;
}, 10, 3);

add_filter('etheme_product_grid_list_product_taxonomies', function ($taxonomies) {
	if ( etheme_get_option( 'enable_brands', 1 ) ) {
		$taxonomies['brand'] = esc_html__( 'Brands', 'xstore' );
	}
    return $taxonomies;
});
// insert quick view in specific position after cart
//	add_filter('etheme_product_grid_list_product_hover_elements_render', function ($elements) {
//	    if ( array_key_exists('quick_view', $elements) && count($elements) > 1 ) {
//	        $quick_view = $elements['quick_view'];
//	        unset($elements['quick_view']);
//		    array_splice( $elements, 1, 0, $quick_view );
//        }
//	    return $elements;
//    });
//}, 9);

// Posts widget
add_filter('etheme_posts_post_meta_data', function ($meta) {
	$excerpt_position = array_search('comments', array_keys($meta));
	if ( $excerpt_position ) {
		$meta = array_slice( $meta, 0, $excerpt_position, true ) +
		            array( 'views' => esc_html__( 'Views', 'xstore' ) ) +
		            array_slice( $meta, $excerpt_position, count( $meta ) - $excerpt_position, true );
	}
	else {
		$meta['views'] = esc_html__( 'Views', 'xstore' );
	}
    return $meta;
}, 10);

add_action('etheme_posts_post_meta_data_render', function ($key, $meta, $post_id) {
    if ( $key == 'views') {
	    $number = get_post_meta( $post_id, '_et_views_count', true );
	    if( empty($number) ) $number = 0;
	    echo '<span class="etheme-post-views-count">' .
             '<a href="'.get_permalink($post_id).'">'.
            (get_theme_mod('bold_icons', 0) ? '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="currentColor">
                <path d="M20.52 8.592v0c-4.728-4.704-12.384-4.704-17.088 0l-3.384 3.36 3.456 3.456c2.28 2.28 5.328 3.552 8.568 3.552s6.288-1.248 8.568-3.552l3.312-3.36-3.432-3.456zM12 8.376c1.992 0 3.624 1.632 3.624 3.624s-1.632 3.624-3.624 3.624-3.624-1.608-3.624-3.624 1.632-3.624 3.624-3.624zM6.528 12c0 2.040 1.128 3.816 2.784 4.752-1.68-0.456-3.264-1.32-4.56-2.64l-2.16-2.184 2.136-2.136c1.392-1.392 3.072-2.28 4.848-2.712-1.8 0.912-3.048 2.784-3.048 4.92zM17.472 12c0-2.136-1.248-4.008-3.048-4.896 1.776 0.432 3.456 1.344 4.848 2.712l2.16 2.184-2.136 2.136c-1.344 1.32-2.952 2.208-4.656 2.664 1.68-0.936 2.832-2.736 2.832-4.8z"></path>
            </svg>' :
                '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="currentColor">
                        <path d="M20.664 8.688v0c-4.8-4.776-12.6-4.776-17.376 0l-3.288 3.264 3.36 3.36c2.328 2.328 5.4 3.6 8.712 3.6 3.288 0 6.384-1.272 8.712-3.6l3.216-3.264-3.336-3.36zM4.152 14.496l-2.52-2.544 2.496-2.496c4.344-4.344 11.4-4.344 15.744 0l2.52 2.544-2.496 2.496c-4.344 4.32-11.4 4.32-15.744 0zM12 6.648c-2.952 0-5.352 2.4-5.352 5.352s2.4 5.352 5.352 5.352c2.952 0 5.352-2.4 5.352-5.352s-2.4-5.352-5.352-5.352zM12 16.176c-2.304 0-4.176-1.872-4.176-4.176s1.872-4.176 4.176-4.176 4.176 1.872 4.176 4.176-1.872 4.176-4.176 4.176z"></path>
                    </svg>') .
             $number .
             '</a>'.
         '</span>';
    }
}, 10, 3);

add_filter('etheme_product_grid_list_product_new_label', '__return_true');
add_filter('etheme_product_grid_list_product_hot_label', '__return_true');

add_filter('etheme_product_meta_elements', function ($elements) {
    $elements['et_gtin'] = esc_html__('GTIN', 'xstore');
    if ( get_theme_mod('enable_brands', true) )
        $elements['et_brand'] = esc_html__('Brand', 'xstore');
    return $elements;
});

// check if core is enabled because it uses functions from core plugin
if ( defined('ET_CORE_VERSION') ) {
    // Lazyload Elementor widgets
	add_filter( 'elementor/widget/render_content', 'etheme_ajaxify_elementor_widgets', PHP_INT_MAX, 2 );
}

add_action( 'elementor/element/common/_section_style/before_section_start', function( $element, $args ) {
    
    $element->start_controls_section(
        'etheme_section_lazy_load',
        array(
            'label'     => sprintf(__( '%s Ajaxify', 'xstore' ), apply_filters('etheme_theme_label', 'XSTORE')),
            'tab'       => \Elementor\Controls_Manager::TAB_ADVANCED,
        )
    );
    
    $element->add_control(
        'etheme_ajaxify',
        [
            'label' => __('Lazy Loading', 'xstore'),
            'type' => \Elementor\Controls_Manager::SWITCHER,
        ]
    );
    
    $element->end_controls_section();
    
}, 10, 2);

/**
 * Filter for Elementor render callback to modify html output for lazyloading.
 *
 * @param $widget_content
 * @param $that
 * @return mixed|string
 *
 * @since 8.1.5
 *
 */
function etheme_ajaxify_elementor_widgets($widget_content, $that){
	if (defined('DOING_ETHEME_AJAXIFY') || \Elementor\Plugin::$instance->editor->is_edit_mode() || isset($_GET['et_ajax']) || !apply_filters('etheme_ajaxify_elementor_widget', true, $that)){
		return $widget_content;
	}
	$data = $that->get_data();
	if ( isset($data['settings']['etheme_ajaxify']) && $data['settings']['etheme_ajaxify'] == 'yes' ){
	    add_filter('etheme_ajaxify_script', '__return_true');
		// in case our old ajax option is enabled then make is false to use our new ajax loading action
		if ( isset($data['settings']['ajax']) && in_array($data['settings']['ajax'], array('true', 'yes'))) {
			$data['settings']['ajax'] = false;
		}
		$widget_content = '<span class="etheme-ajaxify-lazy-wrapper etheme-ajaxify-replace" data-type="elementor" data-request="'.etheme_encoding(json_encode(array('elementor', get_the_ID(), etheme_ajaxify_set_lazyload_buffer($data)))).'">' . '</span>';
	}
	return $widget_content;
}


add_action('wp', function () {
    if (is_404() || is_search()) {
        add_filter('etheme_ajaxify_elementor_widget', '__return_false');
    }
});

add_action( 'elementor/frontend/widget/before_render', 'etheme_elementor_before_render', 10 );

// to apply filter for all products widgets which will be loaded with Elementor
function etheme_elementor_before_render($widget) {
	if ( get_theme_mod('product_variable_price_from', false) ) {
		add_filter( 'woocommerce_format_price_range', function ( $price, $from, $to ) {
			return sprintf( '%s %s', esc_html__( 'From:', 'xstore' ), wc_price( $from ) );
		}, 10, 3 );
	}
}

function etheme_elementor_woocommerce_before_shop_loop() {
    if ( !apply_filters('etheme_shop_top_toolbar_enabled', true) ) return;
    if ( get_theme_mod( 'top_toolbar', 1 ) && !wc_get_loop_prop( 'is_shortcode' ) ) {
        etheme_enqueue_style('filter-area', true ); ?>
        <div class="filter-wrap">
        <div class="filter-content">
    <?php }
}

function etheme_elementor_woocommerce_after_shop_loop() {
    if ( !apply_filters('etheme_shop_top_toolbar_enabled', true) ) return;
    if ( get_theme_mod( 'top_toolbar', 1 ) && !wc_get_loop_prop( 'is_shortcode' ) ) { ?>
        </div>
        </div>
    <?php }
}
function etheme_elementor_product_archive_filters_wrapper($remove = false) {
    if ( $remove ) {
        remove_action('woocommerce_before_shop_loop', 'etheme_elementor_woocommerce_before_shop_loop', 0);
        remove_action('woocommerce_before_shop_loop', 'etheme_elementor_woocommerce_after_shop_loop', 45);
    }
    else {
        add_action('woocommerce_before_shop_loop', 'etheme_elementor_woocommerce_before_shop_loop', 0);
        add_action('woocommerce_before_shop_loop', 'etheme_elementor_woocommerce_after_shop_loop', 45);
    }
}

add_action('elementor/theme/before_do_archive', function () {
    if ( \Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
        // force load css for pagination in editor mode
        etheme_enqueue_style('pagination');
    }
});
// disable Built-in compare/wishlist displayed on Single product templates
add_action('elementor/theme/before_do_single', function () {
    // disable default adding to single product let's use it as separate widget
    $actions_list = array(
        'etheme_sticky_cart_enabled',
        'xstore_compare_print_single_product_button',
        'xstore_wishlist_print_single_product_button',
        'xstore_waitlist_print_single_product_button',
        'etheme_sales_booster_safe_checkout',
        'etheme_sales_booster_estimated_delivery',
        'etheme_sales_booster_quantity_discounts'
    );
    foreach ($actions_list as $action) {
        add_filter($action, '__return_false');
    }
    if ( get_query_var('et_product-advanced-stock', false) ) {
        remove_filter( 'woocommerce_get_stock_html', 'etheme_advanced_stock_status_html', 2, 10);
    }

    if (! etheme_get_option( 'show_single_stock', 0 )){
        remove_filter( 'woocommerce_get_stock_html', '__return_empty_string', 2, 100);
    }
    remove_action( 'after_page_wrapper', 'etheme_sticky_add_to_cart', 1 );
//    if ( \Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
//        etheme_enqueue_style('single-product-elements');
//    }
//    add_filter( "pre_option_etheme_single_product_builder", function($option) {
//        return true;
//    } );
});
add_action('elementor/theme/after_do_single', function () {
    $actions_list = array(
        'etheme_sticky_cart_enabled',
        'xstore_compare_print_single_product_button',
        'xstore_wishlist_print_single_product_button',
        'xstore_waitlist_print_single_product_button',
        'etheme_sales_booster_safe_checkout',
        'etheme_sales_booster_estimated_delivery',
        'etheme_sales_booster_quantity_discounts'
    );
    foreach ($actions_list as $action) {
        remove_filter($action, '__return_false');
    }
});

add_action('woocommerce_after_template_part', function ($template_name, $template_path, $located, $args) {
    switch (basename($template_name)) {
        case 'related.php':
        case 'cross-sells.php':
            if ( wc_get_loop_prop( 'etheme_default_elementor_products_widget', false ) ) {
                wc_set_loop_prop('etheme_default_elementor_products_widget', false);
            }
            break;
            default;
    }
}, 10, 4);

add_filter('elementor/widgets/wordpress/widget_args', function ($args, $widget) {
    $widget_instance = $widget->get_widget_instance();
    $args['before_title'] = apply_filters('etheme_sidebar_before_title', '<h4 class="widget-title"><span>' );
    $args['after_title'] = apply_filters('etheme_sidebar_after_title', '</span></h4>');

    $args['before_widget'] = '<div id="'.$widget_instance->id_base.'" class="sidebar-widget '.$widget_instance->widget_options['classname'].'">';
    $args['after_widget'] = '</div><!-- //sidebar-widget -->';
    return $args;
}, 10, 2);
add_action( 'elementor/widget/before_render_content', function ($widget) {
    switch ($widget->get_name()) {
        case 'wc-archive-products':
        case 'woocommerce-archive-products':
            $settings = $widget->get_settings_for_display();
            if ( !!!$settings['show_filters'] ) {
                add_filter('etheme_shop_filters_enabled', '__return_false');
            }
            if ( !!!$settings['show_grid_list'] ) {
                add_filter('etheme_grid_list_switcher_enabled', '__return_false');
            }
            if ( !!!$settings['show_per_page_select'] ) {
                add_filter('etheme_products_per_page_select_enabled', '__return_false');
            }
            if ( !!!$settings['show_filters'] && !!!$settings['show_grid_list'] && !!!$settings['show_per_page_select'] && !!!$settings['allow_order'] ) {
                add_filter('etheme_shop_top_toolbar_enabled', '__return_false');
            }
//            if ( \Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
                etheme_elementor_product_archive_filters_wrapper(true);
                etheme_elementor_product_archive_filters_wrapper();
                // fix pagination links
//                add_filter('etheme_elementor_theme_builder', '__return_true');
                if ( \Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
                    // force filter pagination args in editor
                    add_filter('woocommerce_pagination_args', 'et_woocommerce_pagination');
                }
//            }
            break;
        case 'woocommerce-product-add-to-cart':
            remove_action('woocommerce_before_quantity_input_field', 'et_quantity_minus_icon');
            remove_action('woocommerce_after_quantity_input_field', 'et_quantity_plus_icon');
            add_action('woocommerce_before_quantity_input_field', 'et_quantity_minus_icon');
            add_action('woocommerce_after_quantity_input_field', 'et_quantity_plus_icon');
            if ( get_theme_mod( 'buy_now_btn', 0 ) ) {
//                $settings = $widget->get_settings_for_display();
                remove_action('woocommerce_after_add_to_cart_button', 'etheme_buy_now_btn', 10);
                add_action('woocommerce_after_add_to_cart_button', 'etheme_buy_now_btn', 4);
            }
            break;
        case 'woocommerce-product-related':
            $settings = $widget->get_settings_for_display();
            if ( \Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
                if ( $settings['et_type'] == 'slider' ) {
                    add_filter('related_slides_slider_args', function ($slider_args) {
                        $slider_args['is_preview'] = true;
                        return $slider_args;
                    });
                }
            }
            add_filter('related_limit', function($value) use ($settings) {
                return $settings['posts_per_page'] ? $settings['posts_per_page'] : $value;
            });
            add_filter('related_slides' ,function($value) use ($settings) {
               return wp_parse_args(array(
                   'large' => $settings['columns'],
                   'notebook' => $settings['columns'],
                   'tablet_land'     => $settings['columns_tablet'],
                   'tablet_portrait' => $settings['columns_mobile']
               ), $value);
            });
            add_filter('related_columns', function($value) use ($settings) {
                return $settings['columns'];
            });
            add_filter('related_type', function($value) use ($settings) {
                return $settings['et_type'];
            });
            if ( $settings['show_heading'] != 'yes')
                add_filter('woocommerce_product_related_products_heading', '__return_false');
            if ( $settings['et_type'] == 'grid' ) {
                wc_set_loop_prop( 'etheme_default_elementor_products_widget', true );
            }
            break;
        case 'woocommerce-product-upsell':
            $settings = $widget->get_settings_for_display();
            if ( \Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
                if ( $settings['et_type'] == 'slider' ) {
                    add_filter('upsell_slides_slider_args', function ($slider_args) {
                        $slider_args['is_preview'] = true;
                        return $slider_args;
                    });
                }
            }
            add_filter('upsell_limit', function($value) use ($settings) {
                return $settings['posts_per_page'] ? $settings['posts_per_page'] : $value;
            });
            add_filter('upsell_slides' ,function($value) use ($settings) {
                return wp_parse_args(array(
                    'large' => $settings['columns'],
                    'notebook' => $settings['columns'],
                    'tablet_land'     => $settings['columns_tablet'],
                    'tablet_portrait' => $settings['columns_mobile']
                ), $value);
            });
            add_filter('upsell_columns', function($value) use ($settings) {
                return $settings['columns'];
            });
            add_filter('upsell_type', function($value) use ($settings) {
                return $settings['et_type'];
            });
            if ( $settings['show_heading'] != 'yes')
                add_filter('woocommerce_product_upsell_products_heading', '__return_false');

            if ( $settings['et_type'] == 'grid' ) {
                wc_set_loop_prop( 'etheme_default_elementor_products_widget', true );
            }
            break;
        case 'woocommerce-product-images':
            if ( \Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
                add_filter('etheme_should_reinit_swiper_script', '__return_true');
                add_filter('etheme_elementor_edit_mode', '__return_true');
//                add_filter( "pre_option_etheme_single_product_builder", function($option) {
//                    return true;
//                } );
            }
            break;
        case 'woocommerce-cart':
            add_filter('etheme_elementor_cart_page', '__return_true');
            remove_action('woocommerce_before_quantity_input_field', 'et_quantity_minus_icon');
            remove_action('woocommerce_after_quantity_input_field', 'et_quantity_plus_icon');
            add_action('woocommerce_before_quantity_input_field', 'et_quantity_minus_icon');
            add_action('woocommerce_after_quantity_input_field', 'et_quantity_plus_icon');
            break;
        case 'woocommerce-checkout-page':
            add_filter('etheme_elementor_checkout_page', '__return_true');
            break;
        default:
            break;
    }
}, 10 );

add_action( 'elementor/element/after_section_end', function( $widget, $section_id, $args ) {
    $widget_name = $widget->get_name();
    switch ($widget_name) {
        case 'mega-menu':
            if ( in_array($section_id, array('menu_toggle_section')) ) {
                $widget->start_injection([
                    'type' => 'section',
                    'at' => 'start',
                    'of' => 'menu_toggle_section',
                ]);
                $widget->add_control(
                    'custom_option',
                    [
                        'label' => esc_html__('Breakpoint', 'xstore'),
                        'type' => \Elementor\Controls_Manager::SELECT,
                        'description' => esc_html__('Note: Item layout will switch to dropdown on any screen smaller than the selected breakpoint.', 'xstore'),
                        'options' => array(
                            'class1' => 'class 01',
                            'class2' => 'class 02',
                        ),
                        'default' => 'class2',
                        'prefix_class' => 'e-n-menu-class-',
                        'frontend_available' => true,
                    ]
                );
                $widget->end_injection();
            }
            break;
        case 'woocommerce-product-related':
        case 'woocommerce-product-upsell':
        $options_2_update = array(
            'show_heading' => [
                'render_type' => 'template',
            ],
            'heading_color' => [
                'default' => get_theme_mod( 'dark_styles', false ) ? '#ffffff' : '#222222',
                'selectors' => ['.woocommerce {{WRAPPER}}.elementor-wc-products .products-title' => 'color: {{VALUE}}']
            ],
            'heading_typography' => [
                'selector' => '.woocommerce {{WRAPPER}}.elementor-wc-products .products-title'
            ],
            'heading_text_align' => [
                'selectors' => ['.woocommerce {{WRAPPER}}.elementor-wc-products .products-title' => 'text-align: {{VALUE}}']
            ],
            'heading_spacing' => [
                'selectors' => ['.woocommerce {{WRAPPER}}.elementor-wc-products .products-title' => 'margin-bottom: {{SIZE}}{{UNIT}}']
            ],
        );

            $typography = get_theme_mod('headings', array());
            if ( isset($typography['font-family']) && !empty($typography['font-family'])) {
                $fonts_list = \Elementor\Fonts::get_fonts();
                if (array_key_exists($typography['font-family'], $fonts_list)) {
                    $options_2_update['heading_typography_typography'] = [
                        'default' => 'custom'
                    ];
                    $options_2_update['heading_typography_font_family'] = [
                        'default' => $typography['font-family']
                    ];
                    $options_2_update['heading_typography_font_weight'] = [
                        'default' => $typography['font-weight']
                    ];
                }
            }
        foreach ($options_2_update as $option_2_update_key => $option_2_update_value ) {
            $widget->update_control($option_2_update_key, $option_2_update_value);
        }
        foreach ($widget->get_controls() as $widget_control_key => $widget_control_value) {
            if ( array_key_exists('selectors', $widget_control_value) && !array_key_exists('et_updated', $widget_control_value)) {
                $selectors = $widget_control_value['selectors'];
                $selectors_ready = array();
                foreach($selectors as $selector_key => $selector_value) {
                    $selectors_ready[str_replace(array('ul.products li.product', '.products > h2'), array('.product', '.products-title'), $selector_key)] = $selector_value;
                }
                $widget->update_control($widget_control_key, [
                    'selectors' => $selectors_ready
                ]);
            }
        }

        // update all widget with default woocommerce ul.products .product to .product
        foreach ($widget->get_controls() as $widget_control_key => $widget_control_value) {
            if ( array_key_exists('selectors', $widget_control_value)) {
                $selectors = $widget_control_value['selectors'];
                $selectors_ready = array();
                foreach($selectors as $selector_key => $selector_value) {
                    $selectors_ready[str_replace('ul.products li.product', '.product', $selector_key)] = $selector_value;
                }
                $widget->update_control($widget_control_key, [
                    'selectors' => $selectors_ready,
                    'et_updated' => true
                ]);
            }
        }
        $dark_mode = get_theme_mod( 'dark_styles', false );
        $active_color = get_theme_mod('activecol', '#a4004f');
        foreach (array(
                     'columns' => [
                         'render_type' => 'template',
                     ],
                     'title_color' => [
                         'default' => $dark_mode ? '#ffffff' : '#222222',
                         'selectors' => [
                             '{{WRAPPER}}.elementor-wc-products .product .product-title a' => 'color: {{VALUE}}',
                         ]
                     ],
                     'title_typography_typography' => [
                         'default' => 'custom'
                     ],
                     'title_typography' => [
                         'selector' => '{{WRAPPER}}.elementor-wc-products .product .product-title',
                     ],
                     'title_spacing' => [
                         'selectors' => [
                             '{{WRAPPER}}.elementor-wc-products .product .product-title' => 'margin-bottom: {{SIZE}}{{UNIT}}',
                         ]
                     ],
                     'price_color' => [
                        'default' => '#888888'
                     ],
                     'price_typography_typography' => [
                         'default' => 'custom'
                     ],
                     'price_typography_font_size' => [
                         'default' => [
                             'size' => '',
                             'unit' => 'rem'
                         ]
                     ],
                     'price_typography_font_weight' => [
                         'default' => 'normal'
                     ],
                     'old_price_color' => [
                         'default' => $active_color
                     ],
                     'old_price_typography_typography' => [
                         'default' => 'custom'
                     ],
                     'old_price_typography_font_size' => [
                         'default' => [
                             'size' => '',
                             'unit' => 'rem'
                         ]
                     ],
                     'old_price_typography_font_weight' => [
                         'default' => 'normal'
                     ],
                     'align' => [
                         'selectors' => ['{{WRAPPER}}.elementor-wc-products .product .product-details' => 'text-align: {{VALUE}}']
                     ],
                     'automatically_align_buttons' => [
                         'type' => \Elementor\Controls_Manager::HIDDEN,
                     ],
                     'column_gap' => [
                         'condition' => [
                             'et_type' => 'grid',
                         ],
                     ],
                     'row_gap' => [
                         'condition' => [
                             'et_type' => 'grid',
                         ],
                     ])
                 as $option_2_update_key => $option_2_update_value ) {
            $widget->update_control($option_2_update_key, $option_2_update_value);
        }

        $widget->remove_control('wc_style_warning');

        if ( in_array($section_id, array('section_related_products_content', 'section_upsell_content')) ) {
            $widget->start_injection([
                'type' => 'section',
                'at' => 'start',
                'of' => $widget_name == 'woocommerce-product-related' ? 'section_related_products_content' : 'section_upsell_content',
            ]);

            $widget->add_control(
                'et_type',
                [
                    'label' => __('Type', 'xstore'),
                    'type' => \Elementor\Controls_Manager::SELECT,
                    'default' => 'grid',
                    'options' => [
                        'grid' => __('Grid', 'xstore'),
                        'slider' => __('Slider', 'xstore'),
                    ],
                ]
            );

            if ( $widget_name == 'woocommerce-product-upsell' ) {
                $widget->add_control(
                    'posts_per_page',
                    [
                        'label' => esc_html__( 'Products Per Page', 'xstore' ),
                        'type' => \Elementor\Controls_Manager::NUMBER,
                        'default' => 4,
                        'range' => [
                            'px' => [
                                'max' => 20,
                            ],
                        ],
                    ]
                );
            }

            $widget->end_injection();
        }
        break;
        case 'heading':
        case 'woocommerce-product-title':
        case 'woocommerce-product-etheme_title': // own one
        case 'theme-site-title':
        case 'theme-page-title':
        case 'theme-archive-title':
        case 'theme-archive-etheme_title':
        case 'theme-post-title':
        case 'theme-post-etheme_title':
            $typography = get_theme_mod('headings', array());
            $widget->update_control('title_color', [
                'default' => get_theme_mod( 'dark_styles', false ) ? '#ffffff' : '#222222'
            ]);
            if ( isset($typography['font-family']) && !empty($typography['font-family'])) {
                $fonts_list = \Elementor\Fonts::get_fonts();
                if (array_key_exists($typography['font-family'], $fonts_list)) {
                    $widget->update_control('typography_typography', [
                        'default' => 'custom'
                    ]);
                    $widget->update_control('typography_font_family', [
                        'default' => $typography['font-family']
                    ]);
                }
            }
            if ( $widget_name == 'woocommerce-product-title' ) {
                $widget->update_control('typography_typography', [
                    'default' => 'custom'
                ]);
                $widget->update_control('typography_font_size', [
                    'default' => [
                        'size' => '24',
                        'unit' => 'px'
                    ]
                ]);
            }
            break;
        case 'wc-archive-products':
        case 'woocommerce-archive-products':
            // use next section after button because we make injections to previous section
            if ( $section_id == 'section_products_title' ) {
                $widget->update_control(
                    'show_result_count',
                    [
                        'type' => \Elementor\Controls_Manager::HIDDEN,
                        'default' => ''
                    ]
                );

                $widget->start_injection([
                    'type' => 'control',
                    'at' => 'after',
                    'of' => 'show_result_count',
                ]);

                $widget->add_control(
                    'show_filters',
                    [
                        'label' => esc_html__('Show Filters', 'xstore'),
                        'type' => \Elementor\Controls_Manager::SWITCHER,
                        'default' => 'yes'
                    ]
                );

                $widget->add_control(
                    'show_grid_list',
                    [
                        'label' => esc_html__('Show Grid/List Switchers', 'xstore'),
                        'type' => \Elementor\Controls_Manager::SWITCHER,
                        'default' => 'yes'
                    ]
                );

                $widget->add_control(
                    'show_per_page_select',
                    [
                        'label' => esc_html__('Show Per page', 'xstore'),
                        'type' => \Elementor\Controls_Manager::SWITCHER,
                        'default' => 'yes'
                    ]
                );
                $widget->end_injection();
            }
            break;
        case 'woocommerce-product-add-to-cart':
            // use next section after button because we make injections to previous section
            if ( $section_id == 'section_atc_variations_style' ) {
                $widget->update_control(
                    'button_padding',
                    [
                        'selectors' => [
                            '{{WRAPPER}} .cart button, {{WRAPPER}} .cart .button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; height: auto;',
                        ],
                    ]
                );

//                if ( get_theme_mod( 'buy_now_btn', 0 ) ) {

                    $widget->start_injection([
                        'type' => 'control',
                        'at' => 'before',
                        'of' => 'heading_view_cart_style',
                    ]);
                    $widget->add_control(
                        'heading_button_buy_now_style',
                        [
                            'label' => esc_html__('Buy now button', 'xstore'),
                            'type' => \Elementor\Controls_Manager::HEADING,
                            'separator' => 'before',
                        ]
                    );

                    $widget->start_controls_tabs('button_buy_now_style_tabs');

                    $widget->start_controls_tab('button_buy_now_style_normal',
                        [
                            'label' => esc_html__('Normal', 'xstore'),
                        ]
                    );

                    $widget->add_control(
                        'button_buy_now_text_color',
                        [
                            'label' => esc_html__('Text Color', 'xstore'),
                            'type' => \Elementor\Controls_Manager::COLOR,
                            'selectors' => [
                                '{{WRAPPER}}' => '--single-buy-now-button-color: {{VALUE}}',
                            ],
                        ]
                    );

                    $widget->add_control(
                        'button_buy_now_bg_color',
                        [
                            'label' => esc_html__('Background Color', 'xstore'),
                            'type' => \Elementor\Controls_Manager::COLOR,
                            'selectors' => [
                                '{{WRAPPER}}' => '--single-buy-now-button-background-color: {{VALUE}}',
                            ],
                        ]
                    );

                    $widget->add_control(
                        'button_buy_now_border_color',
                        [
                            'label' => esc_html__('Border Color', 'xstore'),
                            'type' => \Elementor\Controls_Manager::COLOR,
                            'selectors' => [
                                '{{WRAPPER}} .cart .et-single-buy-now.single_add_to_cart_button.button, {{WRAPPER}} .cart .et-single-buy-now.single_add_to_cart_button.button' => 'border-color: {{VALUE}}',
                            ],
                        ]
                    );

                    $widget->end_controls_tab();

                    $widget->start_controls_tab('button_buy_now_style_hover',
                        [
                            'label' => esc_html__('Hover', 'xstore'),
                        ]
                    );

                    $widget->add_control(
                        'button_buy_now_text_color_hover',
                        [
                            'label' => esc_html__('Text Color', 'xstore'),
                            'type' => \Elementor\Controls_Manager::COLOR,
                            'selectors' => [
                                '{{WRAPPER}}' => '--single-buy-now-button-color-hover: {{VALUE}}',
                            ],
                        ]
                    );

                    $widget->add_control(
                        'button_buy_now_bg_color_hover',
                        [
                            'label' => esc_html__('Background Color', 'xstore'),
                            'type' => \Elementor\Controls_Manager::COLOR,
                            'selectors' => [
                                '{{WRAPPER}}' => '--single-buy-now-button-background-color-hover: {{VALUE}}',
                            ],
                        ]
                    );

                    $widget->add_control(
                        'button_buy_now_border_color_hover',
                        [
                            'label' => esc_html__('Border Color', 'xstore'),
                            'type' => \Elementor\Controls_Manager::COLOR,
                            'selectors' => [
                                '{{WRAPPER}} .cart .et-single-buy-now.single_add_to_cart_button.button:hover, {{WRAPPER}} .cart .et-single-buy-now.single_add_to_cart_button.button:hover' => 'border-color: {{VALUE}}',
                            ],
                        ]
                    );

                    $widget->end_controls_tab();

                    $widget->end_controls_tabs();

                    $widget->end_injection();

//                }

            }
            break;
        case 'woocommerce-product-meta':
        case 'woocommerce-product-etheme_meta': // own one
            $widget->update_control('view', [
                'default' => 'stacked'
            ]);
            $widget->update_control('link_color', [
                'selectors' => [
                    '{{WRAPPER}} a' => 'color: {{VALUE}}',
                    '{{WRAPPER}} .sku' => 'color: {{VALUE}}',
                ],
            ]);
            break;
        case 'woocommerce-product-rating':
            $widget->update_control('star_color',
                [
                'selectors' => [
                    '.woocommerce {{WRAPPER}} .star-rating span:before' => 'color: {{VALUE}}',
                ],
            ]);
            $widget->update_control('star_size', [
                'size_units' => [ 'px' ],
                'default' => [
                    'unit' => 'px',
                ],
                'selectors' => [
                    '.woocommerce {{WRAPPER}} .star-rating:before, .woocommerce {{WRAPPER}} .star-rating span:before' => 'font-size: {{SIZE}}{{UNIT}}',
                ],
            ]);
            $widget->update_control('space_between', [
                'size_units' => [ 'px', 'rem', 'custom' ],
                'default' => [
                    'unit' => 'px',
                ],
            ]);
            break;
        case 'woocommerce-product-price':
        case 'woocommerce-product-etheme_price': // own one
            $active_color = get_theme_mod('activecol', '#a4004f');
            $widget->update_control('price_color', [
                'default' => '#888888'
            ]);
            if ( $active_color ) {
                $widget->update_control('sale_price_color', [
                    'default' => $active_color
                ]);
            }
            $widget->update_control('typography_typography', [
                'default' => 'custom'
            ]);
            $widget->update_control('typography_font_size', [
                'default' => [
                    'size' => '1.4',
                    'unit' => 'rem'
                ]
            ]);
            $widget->update_control('typography_font_weight', [
                'default' => 'normal'
            ]);
            break;
        case 'woocommerce-product-stock':
        case 'woocommerce-product-etheme_stock': // own one
            $widget->start_injection([
                'type' => 'control',
                'at' => 'after',
                'of' => 'text_color',
            ]);
            $widget->add_control(
                'outofstock_text_color',
                [
                    'label' => esc_html__( 'Out Of Stock Color', 'xstore' ),
                    'type' => \Elementor\Controls_Manager::COLOR,
                    'selectors' => [
                        '.woocommerce {{WRAPPER}} .out-of-stock' => 'color: {{VALUE}}',
                    ],
                ]
            );
            $widget->end_injection();
            break;
    }
}, 10, 3);

if ( defined('ELEMENTOR_PRO_VERSION') ) {
    add_filter('etheme_product_grid_list_product_data_source', function ($sources) {
        $sources['related_products'] = esc_html__( 'Related Products', 'xstore' );
        $sources['upsells'] = esc_html__( 'Upsells Products', 'xstore' );
        $sources['cross_sells'] = esc_html__( 'Cross-sells Products', 'xstore' );
        $sources['current_query'] = esc_html__( 'Current Query', 'xstore' );
        return $sources;
    });
    add_filter('etheme_posts_grid_list_post_data_source', function ($sources) {
        $sources['related_posts'] = esc_html__( 'Related Posts', 'xstore' );
        $sources['current_query'] = esc_html__( 'Current Query', 'xstore' );
        return $sources;
    });
}

add_filter('elementor/frontend/the_content', function ($content) {
    if ( get_query_var('et_is-cart', false) ) {
        if (false !== strpos($content, 'elementor-etheme_cart_placeholder')) {
            ob_start();
                woocommerce_output_all_notices();
            $wc_forms = ob_get_clean();
            $content = $wc_forms . do_shortcode('[woocommerce_cart]');
        }
    }
    elseif ( get_query_var('et_is-checkout', false) ) {
        if ( false !== strpos($content, 'etheme-elementor-cart-checkout-page-wrapper') ) {
//        if (get_query_var('et_is-checkout-page-elementor-shortcode', false) || false !== strpos($content, 'etheme-elementor-checkout-widgets-contain')) {

            if ( function_exists( 'WC' ) && ! WC()->checkout()->is_registration_enabled() && WC()->checkout()->is_registration_required() && ! get_query_var( 'et_is-loggedin', false) ) :
                $content = wp_kses_post( apply_filters( 'woocommerce_checkout_must_be_logged_in_message', __( 'You must be logged in to checkout.', 'xstore' ) ) );
		    else :
                if ( false !== strpos($content, 'elementor-etheme_checkout_placeholder') ) {
                    $content = do_shortcode('[woocommerce_checkout]');
                }
                else {
//                    if ( get_query_var('et_is-checkout-page-elementor-shortcode', false) ) {
//
//                    }
//                    else {
//                    $container_based = \Elementor\Plugin::$instance->experiments->is_feature_active( 'container' );
                        ob_start();
                        woocommerce_output_all_notices();
//                        woocommerce_checkout_coupon_form();
//                        woocommerce_checkout_login_form();
                        $wc_forms = ob_get_clean();
//                        $wc_forms = '';
//                    if ( $container_based )
//                        $wc_forms = '<div class="e-con e-parent"><div class="e-con-inner"><div class="e-con e-child"><div>'.
//                            $wc_forms.
//                        '</div></div></div></div>';
                        $content = $wc_forms . '<form name="checkout" method="post" class="checkout woocommerce-checkout etheme-elementor-checkout-form" action="' . esc_url(wc_get_checkout_url()) . '" enctype="multipart/form-data">' .
                            $content .
                            '</form>';
//                    }
                }
            endif;
        }
    }
    return $content;
});

add_action('wp', function () {
    if ( is_admin() ) return;
    global $post;
    add_action('woocommerce_before_calculate_totals', function () {
        $document = \Elementor\Plugin::$instance->documents->get( url_to_postid( wp_get_referer() ) );

        if ( is_object( $document ) && $document->is_built_with_elementor() ) {
            $data = $document->get_elements_data();

            \Elementor\Plugin::$instance->db->iterate_data($data, function ($element) use (&$fragments) {
                if (
                    isset($element['widgetType'])
                ) {
                    switch ($element['widgetType']) {
                        case 'woocommerce-cart-etheme_page':
                        case 'woocommerce-cart-etheme_page_separated':
                            $widgets = \Elementor\Plugin::$instance->widgets_manager->get_widget_types();

                            foreach ( $widgets as $widget ) {
                                if ( $widget instanceof ETC\App\Controllers\Elementor\Theme_Builder\WooCommerce\Cart\Cart_Page ) {
                                    $stretch_shipping_totals = false;
                                    $show_return_shop_button = true;

                                    if ( isset( $element['settings']['stretch_shipping_totals'] ) ) {
                                        $stretch_shipping_totals = !!$element['settings']['stretch_shipping_totals'];
                                    }

                                    if ( isset( $element['settings']['show_return_shop_button'] ) ) {
                                        $show_return_shop_button = !!$element['settings']['show_return_shop_button'];
                                    }

                                    remove_action( 'woocommerce_proceed_to_checkout', 'etheme_woocommerce_continue_shopping', 21 );
                                    if ( $show_return_shop_button )
                                        add_action( 'woocommerce_proceed_to_checkout', 'etheme_woocommerce_continue_shopping', 21 );
                                    if ( $stretch_shipping_totals )
                                        add_filter( 'etheme_cart_shipping_full_width', '__return_true' );
                                    }

                                }
                        break;
                    }
                }
            });
        }
    });
    add_filter('woocommerce_update_order_review_fragments', function ($fragments)  {
        $document = \Elementor\Plugin::$instance->documents->get( url_to_postid( wp_get_referer() ) );

        if ( is_object( $document ) && $document->is_built_with_elementor() ) {
            $data = $document->get_elements_data();

            \Elementor\Plugin::$instance->db->iterate_data($data, function ($element) use (&$fragments) {
                $added_fragment = false;
                if (
                    isset($element['widgetType'])
                ) {
                    switch ($element['widgetType']) {
                        case 'woocommerce-checkout-etheme_page':
                        case 'woocommerce-checkout-etheme_page_separated':
                        case 'woocommerce-checkout-etheme_page_multistep':
//                        case 'woocommerce-checkout-etheme_order_review':
                            $widgets = \Elementor\Plugin::$instance->widgets_manager->get_widget_types();

                            foreach ( $widgets as $widget ) {
                                if ( $widget instanceof ETC\App\Controllers\Elementor\Theme_Builder\WooCommerce\Checkout\Checkout_Page ) {
                                    $shipping_methods_separated = false;
                                    // in some widgets we have payments separated by default
                                    if ( $element['widgetType'] == 'woocommerce-checkout-etheme_page_multistep') {
                                        $shipping_methods_separated = true;
                                    }
                                    if ( isset( $element['settings']['shipping_methods_position'] ) ) {
                                        $shipping_methods_separated = $element['settings']['shipping_methods_position'] == 'separated';
                                    }
                                    if ( $shipping_methods_separated ) {
                                        if ( !$added_fragment )
                                            $fragments['.etheme-woocommerce-shipping-methods'] = $widget->get_shipping_methods_content();
                                        $added_fragment = true;
                                    }
                                }
                            }
                            break;
                    }
                }
            });
        }
        return $fragments;
    });
    add_action('woocommerce_checkout_update_order_review', function ($data) use ($post) {
        $document = \Elementor\Plugin::$instance->documents->get( url_to_postid( wp_get_referer() ) );

        if ( is_object( $document ) && $document->is_built_with_elementor() ) {
            $data = $document->get_elements_data();

            \Elementor\Plugin::$instance->db->iterate_data($data, function ($element) {
                if (
                    isset($element['widgetType'])
                ) {
                    switch ($element['widgetType']) {
                        case 'woocommerce-checkout-etheme_page':
                        case 'woocommerce-checkout-etheme_page_separated':
                        case 'woocommerce-checkout-etheme_page_multistep':
                        case 'woocommerce-checkout-etheme_order_review':
                        add_filter('etheme_checkout_order_review_product_details_one_column', '__return_true');
                        add_filter('theme_mod_cart_checkout_advanced_layout', '__return_false');
                        $shipping_methods_separated = false;
                        // in some widgets we have payments separated by default
                        if ( $element['widgetType'] == 'woocommerce-checkout-etheme_page_multistep') {
                            $shipping_methods_separated = true;
                            add_filter('etheme_checkout_form_shipping_methods_wrapper_classes', function ($classes) {
                                $classes[] = 'design-type-multistep';
                                return $classes;
                            });
                        }
                        if ( isset( $element['settings']['shipping_methods_position'] ) ) {
                            $shipping_methods_separated = $element['settings']['shipping_methods_position'] == 'separated';
                        }
                        if ( $shipping_methods_separated ) {
                            add_filter('etheme_checkout_form_shipping_methods', '__return_false');
                        }
                        add_action('woocommerce_review_order_before_submit', function () {
                            ?>
                            <div class="etheme-before-place-order-button">
                            <?php
                        }, 999);
                        add_action('woocommerce_review_order_after_submit', function () {
                            ?>
                            </div>
                            <?php
                        }, 999);
                        $order_review_features = array(
                            'etheme_checkout_order_review_product_images' => 'yes', // default value
                            'etheme_checkout_order_review_product_quantity' => 'yes', // default value
                            'etheme_checkout_order_review_product_remove' => '',
                            'etheme_checkout_order_review_product_link' => '',
                            'etheme_checkout_order_review_product_subtotal' => 'yes', // default value
                        );
                        foreach ($order_review_features as $order_review_feature => $order_review_feature_default_value) {
                            $order_review_feature_key = str_replace('etheme_checkout_', '', $order_review_feature);
                            if ( (!isset( $element['settings'][$order_review_feature_key] ) && !!$order_review_feature_default_value ) ||
                                (isset($element['settings'][$order_review_feature_key]) && !!$element['settings'][$order_review_feature_key] ) ) {
                                add_filter($order_review_feature, '__return_true');
                                if ( $order_review_feature_key == 'order_review_product_quantity' ) {
                                    if ( isset($element['settings']['order_review_product_quantity_style']) && $element['settings']['order_review_product_quantity_style'] != '' ) {
                                        add_filter($order_review_feature . '_style', function ($value) use ($element) {
                                            $quantity_style = $element['settings']['order_review_product_quantity_style'];
                                            if ( !$quantity_style )
                                                $quantity_style = 'square';
                                            return $quantity_style;
                                        });
                                        $quantity_input = !in_array($element['settings']['order_review_product_quantity_style'], array('', 'select'));
                                        if ($quantity_input) {
                                            add_filter('theme_mod_shop_quantity_type', function () {
                                                return 'input';
                                            });
                                        }
                                    }
                                    // could be later as an option
                                    //if ( isset($element['settings']['order_review_product_quantity_size']) && $element['settings']['order_review_product_quantity_size'] != '' ) {
                                        add_filter($order_review_feature . '_size', function ($value) use ($element) {
                                            return 'size-sm';
                                        });
                                    //}
                                }
                            }
                            else
                                add_filter($order_review_feature, '__return_false');
                        }
                            break;
                    }
                }
            });
        }
    });
});

// auto-update elementor support for customers after theme update
if ( !get_option('etheme_elementor_cpt_support_9_2_6', false) ) {
    $elementor_cpt_support = get_option( 'elementor_cpt_support' );
    if (!is_array($elementor_cpt_support)){
        $elementor_cpt_support = array('post', 'page', 'staticblocks', 'etheme_slides', 'testimonials', 'etheme_portfolio', 'product');
    } else {
        $elementor_cpt_support[] = 'etheme_slides';
    }
    update_option('elementor_cpt_support', $elementor_cpt_support);
    update_option('etheme_elementor_cpt_support_9_2_6', true);
}

// auto-update elementor support for customers after theme update
if ( !get_option('etheme_elementor_cpt_support_9_2_7', false) ) {
    $elementor_cpt_support = get_option( 'elementor_cpt_support' );
    if (!is_array($elementor_cpt_support)){
        $elementor_cpt_support = array('post', 'page', 'staticblocks', 'etheme_slides', 'etheme_mega_menus', 'testimonials', 'etheme_portfolio', 'product');
    } else {
        $elementor_cpt_support[] = 'etheme_mega_menus';
    }
    update_option('elementor_cpt_support', $elementor_cpt_support);
    update_option('etheme_elementor_cpt_support_9_2_7', true);
}

// use next placeholder content for AJAX filter replacement of existing description with the new one
add_filter('elementor-woocommerce-archive-etheme_description_placeholder', function ($placeholder_content) {
    if ( get_theme_mod( 'ajax_product_filter', 0 ) )
        return '<div class="screen-reader-text elementor-etheme_woocommerce_archive_placeholder">'.esc_html__('Placeholder for ajax description replacement', 'xstore').'</div>';
    return $placeholder_content;
});

// ADDED: Compatibility Single product builder with YITH WooCommerce Dynamic Pricing & Discounts Premium ( https://yithemes.com/themes/plugins/yith-woocommerce-dynamic-pricing-and-discounts/ )
add_filter('ywdpd_column_product_info_class', function($class) {
    if ( defined('ELEMENTOR_PRO_VERSION') )
        $class .= ', .elementor-location-single';
    return $class;
}, 99);

// ADDED: Compatibility with WooCommerce Germanized plugin of Products grid/list/carousel widgets
if ( class_exists('WooCommerce_Germanized') ) {
    /**
     * Product Loop
     */
    foreach ( wc_gzd_get_product_loop_shopmarks() as $shopmark ) {
        $filter = $shopmark->get_filter();
        $should_execute = true;
        $location = $shopmark->get_location();
        $type     = $shopmark->get_type();
        $wc_gzd_filter = "woocommerce_gzd_shopmark_{$location}_{$type}_";
        $new_filter = false;

        switch($filter) {
            case 'woocommerce_after_shop_loop_item_title':
                $new_filter = 'after_etheme_product_grid_list_product_element_price';
                break;
            case 'woocommerce_before_shop_loop_item_title':
                $new_filter = 'before_etheme_product_grid_list_product_element_title';
                break;
            case 'woocommerce_shop_loop_item_title':
                $new_filter = 'after_etheme_product_grid_list_product_element_title';
                break;
            case 'woocommerce_after_shop_loop_item':
                $new_filter = 'etheme_product_grid_list_after_product_item_content';
                break;
            default:
                $should_execute = false;
                break;
        }
        if ( $new_filter && $should_execute ) {
            add_filter($wc_gzd_filter."filter", function($old_filter) use ($new_filter) {
                return $new_filter;
            });
            $shopmark->execute();
        }
    }
}

LittleDemon - FACEBOOK
[ KELUAR ]