Home Forums WoodMart support forum Shop Grid – Alternating Design 3-2-3, 4-3-4, 5-4-5, 6-5-6

Shop Grid – Alternating Design 3-2-3, 4-3-4, 5-4-5, 6-5-6

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #162826

    newsprince
    Participant

    To XTEMOS Team and Artem Temos

    Based on the Feature Requests from @pacman1917

    I rewrote the Shop > Products Styles > Products grid with different sizes function
    creating the feature request pacman1917 wrote

    Please consider adding shop layout with mixed number of product per row, e.g. 3-4-3 and working with all product layouts. Like here – https://newnorth.fuelthemes.net/north-jewellery/shop/?shop_product_listing=style1

    This allow to do the alternating repeated pattern design in grid view

    3-2-3 for 3 column selected

    4-3-4 for 4 column selected

    5-4-5 for 5 column selected

    6-5-6 for 6 column selected

    I attach a screen recording bellow to see (on our demo environment)

    https://recordit.co/pMz87dsHfP

    Please review the code below and maybe implement it in a future release.

    Thank you.

    For anyone who wants to try it. Replace the code inside /wp-content/themes/woodmart/inc/integrations/woocommerce/functions.php
    with the one below

    <?php if ( ! defined( 'WOODMART_THEME_DIR' ) ) {
    	exit( 'No direct script access allowed' );
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Main loop
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_woocommerce_main_loop' ) ) {
    
    	add_action( 'woodmart_woocommerce_main_loop', 'woodmart_woocommerce_main_loop' );
    
    	function woodmart_woocommerce_main_loop( $fragments = false ) {
    		global $paged, $wp_query;
    
            $max_page = $wp_query->max_num_pages;
    
     		if ( $fragments ) ob_start();
    		
    		if ( $fragments && isset( $_GET['loop'] ) ) woodmart_set_loop_prop( 'woocommerce_loop', (int) sanitize_text_field( $_GET['loop'] ) );
    		
    		if ( woocommerce_product_loop() ) : ?>
    			
    			<?php if( ! $fragments ) woocommerce_product_loop_start(); ?>
    			
    			<?php if ( wc_get_loop_prop( 'total' ) || $fragments ): ?>
    				<?php while ( have_posts() ) : the_post(); ?>
    					
    					<?php
    					/**
    					 * Hook: woocommerce_shop_loop.
    					 *
    					 * @hooked WC_Structured_Data::generate_product_data() - 10
    					 */
    					do_action( 'woocommerce_shop_loop' );?>
    
    					<?php wc_get_template_part( 'content', 'product' ); ?>
    
    				<?php endwhile; // end of the loop. ?>
    			<?php endif; ?>
    			
    
    			<?php if( ! $fragments ) woocommerce_product_loop_end(); ?>
    
    			<?php
    				/**
    				 * woocommerce_after_shop_loop hook
    				 *
    				 * @hooked woocommerce_pagination - 10
    				 */
    				if( ! $fragments ) do_action( 'woocommerce_after_shop_loop' );
    			?>
    
    		<?php else: ?>
    			
    			<?php
    			/**
    			 * Hook: woocommerce_no_products_found.
    			 *
    			 * @hooked wc_no_products_found - 10
    			 */
    			do_action( 'woocommerce_no_products_found' ); ?>
    
    		<?php endif;
    
    		if ( $fragments ) $output = ob_get_clean();
    
    	    if( $fragments ) {
    	    	$output =  array(
    	    		'items' => $output,
    	    		'status' => ( $max_page > $paged ) ? 'have-posts' : 'no-more-posts',
    	    		'nextPage' => str_replace( '&', '&', next_posts( $max_page, false ) )
    	    	);
    
    	    	echo json_encode( $output );
    	    }
    	}
    }
    /**
     * ------------------------------------------------------------------------------------------------
     * Change number of products displayed per page
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_shop_products_per_page' ) ) {
    	function woodmart_shop_products_per_page() {
    		$per_page = 12;
    		$number = apply_filters('woodmart_shop_per_page', woodmart_get_products_per_page() );
    		if( is_numeric( $number ) ) {
    			$per_page = $number;
    		}
    		return $per_page;
    	}
    
    	add_filter( 'loop_shop_per_page', 'woodmart_shop_products_per_page', 20 );
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Set full width layouts for woocommerce pages on set up
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_woocommerce_install_actions' ) ) {
    	function woodmart_woocommerce_install_actions() {
    		if ( isset( $_GET['page'] ) && ! empty( $_GET['page'] ) && $_GET['page'] == 'wc-setup' && isset( $_GET['step'] ) && ! empty( $_GET['step'] ) && $_GET['step'] == 'next_steps') {
    			$pages = apply_filters( 'woocommerce_create_pages', array(
    				'cart' => array(
    					'name'    => _x( 'cart', 'Page slug', 'woodmart' ),
    					'title'   => _x( 'Cart', 'Page title', 'woodmart' ),
    					'content' => '[' . apply_filters( 'woocommerce_cart_shortcode_tag', 'woocommerce_cart' ) . ']'
    				),
    				'checkout' => array(
    					'name'    => _x( 'checkout', 'Page slug', 'woodmart' ),
    					'title'   => _x( 'Checkout', 'Page title', 'woodmart' ),
    					'content' => '[' . apply_filters( 'woocommerce_checkout_shortcode_tag', 'woocommerce_checkout' ) . ']'
    				),
    			) );
    
    			foreach ( $pages as $key => $page ) {
    				$option = 'woocommerce_' . $key . '_page_id';
    				$page_id = get_option( $option );
    				update_post_meta( $page_id, '_woodmart_main_layout', 'full-width' );
    			}
    
    			woodmart_woocommerce_image_dimensions();
    		}
    	}
    
    	add_action( 'admin_init', 'woodmart_woocommerce_install_actions', 1000);
    	add_action( 'admin_print_styles', 'woodmart_woocommerce_install_actions', 1000);
    }
    
    /**
     * Define image sizes
     */
    if( ! function_exists( 'woodmart_woocommerce_image_dimensions' ) ) {
    	function woodmart_woocommerce_image_dimensions() {
    		global $pagenow;
    	 
    		update_option( 'woocommerce_single_image_width', '1200' ); 		// Single product image
    		update_option( 'woocommerce_thumbnail_image_width', '600' ); 	// Gallery and catalog image
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Get base shop page link
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_shop_page_link' ) ) {
    	function woodmart_shop_page_link( $keep_query = false, $taxonomy = '' ) {
    		// Base Link decided by current page
    		if ( woodmart_is_shop_on_front() ) {
    			$link = home_url();
    		} elseif ( is_post_type_archive( 'product' ) || is_page( wc_get_page_id('shop') ) ) {
    			$link = get_post_type_archive_link( 'product' );
    		} elseif( is_product_category() ) {
    			$link = get_term_link( get_query_var('product_cat'), 'product_cat' );
    		} elseif( is_product_tag() ) {
    			$link = get_term_link( get_query_var('product_tag'), 'product_tag' );
    		} else {
    			$link = get_term_link( get_query_var('term'), get_query_var('taxonomy') );
    		}
    
    		if( $keep_query ) {
    
    			// Min/Max
    			if ( isset( $_GET['min_price'] ) ) {
    				$link = add_query_arg( 'min_price', wc_clean( $_GET['min_price'] ), $link );
    			}
    
    			if ( isset( $_GET['max_price'] ) ) {
    				$link = add_query_arg( 'max_price', wc_clean( $_GET['max_price'] ), $link );
    			}
    
    			// Orderby
    			if ( isset( $_GET['orderby'] ) ) {
    				$link = add_query_arg( 'orderby', wc_clean( $_GET['orderby'] ), $link );
    			}
    
    			/**
    			 * Search Arg.
    			 * To support quote characters, first they are decoded from &quot; entities, then URL encoded.
    			 */
    			if ( get_search_query() ) {
    				$link = add_query_arg( 's', rawurlencode( wp_specialchars_decode( get_search_query() ) ), $link );
    			}
    
    			// Post Type Arg
    			if ( isset( $_GET['post_type'] ) ) {
    				$link = add_query_arg( 'post_type', wc_clean( $_GET['post_type'] ), $link );
    			}
    
    			// Min Rating Arg
    			if ( isset( $_GET['min_rating'] ) ) {
    				$link = add_query_arg( 'min_rating', wc_clean( $_GET['min_rating'] ), $link );
    			}
    
    			// All current filters
    			if ( $_chosen_attributes = WC_Query::get_layered_nav_chosen_attributes() ) {
    				foreach ( $_chosen_attributes as $name => $data ) {
    					if ( $name === $taxonomy ) {
    						continue;
    					}
    					$filter_name = sanitize_title( str_replace( 'pa_', '', $name ) );
    					if ( ! empty( $data['terms'] ) ) {
    						$link = add_query_arg( 'filter_' . $filter_name, implode( ',', $data['terms'] ), $link );
    					}
    					if ( 'or' == $data['query_type'] ) {
    						$link = add_query_arg( 'query_type_' . $filter_name, 'or', $link );
    					}
    				}
    			}
    		}
    
    		if ( is_string( $link ) ) {
    			return $link;
    		} else {
    			return '';
    		}
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Get product design option
     * ------------------------------------------------------------------------------------------------
     */
    
    if ( ! function_exists( 'woodmart_product_design' ) ) {
    	function woodmart_product_design() {
    		$design = woodmart_get_opt( 'product_design' );
    		if( is_singular( 'product' ) ) {
    			$custom = get_post_meta( get_the_ID(), '_woodmart_product_design', true );
    			if( ! empty( $custom ) && $custom != 'inherit' ) $design = $custom;
    		}
    
    		return $design;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Is product sticky
     * ------------------------------------------------------------------------------------------------
     */
    
    if ( ! function_exists( 'woodmart_product_sticky' ) ) {
    	function woodmart_product_sticky() {
    		$sticky = woodmart_get_opt( 'product_sticky' ) && in_array( woodmart_get_opt( 'single_product_style' ), array( 1, 2, 3 ) ) ? true : false;
    		if( is_singular( 'product' ) ) {
    			$custom = get_post_meta( get_the_ID(), '_woodmart_product_sticky', true );
    			if( ! empty( $custom ) && $custom != 'inherit' ) $sticky = $custom;
    		}
    
    		return $sticky;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Register new image size two times larger than standard woocommerce one
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_add_image_size' ) ) {
    	add_action( 'after_setup_theme', 'woodmart_add_image_size' );
    	
    	function woodmart_add_image_size() {
    		
    		if( ! function_exists( 'wc_get_image_size' ) ) return;
    		
    		$shop_catalog = wc_get_image_size( 'woocommerce_thumbnail' );
    		
    		$width = (int) ( $shop_catalog['width'] * 2 );
    		$height = ( !empty( $shop_catalog['height'] ) ) ? (int) ( $shop_catalog['height'] * 2 ) : '';
    		
    		add_image_size( 'woodmart_shop_catalog_x2', $width, $height, $shop_catalog['crop'] );
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Custom thumbnail function for slider
     * ------------------------------------------------------------------------------------------------
     */
    
    if ( ! function_exists( 'woodmart_template_loop_product_thumbnail' ) ) {
    	function woodmart_template_loop_product_thumbnail() {
    		echo woodmart_get_product_thumbnail();
    	}
    }
    
    if ( ! function_exists( 'woodmart_get_product_thumbnail' ) ) {
    	function woodmart_get_product_thumbnail( $size = 'woocommerce_thumbnail', $attach_id = false ) {
    		global $post;
    		$custom_size = $size;
    
    		$defined_sizes = array('woocommerce_thumbnail', 'woodmart_shop_catalog_x2');
    		
    		if( woodmart_loop_prop( 'double_size' ) ) {
    			$size = 'woodmart_shop_catalog_x2';
    		}
    
    		if ( has_post_thumbnail() ) {
    
    			if( ! $attach_id ) $attach_id = get_post_thumbnail_id();
    
    			$props = wc_get_product_attachment_props( $attach_id, $post );
    			
    			if( woodmart_loop_prop( 'img_size' ) ) {
    				$custom_size = woodmart_loop_prop( 'img_size' );
    			}
    			
    			$custom_size = apply_filters( 'woodmart_custom_img_size', $custom_size );
    			
    			if( ! in_array( $custom_size, $defined_sizes ) && function_exists( 'wpb_getImageBySize' ) ) {
    				$img = wpb_getImageBySize( array( 'attach_id' => $attach_id, 'thumb_size' => $custom_size, 'class' => 'content-product-image' ) );
    				$img = $img['thumbnail'];
    
    			} else {
    				$img = wp_get_attachment_image( $attach_id, $size, array(
    					'title'	 => $props['title'],
    					'alt'    => $props['alt'],
    				) );
    			}
    
    			return $img;
    
    		} elseif ( wc_placeholder_img_src() ) {
    			return wc_placeholder_img( $size );
    		}
    	}
    }
    
    remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
    add_action( 'woocommerce_before_shop_loop_item_title', 'woodmart_template_loop_product_thumbnail', 10 );
    
    if( ! function_exists( 'woodmart_grid_swatches_attribute' ) ) {
    	function woodmart_grid_swatches_attribute() {
    		$custom = get_post_meta(get_the_ID(),  '_woodmart_swatches_attribute', true );
    		return empty( $custom ) ? woodmart_get_opt( 'grid_swatches_attribute' ) : $custom;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Get product page classes (columns) for product images and product information blocks
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_product_images_class' ) ) {
    	function woodmart_product_images_class() {
    		$size = woodmart_product_images_size();
    		$layout = woodmart_get_opt( 'single_product_style' );
    		
    		$class = 'col-lg-' . $size . ' col-12';
    
    		$class .= ( $layout == 4 || $layout == 5 ) ? ' col-md-12' : ' col-md-6';
    
    		return $class;
    	}
    
    	function woodmart_product_images_size() {
    		$summary_size = ( woodmart_product_summary_size() == 12 ) ? 12 : 12 - woodmart_product_summary_size();
    		return apply_filters( 'woodmart_product_summary_size', $summary_size );
    	}
    }
    
    if( ! function_exists( 'woodmart_product_summary_class' ) ) {
    	function woodmart_product_summary_class() {
    		$size = woodmart_product_summary_size();
    		$layout = woodmart_get_opt( 'single_product_style' );
    		
    		$class = 'col-lg-' . $size . ' col-12';
    
    		$class .= ( $layout == 4 || $layout == 5 ) ? ' col-md-12' : ' col-md-6';
    
    		if ( woodmart_get_opt( 'single_product_variations_price' ) ) {
    			$class .= ' woodmart-price-outside';
    		}
    
    		return $class;
    	}
    
    	function woodmart_product_summary_size() {
    		$page_layout = woodmart_get_opt( 'single_product_style' );
    
    		$size = 6;
    		switch ( $page_layout ) {
    			case 1:
    				$size = 8;
    			break;
    			case 2:
    				$size = 6;
    			break;
    			case 3:
    				$size = 4;
    			break;
    			case 4:
    				$size = 12;
    			break;
    			case 5:
    				$size = 12;
    			break;
    		}
    		return apply_filters( 'woodmart_product_summary_size', $size );
    	}
    }
    
    if( ! function_exists( 'woodmart_single_product_class' ) ) {
    	function woodmart_single_product_class() {
    		$classes = array();
    		$classes[] = 'single-product-page';
    		$classes[] = 'single-product-content';
    
    		$design = woodmart_product_design();
    		$product_bg  = woodmart_get_opt( 'product-background' );
    		$page_layout = woodmart_get_opt( 'single_product_style' );
    		
    		$classes[] = 'product-design-' . $design;
    		$classes[] = 'tabs-location-' . woodmart_get_opt( 'product_tabs_location' );
    		$classes[] = 'tabs-type-' . woodmart_get_opt( 'product_tabs_layout' );
    		$classes[] = 'meta-location-' . woodmart_get_opt( 'product_show_meta' );
    		$classes[] = 'reviews-location-' . woodmart_get_opt( 'reviews_location' );
    
    		if( $design == 'alt' ) {
    			$classes[] = 'product-align-center';
    		}
    
    		if( $page_layout == 4 || $page_layout == 5 ) {
    			$classes[] = 'image-full-width';
    		}
    
    		if( woodmart_get_opt( 'single_full_width' ) ) {
    			$classes[] = 'product-full-width';
    		}
    
    		if( woodmart_get_opt( 'product_summary_shadow' ) ) {
    			$classes[] = 'product-summary-shadow';
    		}
    
    		if( woodmart_product_sticky() ) {
    			$classes[] = 'product-sticky-on';
    		}
    
    		if( ! empty( $product_bg ) &&  ! empty( $product_bg['background-color'] ) ) {
    			$classes[] = 'product-has-bg';
    		} else {
    			$classes[] = 'product-no-bg';
    		}
    
    		return $classes;
    
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Configure product image gallery JS
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_get_product_gallery_settings' ) ) {
    	function woodmart_get_product_gallery_settings() {
    		return apply_filters( 'woodmart_product_gallery_settings', array(
    			'images_slider' => woodmart_is_main_product_images_carousel(),
    			'thumbs_slider' => array(
    				'enabled' => woodmart_is_product_thumb_enabled(),
    				'position' => woodmart_get_opt('thums_position'),
    				'items' => array(
    					'desktop' => 4,
    					'tablet_landscape' => 3,
    					'tablet' => 4,
    					'mobile' => 3,
    					'vertical_items' => 3
    				)
    			)
    		) );
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Remove product content link
     * ------------------------------------------------------------------------------------------------
     */
    remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
    
    remove_action( 'woocommerce_before_subcategory', 'woocommerce_template_loop_category_link_open', 10 );
    remove_action( 'woocommerce_after_subcategory', 'woocommerce_template_loop_category_link_close', 10 );
    
    /**
     * ------------------------------------------------------------------------------------------------
     * WooCommerce enqueues 3 stylesheets by default. You can disable them all with the following snippet
     * ------------------------------------------------------------------------------------------------
     */
    
    add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' );
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Disable photoswipe
     * ------------------------------------------------------------------------------------------------
     */
    
    remove_action( 'wp_footer', 'woocommerce_photoswipe' );
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Remove ordering from toolbar
     * ------------------------------------------------------------------------------------------------
     */
    
    remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Unhook the WooCommerce wrappers
     * ------------------------------------------------------------------------------------------------
     */
    
    remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10);
    remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Disable default product zoom init
     * ------------------------------------------------------------------------------------------------
     */
    add_filter( 'woocommerce_single_product_zoom_enabled', '__return_false' );
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Get CSS class for widget in shop area. Based on the number of widgets
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_get_widget_column_class' ) ) {
    	function woodmart_get_widget_column_class( $sidebar_id = 'filters-area' ) {
    		global $_wp_sidebars_widgets;
    		if ( empty( $_wp_sidebars_widgets ) ) :
    			$_wp_sidebars_widgets = get_option( 'sidebars_widgets', array() );
    		endif;
    		
    		$sidebars_widgets_count = $_wp_sidebars_widgets;
    
    		if ( isset( $sidebars_widgets_count[ $sidebar_id ] ) || $sidebar_id == 'filters-area' ) {
    			$count = ( isset( $sidebars_widgets_count[ $sidebar_id ] ) ) ? count( $sidebars_widgets_count[ $sidebar_id ] ) : 0;
    			$widget_count = apply_filters( 'widgets_count_' . $sidebar_id, $count );
    			$widget_classes = 'widget-count-' . $widget_count;
    			$column = 4;
    			if ( $widget_count < 4 && $widget_count != 0 ) {
    				$column = $widget_count;
    			}
    			$widget_classes .= woodmart_get_grid_el_class( 0, $column, false, 12, 6, 6 );
    			return apply_filters( 'widget_class_' . $sidebar_id, $widget_classes);
    		}
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Play with woocommerce hooks
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_woocommerce_hooks' ) ) {
    	function woodmart_woocommerce_hooks() {
            global $woodmart_prefix;
    
            $product_meta_position = woodmart_get_opt( 'product_show_meta' );
            $product_show_meta = ( $product_meta_position != 'hide' );
            $product_show_share = woodmart_get_opt( 'product_share' );
            $product_show_desc = woodmart_get_opt( 'product_short_description' );
            $tabs_location = woodmart_get_opt( 'product_tabs_location' );
            $reviews_location = woodmart_get_opt( 'reviews_location' );
    
    		remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );
    		remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
    
    		// Reviews location
    		if( $reviews_location == 'separate' ) {
    			add_filter( 'woocommerce_product_tabs', 'woodmart_disable_reviews_tab', 98 );
    			add_action( 'woocommerce_after_single_product_summary', 'comments_template', 50 );
    		}
    
    		// Upsells position
    		if( is_singular( 'product' ) ) {
    			if( woodmart_get_opt( 'upsells_position' )  == 'sidebar' ) {
    				add_action( 'woodmart_before_sidebar_area', 'woocommerce_upsell_display', 20 );
    			} else {
    				add_action( 'woodmart_woocommerce_after_sidebar', 'woocommerce_upsell_display', 10 );
    			}
    		}
    
    		// Disable related products option
    		if( woodmart_get_opt('related_products') && ! get_post_meta(get_the_ID(),  '_woodmart_related_off', true ) ) {
    			add_action( 'woodmart_woocommerce_after_sidebar', 'woocommerce_output_related_products', 20 );
    		}
    
    		// Disable product tabs title option
    		if( woodmart_get_opt('hide_tabs_titles') || get_post_meta(get_the_ID(),  '_woodmart_hide_tabs_titles', true ) ) {
    			add_filter( 'woocommerce_product_description_heading', '__return_false', 20 );
    			add_filter( 'woocommerce_product_additional_information_heading', '__return_false', 20 );
    		}
    
    		if( woodmart_get_opt('shop_filters') ) {
     			
     			// Use our own order widget list?
    			if( apply_filters( 'woodmart_use_custom_order_widget', true ) ) {
    				if( ! is_active_widget( false, false, 'woodmart-woocommerce-sort-by', true ) ) {
    					add_action( 'woodmart_before_filters_widgets', 'woodmart_sorting_widget', 10 );
    				}
    				if ( woodmart_get_opt( 'shop_filters_type' ) == 'widgets' ) {
    					remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
    				}
    			}
    
    			// Use our custom price filter widget list?
    			if( apply_filters( 'woodmart_use_custom_price_widget', true )  && ! is_active_widget( false, false, 'woodmart-price-filter', true ) ) {
    				add_action( 'woodmart_before_filters_widgets', 'woodmart_price_widget', 20 );
    			}
    
    			// Add 'filters button'
    			add_action( 'woocommerce_before_shop_loop', 'woodmart_filter_buttons', 40 );
    		}
    
    		add_action( 'woocommerce_cart_is_empty', 'woodmart_empty_cart_text', 20 );
    
    		/**
    		 * Remove default empty cart text
    		 */
    		remove_action( 'woocommerce_cart_is_empty', 'wc_empty_cart_message', 10 );
    
    		// Wrapp cart totals
    
    		add_action( 'woocommerce_before_cart_totals', function() {
    			echo '<div class="cart-totals-inner">';
    		}, 1);
    		add_action( 'woocommerce_after_cart_totals', function() {
    			echo '</div><!--.cart-totals-inner-->';
    		}, 200);
    
    		// Brand tab for single product
    		if( woodmart_get_opt( 'brand_tab' ) ) {
    			add_filter( 'woocommerce_product_tabs', 'woodmart_product_brand_tab' );
    		}
    
    		// Poduct brand
    		if( woodmart_get_opt( 'product_brand_location' ) == 'about_title' && is_singular( 'product' ) ) {
    			add_action( 'woocommerce_single_product_summary', 'woodmart_product_brand', 3);
    		} elseif( is_singular( 'product' )) {
    			add_action( 'woodmart_before_sidebar_area', 'woodmart_product_brand', 10 );
    		}
    
    		// Product share
    
    		if ( $product_meta_position != 'after_tabs' && $product_show_share ) {
    			add_action( 'woocommerce_single_product_summary', 'woodmart_product_share_buttons', 60 );
    		}
    
    		// Disable meta and description if turned off
    		if ( $product_meta_position != 'add_to_cart' ) {
    			remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
    		}
    
    		if ( ! $product_show_desc ) {
    			remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20 );
    		}
    
    		// Product tabs location
    
    		if( $tabs_location == 'summary' ) {
    			remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
    			add_action( 'woocommerce_single_product_summary', 'woocommerce_output_product_data_tabs', 39 );
    		}
    
    		if ( $product_meta_position == 'after_tabs' ) {
    			add_action( 'woodmart_after_product_tabs', function() {
    				echo '<div class="woodmart-before-product-tabs"><div class="container">';
    			}, 10 );
    
    			remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
    			if( $product_show_meta ) add_action( 'woodmart_after_product_tabs', 'woocommerce_template_single_meta', 20 );
    			if( $product_show_share ) add_action( 'woodmart_after_product_tabs', 'woodmart_product_share_buttons', 30 );
    
    			add_action( 'woodmart_after_product_tabs', function() {
    				echo '</div></div>';
    			}, 200 );
    		}
    
    		// Product video, 360 view, zoom
    		$video_url = get_post_meta(get_the_ID(),  '_woodmart_product_video', true );
    		$images_360_gallery = woodmart_get_360_gallery_attachment_ids();
    		$image_action = woodmart_get_opt( 'image_action' );
    
    		if( ! empty( $video_url ) || ! empty( $images_360_gallery ) || ! empty( $image_action ) ) {
    			add_action( 'woodmart_on_product_image', 'woodmart_additional_galleries_open', 25 );
    			add_action( 'woodmart_on_product_image', 'woodmart_additional_galleries_close', 100 );
    		}
    		
    		if( ! empty( $video_url ) ) {
    			add_action( 'woodmart_on_product_image', 'woodmart_product_video_button', 30 );
    		}
    
    		if( ! empty( $images_360_gallery ) ) {
    			add_action( 'woodmart_on_product_image', 'woodmart_product_360_view', 40 );
    		}
    
    		if( $image_action != 'popup' && woodmart_get_opt( 'photoswipe_icon' ) ) {
    			add_action( 'woodmart_on_product_image', 'woodmart_product_zoom_button', 50 );
    		}
    
    		// Custom extra content
    		$extra_block = get_post_meta(get_the_ID(),  '_woodmart_extra_content', true );
    
    		if( ! empty( $extra_block ) && $extra_block != 0 ) {
    			$extra_position = get_post_meta(get_the_ID(),  '_woodmart_extra_position', true );
    			if( $extra_position == 'before' ) {
    				add_action( 'woocommerce_before_single_product', 'woodmart_product_extra_content', 20 );
    			} else if( $extra_position == 'prefooter' ) {
    				add_action( 'woodmart_woocommerce_after_sidebar', 'woodmart_product_extra_content', 30 );
    			} else {
    				add_action( 'woodmart_after_product_content', 'woodmart_product_extra_content', 20 );
    				
    			}
    		}
    
    		// Custom tabs
    		add_filter( 'woocommerce_product_tabs', 'woodmart_custom_product_tabs' );
    
    		// Timer on the single product page
    		add_action( 'woocommerce_single_product_summary', 'woodmart_single_product_countdown', 15 );
    
    		// Instagram by hashbat for product
    		add_action( 'woodmart_woocommerce_after_sidebar', 'woodmart_product_instagram', 80 );
    
    		// Cart page move totals
    		remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cart_totals', 10 );
    
    		//Product attibutes after of short description
    		if ( woodmart_get_opt( 'attr_after_short_desc' ) ) {
    			add_action( 'woocommerce_single_product_summary', 'woodmart_display_product_attributes', 21 );
    			add_filter( 'woocommerce_product_tabs', 'woodmart_remove_additional_information_tab', 98 );
    		}
    
    		//Single product stock progress bar
    		if ( woodmart_get_opt( 'single_stock_progress_bar' ) ) {
    			add_action( 'woocommerce_single_product_summary', 'woodmart_stock_progress_bar', 16 );
    		}
    	}
    
    	add_action( 'wp', 'woodmart_woocommerce_hooks', 1000 );
    }
    
    if( ! function_exists( 'woodmart_single_product_countdown' ) ) {
    	function woodmart_single_product_countdown( $tabs ) {
    		$timer = woodmart_get_opt( 'product_countdown' );
    		if( $timer ) woodmart_product_sale_countdown();
    	}
    }
    
    if( ! function_exists( 'woodmart_display_product_attributes' ) ) {
    	function woodmart_display_product_attributes() {
    		global $product;
    		if ( $product && ( $product->has_attributes() || apply_filters( 'wc_product_enable_dimensions_display', $product->has_weight() || $product->has_dimensions() ) ) ) {
    			wc_display_product_attributes( $product );
    		}
    	}
    }
    
    if( ! function_exists( 'woodmart_remove_additional_information_tab' ) ) {
    	function woodmart_remove_additional_information_tab( $tabs ) {
    		unset( $tabs['additional_information'] );
    		return $tabs;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Additional tab
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_custom_product_tabs' ) ) {
    	function woodmart_custom_product_tabs( $tabs ) {
    		$additional_tab_title = woodmart_get_opt( 'additional_tab_title' );
    		$custom_tab_title = get_post_meta( get_the_ID(),  '_woodmart_product_custom_tab_title', true );
    		
    		if ( $additional_tab_title ) {
    			$tabs['woodmart_additional_tab'] = array(
    				'title' 	=> $additional_tab_title,
    				'priority' 	=> 50,
    				'callback' 	=> 'woodmart_additional_product_tab_content'
    			);
    		}
    		
    		if ( $custom_tab_title ) {
    			$tabs['woodmart_custom_tab'] = array(
    				'title' 	=> $custom_tab_title,
    				'priority' 	=> 60,
    				'callback' 	=> 'woodmart_custom_product_tab_content'
    			);
    		}
    		
    		return $tabs;
    	}
    }
    
    if( ! function_exists( 'woodmart_additional_product_tab_content' ) ) {
    	function woodmart_additional_product_tab_content() {
    		// The new tab content
    		$tab_content = woodmart_get_opt( 'additional_tab_text' );
    		echo do_shortcode( $tab_content );
    		
    	}
    }
    
    if( ! function_exists( 'woodmart_custom_product_tab_content' ) ) {
    	function woodmart_custom_product_tab_content() {
    		// The new tab content
    		$tab_content = get_post_meta( get_the_ID(),  '_woodmart_product_custom_tab_content', true );
    		echo do_shortcode( $tab_content );
    	}
    }
    
    if( ! function_exists( 'woodmart_disable_reviews_tab' ) ) {
    	function woodmart_disable_reviews_tab( $tabs ) {
    	    unset( $tabs['reviews'] );  // Removes the reviews tab
    	    return $tabs;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Filters buttons
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_filter_widgts_classes' ) ) {
    	function woodmart_filter_widgts_classes( $count ) {
    
    		if( apply_filters( 'woodmart_use_custom_order_widget', true )  && ! is_active_widget( false, false, 'woodmart-woocommerce-sort-by', true ) ) {
    			$count++;
    		}
    
    		if( apply_filters( 'woodmart_use_custom_price_widget', true )  && ! is_active_widget( false, false, 'woodmart-price-filter', true ) ) {
    			$count++;
    		}
    
    		return $count;
    	}
    
    	add_filter('widgets_count_filters-area', 'woodmart_filter_widgts_classes');
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Force WOODMART Swatche layered nav and price widget to work
     * ------------------------------------------------------------------------------------------------
     */
    
    add_filter( 'woocommerce_is_layered_nav_active', 'woodmart_is_layered_nav_active' );
    if( ! function_exists( 'woodmart_is_layered_nav_active' ) ) {
    	function woodmart_is_layered_nav_active() {
    		return is_active_widget( false, false, 'woodmart-woocommerce-layered-nav', true );
    	}
    }
    
    add_filter( 'woocommerce_is_price_filter_active', 'woodmart_is_layered_price_active' );
    
    if( ! function_exists( 'woodmart_is_layered_price_active' ) ) {
    	function woodmart_is_layered_price_active() {
    		$result = is_active_widget( false, false, 'woodmart-price-filter', true );
    		if( ! $result ) {
    			$result = apply_filters( 'woodmart_use_custom_price_widget', true );
    		}
    		return $result;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Change the position of woocommerce breadcrumbs
     * ------------------------------------------------------------------------------------------------
     */
    remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 );
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Add photoswipe template to body
     * ------------------------------------------------------------------------------------------------
     */
    add_action( 'woodmart_after_footer', 'woodmart_photoswipe_template', 1000 );
    if( ! function_exists( 'woodmart_photoswipe_template' ) ) {
    	function woodmart_photoswipe_template() {
    		get_template_part('woocommerce/single-product/photo-swipe-template');
    	}
    }
    
    // **********************************************************************//
    // ! Start woocommerce customer session
    // **********************************************************************//
    
    if( ! function_exists( 'woodmart_set_customer_session' ) ) {
    
    	add_action( 'woodmart_before_shop_page', 'woodmart_set_customer_session', 10 );
    
    	function woodmart_set_customer_session() {
    		if( ! function_exists( 'WC' ) ) return;
    		if ( WC()->version > '2.1' && ( ! is_admin() || defined( 'DOING_AJAX' ) ) && ! defined( 'DOING_CRON' ) ) :
    			WC()->session->set_customer_session_cookie( true );
    		endif;
    	}
    }
    
    // **********************************************************************//
    // ! Items per page select on the shop page
    // **********************************************************************//
    
    if( ! function_exists( 'woodmart_products_per_page_action' ) ) {
    
    	add_action( 'woodmart_before_shop_page', 'woodmart_products_per_page_action', 100 );
    
    	function woodmart_products_per_page_action() {
    		if ( isset( $_REQUEST['per_page'] ) ) :
    			if( ! class_exists('WC_Session_Handler')) return;
    			$s = WC()->session; // WC()->session
    			if ( is_null( $s ) ) return;
    			
    			$s->set( 'shop_per_page', intval( $_REQUEST['per_page'] ) );
    		endif;
    	}
    }
    
    // **********************************************************************//
    // ! Get Items per page number on the shop page
    // **********************************************************************//
    
    if( ! function_exists( 'woodmart_get_products_per_page' ) ) {
    	function woodmart_get_products_per_page() {
    		if( ! class_exists('WC_Session_Handler') ) return;
    		$s = WC()->session; // WC()->session
    		if ( is_null( $s ) ) return intval( woodmart_get_opt('shop_per_page') );
    		
    		if ( isset( $_REQUEST['per_page'] ) && ! empty( $_REQUEST['per_page'] ) ) :
    			return intval( $_REQUEST['per_page'] );
    		elseif ( $s->__isset( 'shop_per_page' ) ) :
    			$val = $s->__get( 'shop_per_page' );
    			if( ! empty( $val ) )
    				return intval( $s->__get( 'shop_per_page' ) );
    		endif;
    		return intval( woodmart_get_opt('shop_per_page') );
    	}
    }
    
    // **********************************************************************//
    // ! Items view select on the shop page
    // **********************************************************************//
    
    if( ! function_exists( 'woodmart_shop_view_action' ) ) {
    
    	add_action( 'woodmart_before_shop_page', 'woodmart_shop_view_action', 100 );
    
    	function woodmart_shop_view_action() {
    		if( ! class_exists('WC_Session_Handler')) return;
    		$s = WC()->session; // WC()->session
    		if ( is_null( $s ) ) return;
    
    		if ( isset( $_REQUEST['shop_view'] ) ) {
    			$s->set( 'shop_view', $_REQUEST['shop_view'] );
    		}
    		if ( isset( $_REQUEST['per_row'] ) ) {
    			$s->set( 'shop_per_row', $_REQUEST['per_row'] );
    		}
    	}
    }
    // **********************************************************************//
    // ! Get Items per ROW number on the shop page
    // **********************************************************************//
    
    if( ! function_exists( 'woodmart_get_products_columns_per_row' ) ) {
    	function woodmart_get_products_columns_per_row() {
    		if( ! class_exists('WC_Session_Handler') ) return;
    		$s = WC()->session; // WC()->session
    		if ( is_null( $s ) ) return intval( woodmart_get_opt('products_columns') );
    
    		if ( isset( $_REQUEST['per_row'] ) ) {
    			return intval( $_REQUEST['per_row'] );
    		}elseif ( $s->__isset( 'shop_per_row' ) ) {
    			return intval( $s->__get( 'shop_per_row' ) );
    		}else {
    			return intval( woodmart_get_opt('products_columns') );
    		}
    	}
    }
    
    if( ! function_exists( 'woodmart_get_shop_view' ) ) {
    	function woodmart_get_shop_view() {
    		if( ! class_exists('WC_Session_Handler') ) return;
    		$s = WC()->session; // WC()->session
    		if ( is_null( $s ) ) return woodmart_get_opt('shop_view');
    
    		if ( isset( $_REQUEST['shop_view'] ) ) {
    			return $_REQUEST['shop_view'];
    		}elseif ( $s->__isset( 'shop_view' ) ) {
    			return $s->__get( 'shop_view' );
    		}else {
    			$shop_view = woodmart_get_opt('shop_view');
    			if ( $shop_view == 'grid_list' ) {
    				return 'grid';
    			}elseif( $shop_view == 'list_grid'){
    				return 'list';
    			}else{
    				return $shop_view;
    			}
    		}
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Remove () from numbers in categories widget
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_filter_product_categories_widget_args' ) ) {
    	function woodmart_filter_product_categories_widget_args( $list_args ) {
    
    		$list_args['walker'] = new WOODMART_WC_Product_Cat_List_Walker();
    
    		return $list_args;
    	}
    
    	add_filter( 'woocommerce_product_categories_widget_args', 'woodmart_filter_product_categories_widget_args', 10, 1);
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * AJAX add to cart for all product types
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_ajax_add_to_cart' ) ) {
    	function woodmart_ajax_add_to_cart() {
    		// Get messages
    		ob_start();
    
    		wc_print_notices();
    
    		$notices = ob_get_clean();
    
    		// Get mini cart
    		ob_start();
    
    		woocommerce_mini_cart();
    
    		$mini_cart = ob_get_clean();
    
    		// Fragments and mini cart are returned
    		$data = array(
    			'notices' => $notices,
    			'fragments' => apply_filters( 'woocommerce_add_to_cart_fragments', array(
    					'div.widget_shopping_cart_content' => '<div class="widget_shopping_cart_content">' . $mini_cart . '</div>'
    				)
    			),
    			'cart_hash' => apply_filters( 'woocommerce_add_to_cart_hash', WC()->cart->get_cart_for_session() ? md5( json_encode( WC()->cart->get_cart_for_session() ) ) : '', WC()->cart->get_cart_for_session() )
    		);
    
    		wp_send_json( $data );
    
    		die();
    	}
    }
    
    add_action( 'wp_ajax_woodmart_ajax_add_to_cart', 'woodmart_ajax_add_to_cart' );
    add_action( 'wp_ajax_nopriv_woodmart_ajax_add_to_cart', 'woodmart_ajax_add_to_cart' );
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Function to prepare classes for grid element (column)
     * ------------------------------------------------------------------------------------------------
     */
    
    if ( ! function_exists( 'woodmart_get_grid_el_class' ) ) {
    	function woodmart_get_grid_el_class( $loop = 0, $columns = 4, $different_sizes = false, $xs_size = false, $sm_size = 4, $lg_size = 3, $md_size = false ) {
    		$classes = '';
    
    		$items_wide = woodmart_get_wide_items_array( $different_sizes );
    
    		if ( ! $xs_size ) {
    			$xs_size = apply_filters( 'woodmart_grid_xs_default', 6 );
    		}
    
    		if ( $columns > 0 ) {
    			$lg_size = 12 / $columns;
    		}
    
    		if ( ! $md_size ) {
    			$md_size = $lg_size;
    		}
    
    		if ( $columns > 4 ) {
    			$md_size = 3;
    		}
    
    		if ( $columns <= 3 ) {
    			if ( $columns == 1 ) {
    				$sm_size = 12;
    				$xs_size = 12;
    			} else {
    				$sm_size = 6;
    			}
    		}
    
    		// Change the layout alternating columns
    		if ( $different_sizes && ( in_array( $loop, $items_wide ) )) {
    		    
    		    switch ($columns):
    		        
                    case 3:
                        $lg_size = 6;
    			        $md_size = 6;
                    break;
                    
                    case 4:
                        $lg_size = 4;
    			        $md_size = 4;
                    break;
                    
                    case 5:
                        $lg_size = 3;
    			        $md_size = 3;
                    break;
                    
                    case 6:
                        $lg_size = '20_0';
    			        $md_size = 3;
                    break;
                
                endswitch;
    	
    		}
    		
            /*
            Because you made a custom work for showing 5 columns layout i rewrote the code so that
            when the Products grid with different sizes is disabled the columns work as normal
            but when is enabled to make the 5-4-5 layout work
            */
            
    		if ( ! $different_sizes && ( in_array( $columns, array( 5, 7, 8, 9, 10, 11 ) ) )) {
                $lg_size = str_replace( '.', '_', round( 100 / $columns, 1 ) );
                if ( ! strpos( $lg_size, '_' ) ) {
                    $lg_size = $lg_size . '_0';
                }
            }
            if ( ! in_array( $loop, $items_wide ) &&  ( in_array( $columns, array( 5, 7, 8, 9, 10, 11 ) ) ) ) {
                $lg_size = str_replace( '.', '_', round( 100 / $columns, 1 ) );
                if ( ! strpos( $lg_size, '_' ) ) {
                    $lg_size = $lg_size . '_0';
                }
            }
            
    		$sizes = array(
    			array(
    				'name' => 'col-lg',
    				'value' => $lg_size,
    			),
    			array(
    				'name' => 'col-md',
    				'value' => $md_size,
    			),
    			array(
    				'name' => 'col-sm',
    				'value' => $sm_size,
    			),
    			array(
    				'name' => 'col',
    				'value' => $xs_size,
    			),
    		);
    		
    		$result_sizes = array();
    		foreach ( $sizes as $index => $value ) {
    			if ( isset( $sizes[$index + 1] ) ) {
    				$next = $sizes[$index + 1];
    			} else {
    				continue;
    			}
    			
    			if ( $value['value'] === $next['value'] ) {
    				$result_sizes[$next['name']] = $next['value'];
    				unset($result_sizes[$value['name']]);
    			} else if ( $value['value'] !== $next['value'] ) {
    				$result_sizes[$value['name']] = $value['value'];
    				$result_sizes[$next['name']] = $next['value'];
    			}
    		}
    		
    		if ( apply_filters( 'woodmart_old_product_grid_classes', false ) ) {
    			$result_sizes = array(
    				'col-lg' => $lg_size,
    				'col-md' => $md_size,
    				'col-sm' => $sm_size,
    				'col' => $xs_size,
    			);
    		}
    
    		foreach ( $result_sizes as $size => $value ) {
    			$classes .= ' ' . $size . '-' . $value;
    		}
    		
    		if ( $loop > 0 && $columns > 0 ) {
    			if ( 0 == ( $loop - 1 ) % $columns || 1 == $columns ) {
    				$classes .= ' first ';
    			}
    			if ( 0 == $loop % $columns ) {
    				$classes .= ' last ';
    			}
    		}
    
    		return $classes;
    	}
    }
    
    if ( ! function_exists( 'woodmart_get_wide_items_array' ) ) {
    	function woodmart_get_wide_items_array( $different_sizes = false ){
    	    
    	    //To create an array big enough so that the alternate pattern repeats and not stops after few products
    	    $loop_cycle = 999;
    	    
    	    //Get the selected columns
    	    $perrow = apply_filters( 'loop_shop_columns', woodmart_get_products_columns_per_row() );
    	    
    /**
    
    You default function defined an array of ( 5, 6, 7, 8, 13, 14 )
    basically what it does was to change the product size in products
    that were inside this array, after the 14 product the repeated pattern stoped.
    
    Below i create a function that does the following thing.
    If you choose a 3 column layout it puts in array the numbers 4, 5 then skips 6, 7, 8 
    and puts 9, 10 and so on.
    
    These numbers in array are the positions of the products that have to change the size so that the final result looks like
    
    3, 3, 3
    
    2, 2 => products position 4, 5
    
    3, 3, 3
    
    2, 2 => products position 9, 10
    
    and so on
    
    Another example is
    
    4, 4, 4, 4
    
    3, 3, 3 => products position 5, 6, 7
    
    4, 4, 4, 4
    
    3, 3, 3 => products position 12, 13, 14
    
    This function works according to what collumn you have selected.
    
    So if you select a grid layout with 3 columns the pattern will be
    
    3/2
    
    For 4 columns the pattern will be
    
    4/3
    
    for 5
    
    5/4
    
    for 6
    
    6/5
    
    **/
            
            //My custom function Starts
    	    $stop = ($perrow+($perrow-1))*$loop_cycle;
    		$cycle = $perrow+($perrow-1);
    		
    		$arr = array();
    		
    		
    		for ($i=1; $i<=$stop; $i++) {
    			if ($i>($cycle-($perrow-1)) && $i<=$cycle) {
    				array_push($arr, $i);
    				if ($i==$cycle) $cycle += $perrow+($perrow-1);
    			} else continue;
    		}
    		
    		return $arr;
    		//My custom function Ends
    		
    		
    		
    		//Instead of array( 5, 6, 7, 8, 13, 14 ) i put the $arr array that generated above
    		$items_wide = apply_filters( 'woodmart_wide_items', array( $arr ) );
    
    		if( is_array( $different_sizes ) ) {
    			$items_wide = apply_filters( 'woodmart_wide_items', $different_sizes );
    		}
    
    		return $items_wide;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Woodmart Related product count
     * ------------------------------------------------------------------------------------------------
     */
    if( ! function_exists( 'woodmart_related_count' ) ) {
    	add_filter( 'woocommerce_output_related_products_args', 'woodmart_related_count' );
    	  function woodmart_related_count() {
    		$args['posts_per_page'] = ( woodmart_get_opt( 'related_product_count' ) ) ? woodmart_get_opt( 'related_product_count' ) : 8;
    		return $args;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Reset loop
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_reset_loop' ) ) {
    	function woodmart_reset_loop() {
    		unset( $GLOBALS['woodmart_loop'] );
    		woodmart_setup_loop();
    	}
    	add_action( 'woocommerce_after_shop_loop', 'woodmart_reset_loop', 1000 );
    	add_action( 'loop_end', 'woodmart_reset_loop', 1000 );
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Get loop prop
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_loop_prop' ) ) {
    	function woodmart_loop_prop( $prop, $default = '' ) {
    		woodmart_setup_loop();
    		
    		return isset( $GLOBALS['woodmart_loop'], $GLOBALS['woodmart_loop'][ $prop ] ) ? $GLOBALS['woodmart_loop'][ $prop ] : $default;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Set loop prop
     * ------------------------------------------------------------------------------------------------
     */
    
    if( ! function_exists( 'woodmart_set_loop_prop' ) ) {
    	function woodmart_set_loop_prop( $prop, $value = '' ) {
    		if ( ! isset( $GLOBALS['woodmart_loop'] ) ) woodmart_setup_loop();
    
    		$GLOBALS['woodmart_loop'][ $prop ] = $value;
    	}
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Setup loop
     * ------------------------------------------------------------------------------------------------
     */
     
    if( ! function_exists( 'woodmart_setup_loop' ) ) {
    	function woodmart_setup_loop( $args = array() ) {
    		if ( isset( $GLOBALS['woodmart_loop'] ) ) return; // If the loop has already been setup, bail.
    		
    		$default_args = array(
    			'products_different_sizes' 	=> woodmart_get_opt( 'products_different_sizes' ),
    			'product_categories_design' => woodmart_get_opt( 'categories_design' ),
    			'product_categories_shadow' => woodmart_get_opt( 'categories_with_shadow' ),
    			'products_columns' 		    => ( woodmart_get_opt( 'per_row_columns_selector' ) ) ? apply_filters( 'loop_shop_columns', woodmart_get_products_columns_per_row() ) : woodmart_get_opt( 'products_columns' ),
    			'product_categories_style'  => false,
    			'product_hover' 			=> woodmart_get_opt( 'products_hover' ),
    			'products_view' 			=> woodmart_get_shop_view(),
    			'products_masonry' 			=> woodmart_get_opt( 'products_masonry' ),
    			
    			'timer' 					=> woodmart_get_opt( 'shop_countdown' ),
    			'progress_bar'              => woodmart_get_opt( 'grid_stock_progress_bar' ),
    			'swatches'					=> false,
    			
    			'is_slider' 				=> false,
    			'is_shortcode' 				=> false,
    			'is_quick_view' 			=> false,
    			
    			'woocommerce_loop' 			=> 0,
    			'woodmart_loop' 			=> 0,
    			
    			'parts_media' 				=> true,
    			'parts_title' 				=> true,
    			'parts_meta' 				=> true,
    			'parts_text' 				=> true,
    			'parts_btn' 				=> true,
    			
    			'blog_design' 				=> woodmart_get_opt( 'blog_design' ),
    			'blog_type' 				=> false,
    			'blog_columns' 				=> woodmart_get_opt( 'blog_columns' ),
    			'img_size' 					=> false,
    			'double_size' 				=> false,
    
    			'portfolio_style'			=> woodmart_get_opt( 'portoflio_style' ),
    			'portfolio_column'			=> woodmart_get_opt( 'projects_columns' ),
    		);
    		
    		$GLOBALS['woodmart_loop'] = wp_parse_args( $args, $default_args );
    	}
    	add_action( 'woocommerce_before_shop_loop', 'woodmart_setup_loop', 10 );
    	add_action( 'wp', 'woodmart_setup_loop', 50 );
    	add_action( 'loop_start', 'woodmart_setup_loop', 10 );
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Hide woocommerce notice
     * ------------------------------------------------------------------------------------------------
     */
    if ( ! function_exists( 'woodmart_hide_outdated_templates_notice' ) ) {
    	function woodmart_hide_outdated_templates_notice( $value, $notice ) {
    		if ( $notice == 'template_files' ) {
    			return false;
    		}
    
    		return $value;
    	}
    
    	add_filter( 'woocommerce_show_admin_notice', 'woodmart_hide_outdated_templates_notice', 2, 10 );
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Fix for single product image sizes
     * ------------------------------------------------------------------------------------------------
     */
    if ( ! function_exists( 'woodmart_single_product_image_sizes') ) {
    	function woodmart_single_product_image_sizes() {
    		$sizes = wc_get_image_size( 'woocommerce_single' );
    		if ( ! $sizes['height'] ) {
    			$sizes['height'] = $sizes['width'];
    		}
    
    		return array( $sizes['width'], $sizes['height'] );
    	}
    
    	add_filter( 'woocommerce_gallery_thumbnail_size', 'woodmart_single_product_image_sizes' );
    }
    
    /**
     * ------------------------------------------------------------------------------------------------
     * Change single product notice position
     * ------------------------------------------------------------------------------------------------
     */
    remove_action( 'woocommerce_before_single_product', 'woocommerce_output_all_notices', 10 );
    remove_action( 'woocommerce_before_shop_loop', 'woocommerce_output_all_notices', 10 );
    
    add_action( 'woodmart_before_single_product_summary_wrap', 'woocommerce_output_all_notices', 10 );
    add_action( 'woodmart_before_shop_page', 'woocommerce_output_all_notices', 10 );
    
    #162828

    newsprince
    Participant

    After you replace the code enable

    Products grid with different sizes

    in Theme Settings > Shop > Product Styles

    #162852

    Artem Temos
    Keymaster

    Hello @newsprince,

    Thank you for posting your solution here. We suggest you to place such large files somewhere on Google Drive for example and post the link only.

    Kind Regards

    #162878

    newsprince
    Participant

    @ Artem Temos

    Thank you for the reply. You can check the link below at pastebin.

    https://pastebin.com/Sa261bs4

    #162895

    horny_fungus
    Participant

    @newsprice, wow, you’re simply awesome. Thank you very much. I hope theme authors will include this onto the theme to honour your work.

    #162907

    newsprince
    Participant

    @pacman1917

    Thank you very much

Viewing 6 posts - 1 through 6 (of 6 total)