<?php
add_theme_support( 'woocommerce' );

/** Template pages ********************************************************/

if (!function_exists('jwsthemes_woocommerce_content')) {
    
    function jwsthemes_woocommerce_content() {

        if (is_singular('product')) {
            wc_get_template_part('single', 'product');
        } else {
            wc_get_template_part('archive', 'product');
        }
    }

}

/*
 * Show rating on all products
*/ 
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 ); 
add_filter( 'woocommerce_product_get_rating_html','jwsthemes_get_rating_html', 10,2 );
function jwsthemes_get_rating_html( $rating_html, $rating ) {
	
	if($rating == '') $rating = 0;
	
	$rating_html = '';

			$rating_html  = '<div class="star-rating" title="' . sprintf( __( 'Rated %s out of 5', 'kloud' ), $rating ) . '">';

			$rating_html .= '<span style="width:' . ( ( $rating / 5 ) * 100 ) . '%"><strong class="rating">' . $rating . '</strong> ' . __( 'out of 5', 'kloud' ) . '</span>';

			$rating_html .= '</div>';

	return $rating_html;

}

/**
* Change number of related products on product page
* Set your own value for 'posts_per_page'
*/ 
add_filter( 'woocommerce_output_related_products_args', 'jwsthemes_related_products_args' );
function jwsthemes_related_products_args( $args ) {
    $args['posts_per_page'] = -1; // 3 related products
    return $args;
}
if ( ! function_exists( 'tb_woocommerce_page_title' ) ) {

	/**
	 * woocommerce_page_title function.
	 *
	 * @param  boolean $echo
	 * @return string
	 */
	function jwsthemes_woocommerce_page_title() {

		if ( is_search() ) {
			$page_title = sprintf( __( 'Search Results: &ldquo;%s&rdquo;', 'kloud' ), get_search_query() );

			if ( get_query_var( 'paged' ) )
				$page_title .= sprintf( __( '&nbsp;&ndash; Page %s', 'kloud' ), get_query_var( 'paged' ) );

		} elseif ( is_tax() ) {

			$page_title = single_term_title( "", false );

		} elseif ( is_archive() ) {

			$page_title = __( 'Archives Products', 'kloud' );

		} elseif ( is_single() ) {

			$page_title = __( 'Single Product', 'kloud' );

		} else {

			$shop_page_id = wc_get_page_id( 'shop' );
			$page_title   = get_the_title( $shop_page_id );

		}
		
		return $page_title;
	}
}
/**
 * Add quick view button in wc product loop
 */
function jws_theme_add_quick_view_button() {

	global $product;

	echo '<a href="#" class="button yith-wcqv-button" data-product_id="' . $product->get_id() . '">Quick Look</span></a>';
}
/**
 * Get a coupon value
 *
 * @access public
 * @param string $coupon
 */
function wc_cart_totals_coupon_html_custom( $coupon ) {
	if ( is_string( $coupon ) ) {
		$coupon = new WC_Coupon( $coupon );
    }

	$value  = array();

	if ( $amount = WC()->cart->get_coupon_discount_amount( $coupon->code, WC()->cart->display_cart_ex_tax ) ) {
		$discount_html = '-' . wc_price( $amount );
	} else {
		$discount_html = '-' . wc_price( $amount );
	}

	$value[] = apply_filters( 'woocommerce_coupon_discount_amount_html', $discount_html, $coupon );

	if ( $coupon->enable_free_shipping() ) {
		$value[] = __( 'Free shipping coupon', 'kloud' );
    }

    // get rid of empty array elements
    $value = array_filter( $value );
	$value = implode( ', ', $value );

	echo apply_filters( 'woocommerce_cart_totals_coupon_html', $value, $coupon );
}

/**
 * Get a shipping methods full label including price
 * @param  object $method
 * @return string
 */
function wc_cart_totals_shipping_method_label_custom( $method ) {
	$label = '';//$method->label;

	if ( $method->cost > 0 ) {
		if ( WC()->cart->tax_display_cart == 'excl' ) {
			$label .= wc_price( $method->cost );
			if ( $method->get_shipping_tax() > 0 && WC()->cart->prices_include_tax ) {
				$label .= ' <small class="tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>';
			}
		} else {
			$label .= wc_price( $method->cost + $method->get_shipping_tax() );
			if ( $method->get_shipping_tax() > 0 && ! WC()->cart->prices_include_tax ) {
				$label .= ' <small class="tax_label">' . WC()->countries->inc_tax_or_vat() . '</small>';
			}
		}
	} elseif ( $method->id !== 'free_shipping' ) {
		$label .= ' (' . __( 'Free', 'kloud' ) . ')';
	}

	return apply_filters( 'woocommerce_cart_shipping_method_full_label', $label, $method );
}
function wc_gallery () {
    if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

global $post, $product;

$attachment_ids = $product->get_gallery_image_ids();

if ( $attachment_ids && has_post_thumbnail() ) {
	foreach ( $attachment_ids as $attachment_id ) {
		$full_size_image = wp_get_attachment_image_src( $attachment_id, 'shop_single' );
		$thumbnail       = wp_get_attachment_image_src( $attachment_id, 'shop_single' );
		$attributes      = array(
			'title'                   => get_post_field( 'post_title', $attachment_id ),
			'data-caption'            => get_post_field( 'post_excerpt', $attachment_id ),
			'data-src'                => $full_size_image[0],
			'data-large_image'        => $full_size_image[0],
			'data-large_image_width'  => $full_size_image[1],
			'data-large_image_height' => $full_size_image[2],
		);

		$html  = '<div  class="woocommerce-product-gallery__image"><a href="' . esc_url( $full_size_image[0] ) . '">';
		$html .= wp_get_attachment_image( $attachment_id, 'shop_single');
 		$html .= '</a></div>';

		echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', $html, $attachment_id );
	}
}
}

function wc_gallery_carousel() { 
 if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

global $post, $product;
$columns           = apply_filters( 'woocommerce_product_thumbnails_columns', 4 );
$thumbnail_size    = apply_filters( 'shop_single');
$post_thumbnail_id = get_post_thumbnail_id( $post->ID );
$full_size_image   = wp_get_attachment_image_src( $post_thumbnail_id, $thumbnail_size );
$placeholder       = has_post_thumbnail() ? 'with-images' : 'without-images';
$wrapper_classes   = apply_filters( 'woocommerce_single_product_image_gallery_classes', array(
	'woocommerce-product-gallery',
	'woocommerce-product-gallery--' . $placeholder,
	'woocommerce-product-gallery--columns-' . absint( $columns ),
	'images',
) );
?>
		<?php
		$attributes = array(
			'title'                   => get_post_field( 'post_title', $post_thumbnail_id ),
			'data-caption'            => get_post_field( 'post_excerpt', $post_thumbnail_id ),
			'data-src'                => $full_size_image[0],
			'data-large_image'        => $full_size_image[0],
			'data-large_image_width'  => $full_size_image[1],
			'data-large_image_height' => $full_size_image[2],
		);

		if ( has_post_thumbnail() ) {
		  	$html  = '<div data-thumb="' . esc_url( $thumbnail[0] ) . '" class="woocommerce-product-gallery__image"><a href="' . esc_url( $full_size_image[0] ) . '">';
			$html .= get_the_post_thumbnail( $post->ID, 'shop_single');
			$html .= '</a></div>';
		} else {
			$html  = '<div class="woocommerce-product-gallery__image--placeholder">';
			$html .= sprintf( '<img src="%s" alt="%s" />', esc_url( wc_placeholder_img_src() ), esc_html__( 'Awaiting product image', 'kloud' ) );
			$html .= '</div>';
		}

		echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', $html, get_post_thumbnail_id( $post->ID ) );
        echo wc_gallery ();
	
		?> <?php
}
/**
 * Change number of products displayed per page.
 *
 * @since  1.0
 *
 * @return  number
 *
 */
function jws_kloud_wc_change_product_per_page() {
	$number = cs_get_option( 'wc-number-per-page' );
	return $number;
}
add_filter( 'loop_shop_per_page', 'jws_kloud_wc_change_product_per_page' , 20 );
/** 
 * Change the Description tab link text for single products
 */
add_filter( 'woocommerce_product_description_tab_title', 'isa_wc_description_tab_link_text', 999, 2 );
 
function isa_wc_description_tab_link_text( $text, $tab_key ) {
 
    return esc_html( 'Product Description' );
 
}
/** 
 * Change the "Additional Information" tab link text for single products
 */
add_filter( 'woocommerce_product_additional_information_tab_title', 'isa_wc_additional_info_tab_link_text', 999, 2 );
 
function isa_wc_additional_info_tab_link_text( $text, $tab_key ) {
 
    return esc_html( 'Additional Information' );
 
}
 function jws_kloud_wc_currency() {
	if ( ! class_exists( 'kloud_Addons_Currency' ) ) return;
	$currencies = kloud_Addons_Currency::getCurrencies();
					
	if ( count( $currencies > 0 ) ) :
		$woocurrency = kloud_Addons_Currency::woo_currency();
		$woocode = $woocurrency['currency'];
		if ( ! isset( $currencies[$woocode] ) ) {
			$currencies[$woocode] = $woocurrency;
		}
		$default = kloud_Addons_Currency::woo_currency();
		$current = isset( $_COOKIE['jws_currency'] ) ? $_COOKIE['jws_currency'] : $default['currency'];

		$output = '';

		$output .= '<div class="jws-currency dib pr cg">';
			$output .= '<span class="current dib">' . esc_html( $current ) . '<i class="fa fa-angle-down ml__5"></i></span>';
			$output .= '<ul class="pa ts__03 bgbl">';
				foreach( $currencies as $code => $val ) :
					$output .= '<li>';
						$output .= '<a class="currency-item cg db" href="javascript:void(0);" data-currency="' . esc_attr( $code ) . '">' . esc_html( $code ) . '</a>';
					$output .= '</li>';
				endforeach;
			$output .= '</ul>';
		$output .= '</div>';
	endif;
	return apply_filters( 'jws_kloud_wc_currency', $output );
}
/**
 * Shopping cart in header.
 *
 * @since 1.0.0
 */
if ( ! function_exists( ' jws_kloud_shopping_cart' ) ) {
	function  jws_kloud_shopping_cart() {
		global $woocommerce;
		
		// Catalog mode
		$catalog_mode = cs_get_option( 'wc-catalog' );

		if ( $catalog_mode ) return;

		$output = '';
		$output .= '<div  class="jws-icon-cart">';
			$output .= '<a class="cart-contents" href="#" title="' . esc_html( 'View your shopping cart', 'kloud' ) . '">';
				$output .= '<span class="pe-7s-cart"></span>';
				$output .= nm_get_cart_contents_count();
			$output .= '</a>';
		$output .= '</div>';
		return apply_filters( ' jws_kloud_shopping_cart', $output );
	}
}

/**
 * Shopping cart.
 *
 * @since 1.0.0
 */
if ( ! function_exists( 'jws_kloud_wc_my_account' ) ) {
	function jws_kloud_wc_my_account() {
		$output = '';
        if ( is_user_logged_in() ) {
                $current_user = wp_get_current_user();
                $name = $current_user->display_name ? $current_user->display_name : ( $current_user->user_firstname ? $current_user->user_firstname : $current_user->user_login );
                $loged = "logged";
                $hidden_md = "hidden-md";
        }else {
         $name = ''; 
         $loged = '';
         $hidden_md = '';  
        }
		$output .= '<div class=" '.$loged.' jws-my-account  ">';
			$output .= '<a class="account" href="' . esc_url( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ) . '"><span class="hidden-xs hidden-sm '.$hidden_md.'">'.esc_html('account' , 'kloud').'</span><i class="clo25 ml fz24 midde pe-7s-user"></i><span class="acount-tt">'.$name.'</span></a>';
			$output .= '<ul class="account-content">';
				if ( is_user_logged_in() ) {
					$output .= '<li class="button button--white"><a class="item-ac" href="' . esc_url( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ) . '">' . esc_html__( 'Dashboard', 'kloud' ) . '</a></li>';
					$output .= '<li class="button button--white"><a class="item-ac" href="' . esc_url( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ) . '">' . esc_html__( 'Order Tracking', 'kloud' ) . '</a></li>';
					$output .= '<li class="button button--white"><a class="item-ac" href="' . esc_url( wc_logout_url(  ) ) . '">' . esc_html__( 'Logout', 'kloud' ) . '</a></li>';
				} else {
					$output .= '<li class="button button--white"><a class="item-ac " href="' . esc_url( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ) . '">' . esc_html__( 'Login', 'kloud' ) . '</a></li>';
                    $output .= '<li class=" button button--white-reversed"><a class="item-ac " href="' . esc_url( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ) . '">' . esc_html__( 'Sign up', 'kloud' ) . '</a></li>';
				}
			$output .= '</ul>';
		$output .= '</div>';

		return apply_filters( 'ws_kloud_wc_my_account', $output );
	}
}
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
remove_action( 'woocommerce_after_shop_loop_item',  'yith_add_quick_view_button',30 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
/**
 * ------------------------------------------------------------------------------------------------
 * WishList button
 * ------------------------------------------------------------------------------------------------
 */

if( ! function_exists( 'kloud_wishlist_btn' ) ) {
	function kloud_wishlist_btn() {
		if( class_exists('YITH_WCWL_Shortcode')) echo YITH_WCWL_Shortcode::add_to_wishlist(array());
	}
}
/**
 * ------------------------------------------------------------------------------------------------
 * Compare button
 * ------------------------------------------------------------------------------------------------
 */

if( ! function_exists( 'kloud_configure_compare' ) ) {
	add_action( 'init', 'kloud_configure_compare' );
	function kloud_configure_compare() {
		global $yith_woocompare;
		if( ! class_exists( 'YITH_Woocompare' ) ) return;

		$compare = $yith_woocompare->obj;

		if ( get_option('yith_woocompare_compare_button_in_products_list') == 'yes' ) {
			remove_action( 'woocommerce_after_shop_loop_item', array( $compare, 'add_compare_link' ), 20 );
			#add_action( 'woocommerce_before_shop_loop_item', array( $compare, 'add_compare_link' ), 20 );
		}

        if ( get_option('yith_woocompare_compare_button_in_product_page') == 'yes' ) {
        	add_action( 'woocommerce_single_product_summary', 'kloud_before_compare_button', 33 );
        	add_action( 'woocommerce_single_product_summary', 'kloud_after_compare_button', 37 );
        }

	}
}

if( ! function_exists( 'kloud_before_compare_button' ) ) {
	function kloud_before_compare_button() {
		echo '<div class="compare-btn-wrapper">';
	}
}

if( ! function_exists( 'kloud_after_compare_button' ) ) {
	function kloud_after_compare_button() {
		echo '</div>';
	}
}

if( ! function_exists( 'kloud_compare_btn' ) ) {
	function kloud_compare_btn() {

		echo '<div class="product-compare-button">';
            global $product;
            $product_id = $product->get_id() ;

            // return if product doesn't exist
            if ( empty( $product_id ) || apply_filters( 'yith_woocompare_remove_compare_link_by_cat', false, $product_id ) )
	            return;

            $is_button = ! isset( $button_or_link ) || ! $button_or_link ? get_option( 'yith_woocompare_is_button' ) : $button_or_link;

            if ( ! isset( $button_text ) || $button_text == 'default' ) {
                $button_text = get_option( 'yith_woocompare_button_text', __( 'Compare', 'kloud' ) );
                yit_wpml_register_string( 'Plugins', 'plugin_yit_compare_button_text', $button_text );
                $button_text = yit_wpml_string_translate( 'Plugins', 'plugin_yit_compare_button_text', $button_text );
            }

            printf( '<a href="%s" class="%s" data-product_id="%d" rel="nofollow">%s</a>', kloud_compare_add_product_url( $product_id ), 'compare' . ( $is_button == 'button' ? ' button' : '' ), $product_id, $button_text );
        
		echo '</div>';
	}
}


if( ! function_exists( 'kloud_compare_add_product_url' ) ) {
    function kloud_compare_add_product_url( $product_id ) {
    	$action_add = 'yith-woocompare-add-product';
        $url_args = array(
            'action' => 'asd',
            'id' => $product_id
        );
        return apply_filters( 'yith_woocompare_add_product_url', esc_url_raw( add_query_arg( $url_args ) ), $action_add );
    }
}


if( ! function_exists( 'kloud_compare_styles' ) ) {
	add_action( 'wp_print_styles', 'kloud_compare_styles', 200 );
	function kloud_compare_styles() {
		if( ! class_exists( 'YITH_Woocompare' ) ) return;
		$view_action = 'yith-woocompare-view-table';
		if ( ( ! defined('DOING_AJAX') || ! DOING_AJAX ) && ( ! isset( $_REQUEST['action'] ) || $_REQUEST['action'] != $view_action ) ) return;
		wp_enqueue_style( 'kloud-style' );
	}
}
/**
 * ------------------------------------------------------------------------------------------------
 * Register new image size two times larger than standard woocommerce one 
 * ------------------------------------------------------------------------------------------------
 */

if( ! function_exists( 'kloud_add_image_size' ) ) {
	add_action( 'after_setup_theme', 'kloud_add_image_size' );
	function kloud_add_image_size() {
	if( ! function_exists( 'wc_get_image_size' ) ) return;
	$shop_catalog = wc_get_image_size( 'shop_catalog' );
	$width = ((int) $shop_catalog['width']) * 2;
	$height = ((int) $shop_catalog['height']) * 2;
	add_image_size( 'shop_catalog_jws', $width, $height, $shop_catalog['crop'] );
	}
}
/**
 * ------------------------------------------------------------------------------------------------
 * Custom thumbnail function for slider
 * ------------------------------------------------------------------------------------------------
 */

if ( ! function_exists( 'kloud_template_loop_product_thumbnail' ) ) {
	function kloud_template_loop_product_thumbnail() {
		echo kloud_get_product_thumbnail();
	}
}

if ( ! function_exists( 'kloud_get_product_thumbnail' ) ) {
	function kloud_get_product_thumbnail( $size = 'shop_catalog_2', $attach_id = false ) {
		global $post, $kloud_loop;

		if( ! empty( $kloud_loop['double_size'] ) && $kloud_loop['double_size'] ) {
			$size = 'shop_catalog_x2';
		}

		if ( has_post_thumbnail() ) {

			if( function_exists( 'wpb_getImageBySize' ) ) {
				if( ! $attach_id ) $attach_id = get_post_thumbnail_id();
				if( ! empty( $kloud_loop['img_size'] ) ) {
					$size = $kloud_loop['img_size'];
				}  
				
				$img = wpb_getImageBySize( array( 'attach_id' => $attach_id, 'thumb_size' => $size, 'class' => 'content-product-image' ) );
				$img = $img['thumbnail'];

			} else {
				$img = get_the_post_thumbnail( $post->ID, $size );
			}

			return $img;

		} elseif ( wc_placeholder_img_src() ) {
			return wc_placeholder_img( $size );
		}
	}
}


/**
 * ------------------------------------------------------------------------------------------------
 * Check if WooCommerce is active
 * ------------------------------------------------------------------------------------------------
 */

if( ! function_exists( 'kloud_woocommerce_installed' ) ) {
	function kloud_woocommerce_installed() {
	    return class_exists( 'WooCommerce' );
	}
}
/**
 * ------------------------------------------------------------------------------------------------
 * Custom thumbnail for category (wide items)
 * ------------------------------------------------------------------------------------------------
 */

if( ! function_exists( 'kloud_category_thumb_double_size' ) ) {
	function kloud_category_thumb_double_size( $category ) {
		global $kloud_loop;
		$small_thumbnail_size  	= apply_filters( 'subcategory_archive_thumbnail_size', 'shop_catalog2' );
		$dimensions    			= wc_get_image_size( $small_thumbnail_size );
		$thumbnail_id  			= get_woocommerce_term_meta( $category->term_id, 'thumbnail_id', true  );


		if ( $thumbnail_id ) {
			$image = wp_get_attachment_image_src( $thumbnail_id, $small_thumbnail_size  );
			$image = $image[0];
		} else {
			$image = wc_placeholder_img_src();
		}

		if ( $image ) {
			$image = str_replace( ' ', '%20', $image );

			echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $category->name ) . '"   />';
		}
	}
}

remove_action( 'woocommerce_before_subcategory_title', 'woocommerce_subcategory_thumbnail');
add_action( 'woocommerce_before_subcategory_title', 'kloud_category_thumb_double_size', 10 );
/**
 * ------------------------------------------------------------------------------------------------
 * Display categories menu
 * ------------------------------------------------------------------------------------------------
 */

if( ! function_exists( 'kloud_product_categories_nav' ) ) {
	function kloud_product_categories_nav() {
		global $wp_query, $post;

		//$show_subcategories = kloud_get_opt( 'shop_categories_ancestors' );

		$list_args = array(  
			'taxonomy' => 'product_cat', 
			'hide_empty' => false 
		);

		// Menu Order
		$list_args['menu_order'] = false;
		$list_args['menu_order'] = 'asc';

		// Setup Current Category
		$current_cat   = false;
		$cat_ancestors = array();

		if ( is_tax( 'product_cat' ) ) {

			$current_cat   = $wp_query->queried_object;
			$cat_ancestors = get_ancestors( $current_cat->term_id, 'product_cat' );

		}

		$list_args['depth']            = 5;
		$list_args['child_of']         = 0;
		$list_args['title_li']         = '';
		$list_args['hierarchical']     = 1;
		$list_args['use_desc_for_title']= false;


		$shop_link = get_post_type_archive_link( 'product' );

		include_once( WC()->plugin_path() . '/includes/walkers/class-product-cat-list-walker.php' );

		echo '<a href="#" class="kloud-show-categories">' . __('Categories', 'kloud') . '</a>';

		echo '<ul class="kloud-product-categories">';
		
		echo '<li class="cat-link shop-all-link"><a href="' . esc_url( $shop_link ) . '">' . __('All', 'kloud') . '</a></li>';

		if( $show_subcategories ) {
		//	kloud_show_category_ancestors();
		} else {
			wp_list_categories( $list_args  );
		}

		echo '</ul>';
	}
}
/**
	 * Display a tool bar on top of product archive
	 *
	 * @since 1.0
	 */

    /**
	 * show categories filter
	 *
	 * @return string
	 */
	function get_categories_filter() {

		$filters = '';
		$output  = array();
		$number  = apply_filters( 'kloud_product_cats_filter_number', 4 );

		$term_id    = 0;
		$args       = array(
			'parent'  => $term_id,
			'number'  => $number,
			'orderby' => 'count',
			'order'   => 'desc'
		);
		$categories = get_terms( 'product_cat', $args );

		$current_id = '';
		if ( is_tax( 'product_cat' ) ) {
			$queried_object = get_queried_object();
			if ( $queried_object ) {
				$current_id = $queried_object->term_id;
			}
		}

		$found = false;

		if ( ! is_wp_error( $categories ) && $categories ) {
			foreach ( $categories as $cat ) {

				$css_class = '';
				if ( $cat->term_id == $current_id ) {
					$css_class = 'selected';
					$found     = true;
				}
				$filters .= sprintf( '<li><a class="%s" href="%s">%s</a></li>', esc_attr( $css_class ), esc_url( get_term_link( $cat ) ), esc_html( $cat->name ) );
			}
		}

		$css_class = $found ? '' : 'selected';

		if ( $filters ) {
			$output[] = sprintf(
				'<ul class="option-set" data-option-key="filter">
				<li><a href="%s" class="%s">%s</a></li>
				 %s
			</ul>',
				esc_url( get_permalink( get_option( 'woocommerce_shop_page_id' ) ) ),
				esc_attr( $css_class ),
				esc_html__( 'All', 'kloud' ),
				$filters
			);
		}


		return '<div class="blas-filter-cat"><div class="container"><div id="jws-categories-filter" class="jws-categories-filter">' . implode( "\n", $output ) . '</div></div></div>';

	}
    function get_colunm_shop() { 
        $columns = "";
        if( isset( $_GET['columns'] ) && $_GET['columns'] == "2" ){ 
            $columns = "6";
        }elseif(isset( $_GET['columns'] ) && $_GET['columns'] == "3") {
            $columns = "4";
        }elseif(isset( $_GET['columns'] ) && $_GET['columns'] == "4") {
            $columns = "3";
        }elseif(isset( $_GET['columns'] ) && $_GET['columns'] == "5") {
            $columns = "5";
        }elseif(isset( $_GET['columns'] ) && $_GET['columns'] == "6") {
            $columns = "2";
        }else {
           $columns = cs_get_option( 'wc-column' );
        };
        
         $abc = cs_get_option( 'shop-column-filter' ) ;
          wp_enqueue_script( 'layoutshop', URI_PATH.'/assets/js/dev/woocomerce/shop_layout.js', array('jquery'), '', true  );
        ?>
            <div class="layout-shop">
            <div class="wc-col-filter button-group flex ">
            <span><?php esc_html_e('See' , 'kloud') ?></span>
            <a class="hidden-md hidden-sm hidden-lg visible-xs one <?php echo wp_kses_post($columns == '12' ? ' active' : '') ; ?>" data-col="12" data-filter="*" ></a>
            <?php if(isset($abc[ 'wc-2' ]) && $abc[ 'wc-2' ] == '1') { ?>
                    <a class=" two <?php echo wp_kses_post($columns == '6' ? ' active' : '') ; ?> "  data-col="6" data-filter=".col-md-6">2</a>
            <?php } ?>  
            <?php if(isset($abc[ 'wc-3' ]) && $abc[ 'wc-3' ] == '1') { ?>
                    <a class=" hidden-xs three <?php echo wp_kses_post($columns == '4' ? ' active' : '') ; ?> "  data-col="4" data-filter=".col-md-4">3</a>
            <?php } ?>
            <?php if(isset($abc[ 'wc-4' ]) && $abc[ 'wc-4' ] == '1') { ?>
                    <a class=" hidden-xs four <?php echo wp_kses_post($columns == '3' ? ' active' : '') ; ?>   "  data-col="3" data-filter=".col-md-3">4</a>
            <?php } ?>
            <?php if(isset($abc[ 'wc-5' ]) && $abc[ 'wc-5' ] == '1') { ?>
                    <a class=" hidden-xs four <?php echo wp_kses_post($columns == '5' ? ' active' : '') ; ?>   "  data-col="20" data-filter=".col-md-20">5</a>
            <?php } ?>
            <?php if(isset($abc[ 'wc-6' ]) && $abc[ 'wc-6' ] == '1') { ?>
                    <a class=" hidden-xs four <?php echo wp_kses_post($columns == '2' ? ' active' : '') ; ?>   "  data-col="2" data-filter=".col-md-2">6</a>
            <?php } ?>
            </div>
            </div>
        
        <?php   
    }
    /*
	 *	Add-to-cart (AJAX) redirect: Include custom template
	 */
	function nm_ajax_add_to_cart_redirect_template() {
		if ( isset( $_REQUEST['jws-ajax-add-to-cart'] ) ) {
			wc_get_template( 'ajax-add-to-cart-fragments.php' );
			exit;
		}
	}
	add_action( 'wp', 'nm_ajax_add_to_cart_redirect_template', 1000 );
    add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' );
/**
 * Add extra link after single cart.
 *
 * @since 1.0.0
 */
function jws_kloud_wc_add_extra_link_after_cart() {
	// Get page options
	$options = get_post_meta( get_the_ID(), '_custom_wc_options', true );

	// Get image to display size guide
	$size_guide = ( isset( $options['wc-single-size-guide'] ) && $options['wc-single-size-guide'] ) ? $options['wc-single-size-guide'] : cs_get_option( 'wc-single-size-guide' );

    if($size_guide) {
        	echo '<div class="my-size">';
		if ( ! empty( $size_guide ) ) {
			echo '<a class="jws-magnific-image" href="' . esc_url( $size_guide ) . '">' . esc_html__( 'What my size?', 'kloud' ) . '</a>';
		}
	echo '</div>';
    ?>
        <script type="text/javascript">
        jQuery(document).ready(function ($) {
          
        		if ( $( '.jws-magnific-image' ).length > 0 ) {
        			$( '.jws-magnific-image' ).magnificPopup({
        				type: 'image',
        				image: {
        					verticalFit: true
        				},
        				mainClass: 'mfp-fade',
        				removalDelay: 0,
        				callbacks: {
        					beforeOpen: function() {
        						$( '#jws-wrapper' ).after( '<div class="loader"><div class="loader-inner"></div></div>' );
        					},
        					open: function() {
        						$( '.loader' ).remove();
        					},
        				}
        			});
        		}
        	
            });
        </script> 
   <?php }

   
}
/**
 * Add banner single product.
 *
 * @since 1.0.0
 */
function jws_add_banner() {
	// Get page options
	$options = get_post_meta( get_the_ID(), '_custom_wc_options', true );

	// Get image to display size guide
	$banner = ( isset( $options['wc-single-banner'] ) && $options['wc-single-banner'] ) ? $options['wc-single-banner'] : cs_get_option( 'wc-single-banner' );
    $banner_link = ( isset( $options['wc-single-banner-link'] ) && $options['wc-single-banner-link'] ) ? $options['wc-single-banner-link'] : cs_get_option( 'wc-single-banner-link' );
    

    if($banner) {
			echo '<a class="jws-banner-single" href="' . esc_url( $banner_link ) . '"><img src = "'.esc_url( $banner ).'">'.'</a>';
		
    ?>
   <?php }

   
}
/**
 * Change product image thumbnail size.
 *
 * @since 1.0.0
 */

function jws_kloud_wc_change_image_thumbnail_size( $size ) {
	// Get product list style
	$style = cs_get_option( 'wc-style' ) ;
	// Get image size
	$shop_catalog = wc_get_image_size( 'shop_catalog' );

	// Get product options
	$options = get_post_meta( get_the_ID(), '_custom_wc_thumb_options', true );
	if ( is_shop() && $style == 'metro' &&  ( isset( $options['wc-thumbnail-size'] ) && $options['wc-thumbnail-size'] ) ) {
		add_image_size( 'jws_shop_metro', $shop_catalog['width'] * 2, $shop_catalog['height'] * 2, true );
		$size = 'shop_catalog';
	}
    elseif (is_shop() &&  $style == 'masonry' ) {
		add_image_size( 'jws_shop_masonry', $shop_catalog['width'] * 1, $shop_catalog['height'] * 1, true );
		$size = 'jws_shop_masonry';
	}
     else {
		$size = 'shop_catalog';
	}
	return $size;
    
}
add_filter( 'single_product_archive_thumbnail_size', 'jws_kloud_wc_change_image_thumbnail_size' );
/**
 * ------------------------------------------------------------------------------------------------
 * My account sidebar
 * ------------------------------------------------------------------------------------------------
 */

if( ! function_exists( 'kloud_before_my_account_navigation' ) ) {
	function kloud_before_my_account_navigation() {
		echo '<div class="jws-my-account-sidebar">';
		the_title( '<h3 class="woocommerce-MyAccount-title entry-title">', '</h3>' );
	}

	add_action( 'woocommerce_account_navigation', 'kloud_before_my_account_navigation', 1 );
}

if( ! function_exists( 'kloud_after_my_account_navigation' ) ) {
	function kloud_after_my_account_navigation() {
		$sidebar_name = 'sidebar-my-account';
		if ( is_active_sidebar( $sidebar_name ) ) : ?>
			<aside class="sidebar-container" role="complementary">
				<div class="sidebar-inner">
					<div class="widget-area">
						<?php dynamic_sidebar( $sidebar_name ); ?>
					</div><!-- .widget-area -->
				</div><!-- .sidebar-inner -->
			</aside><!-- .sidebar-container -->
		<?php endif;
		echo '</div><!-- .kloud-my-account-sidebar -->';
	}

	add_action( 'woocommerce_account_navigation', 'kloud_after_my_account_navigation', 30 );
}
/**
* @snippet Remove the Postcode Field on the WooCommerce Checkout
* @how-to Watch tutorial @ https://businessbloomer.com/?p=19055
* @sourcecode https://businessbloomer.com/?p=461
* @author Rodolfo Melogli
* @testedwith WooCommerce 2.5.5
*/
 
add_filter( 'woocommerce_checkout_fields' , 'bbloomer_remove_billing_postcode_checkout' );
 
function bbloomer_remove_billing_postcode_checkout( $fields ) {
  unset($fields['billing']['billing_state']);
  unset($fields['account']['account_username']);
  unset($fields['account']['account_password']);
unset($fields['account']['account_password-2']);
unset($fields['billing']['billing_address_2']);
  return $fields;
}
/**
 * Auto update cart after quantity change
 *
 * @return  string
 **/
  /*
	 *	Get cart contents count
	 */
	function nm_get_cart_contents_count() {
        $cart_count = apply_filters( 'nm_cart_count', WC()->cart->cart_contents_count );
        $count_class = ( $cart_count > 0 ) ? '' : ' jws-count-zero';
        
		return '<span class="jws-menu-cart-count count' . $count_class . '">' . $cart_count . '</span>';
	}
    /*
	 *	Cart: Get refreshed header fragment
	 */
	if ( ! function_exists( 'nm_header_add_to_cart_fragment' ) ) {
		function nm_header_add_to_cart_fragment( $fragments ) {
            $cart_count = nm_get_cart_contents_count();
			$fragments['.count'] = $cart_count;
            
			return $fragments;
		}
	}
	add_filter( 'woocommerce_add_to_cart_fragments', 'nm_header_add_to_cart_fragment' ); // Ensure cart contents update when products are added to the cart via Ajax
	
    function nm_get_cart_fragments( $return_array = array() ) {
		// Get cart count
		$cart_count = nm_header_add_to_cart_fragment( array() );
		
		// Get cart panel
		ob_start();
		woocommerce_mini_cart();
		$cart_panel = ob_get_clean();
		
		return apply_filters( 'woocommerce_add_to_cart_fragments', array(
			'.count' 				=> reset( $cart_count ),
			'div.widget_shopping_cart_content'	=> '<div class="widget_shopping_cart_content">' . $cart_panel . '</div>'
		) );
	}
    /*
	 *	Cart: Get refreshed hash
	 */
	function nm_get_cart_hash() {
		return 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() );
	}
	/*
	 *	Cart panel: AJAX - Remove product from cart
	 */
	function nm_cart_panel_remove_product() {
		$cart_item_key = $_POST['cart_item_key'];
		
		$cart = WC()->instance()->cart;
		$removed = $cart->remove_cart_item( $cart_item_key ); // Note: WP 2.3 >
        
		if ( $removed )	{
			$json_array['status'] = '1';
			
            // Not replacing whole cart-panel by default (thumbnails "flicker" when they're replaced)
            if ( defined( 'NM_CART_PANEL_REPLACE' ) ) {
                $json_array['fragments'] = nm_get_cart_fragments();
            } else {
                $json_array['fragments'] = apply_filters( 'woocommerce_add_to_cart_fragments', array(
                    '.jws-menu-cart-count'                              => nm_get_cart_contents_count(), // Cart count
                    '.jws-mini-cart .jws-cart-panel-summary-subtotal' => '<span class="jws-cart-panel-summary-subtotal">' . WC()->cart->get_cart_subtotal() . '</span>' // Cart subtotal
                ) );
            }
			
            $json_array['cart_hash'] = nm_get_cart_hash();
		} else {
			$json_array['status'] = '0';
		}
		
		echo json_encode( $json_array );
				
		exit;
	}
	add_action( 'wp_ajax_nm_cart_panel_remove_product' , 'nm_cart_panel_remove_product' );
	add_action( 'wp_ajax_nopriv_nm_cart_panel_remove_product', 'nm_cart_panel_remove_product' );
    /*
	 *	Cart panel: AJAX - Update quantity
	 */
	function nm_cart_panel_update_quantity() {
        $nm_json_array = array();
        
        // WooCommerce: Code copied from the "../woocommerce/includes/class-wc-form-handler.php" source file
        $cart_updated = false;
        $cart_totals  = isset( $_POST['cart'] ) ? $_POST['cart'] : '';

        //if ( ! WC()->cart->is_empty() && is_array( $cart_totals ) ) {
        if ( is_array( $cart_totals ) ) {
            foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {

                $_product = $values['data'];

                // Skip product if no updated quantity was posted
                if ( ! isset( $cart_totals[ $cart_item_key ] ) || ! isset( $cart_totals[ $cart_item_key ]['qty'] ) ) {
                    continue;
                }

                // Sanitize
                $quantity = apply_filters( 'woocommerce_stock_amount_cart_item', wc_stock_amount( preg_replace( "/[^0-9\.]/", '', $cart_totals[ $cart_item_key ]['qty'] ) ), $cart_item_key );

                if ( '' === $quantity || $quantity == $values['quantity'] )
                    continue;

                // Update cart validation
                $passed_validation 	= apply_filters( 'woocommerce_update_cart_validation', true, $cart_item_key, $values, $quantity );

                // is_sold_individually
                if ( $_product->is_sold_individually() && $quantity > 1 ) {
                    //wc_add_notice( sprintf( __( 'You can only have 1 %s in your cart.', 'kloud' ), $_product->get_title() ), 'error' );
                    $passed_validation = false;
                }

                if ( $passed_validation ) {
                    WC()->cart->set_quantity( $cart_item_key, $quantity, false );
                    $cart_updated = true;
                    
                    // NM
                    // Save "cart item key" ("$cart_item_key" is overwritten)
                    $nm_cart_item_key = $cart_item_key;
                    // Code from "../kloud/woocommerce/cart/cart.php" (variable names changed)
                    $nm_cart_item_subtotal = apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $quantity ), $values, $cart_item_key );
                    // /NM
                }

            }
        }
        
        // Trigger action - let 3rd parties update the cart if they need to and update the $cart_updated variable
        $cart_updated = apply_filters( 'woocommerce_update_cart_action_cart_updated', $cart_updated );

        if ( $cart_updated ) {
            // Recalc our totals
            WC()->cart->calculate_totals();
            
            // NM
            $nm_json_array['status'] = '1';
			$nm_json_array['fragments'] = apply_filters( 'woocommerce_add_to_cart_fragments', array(
                '.menu-cart-count'                                                       => nm_get_cart_contents_count(), // Cart count
                '#jws-cart-panel-item-' . $nm_cart_item_key . ' .jws-cart-panel-item-price'   => '<div class="jws-cart-panel-item-price">' . $nm_cart_item_subtotal .  '</div>', // Cart item subtotal
                '.jws-mini-cart  .jws-cart-panel-summary-subtotal'                          => '<span class="jws-cart-panel-summary-subtotal">' . WC()->cart->get_cart_subtotal() . '</span>' // Cart subtotal
            ) );
        } else {
            $nm_json_array['status'] = '0';
		}
        // /NM
        // /WooCommerce
        
        echo json_encode( $nm_json_array );
        
		exit;
	}
	add_action( 'wp_ajax_nm_cart_panel_update' , 'nm_cart_panel_update_quantity' );
	add_action( 'wp_ajax_nopriv_nm_cart_panel_update', 'nm_cart_panel_update_quantity' );  