/home/preegmxb/gymnyou.com/wp-content/themes/authentic/inc/woocommerce.php
<?php
/**
 * WooCommerce compatibility functions.
 *
 * @package Authentic
 */

if ( class_exists( 'WooCommerce' ) ) {

	/**
	 * -------------------------------------------------------------------------
	 * [ Set Settings of Kirki ]
	 * -------------------------------------------------------------------------
	 */

	add_filter( 'csco_border_radius', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce #respond input#submit, .woocommerce a.button, .woocommerce button.button, .woocommerce input.button, .woocommerce.widget_product_search button, .wc-block-featured-category .wp-block-button__link, .wc-block-featured-product .wp-block-button__link, .wc-block-grid .wp-block-button__link',
			'property' => 'border-radius',
		) );
		return $rules;
	} );

	/**
	 * -------------------------------------------------------------------------
	 * [ Set Colors of Kirki ]
	 * -------------------------------------------------------------------------
	 */

	add_filter( 'csco_color_body_bg', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce.widget_product_search input[type="search"].search-field, .select2-container--default .select2-selection--single, .select2-dropdown',
			'property' => 'background-color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_body_bg', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce div.product .woocommerce-tabs ul.tabs li.active a',
			'property' => 'border-bottom-color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_text', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce.widget_product_search input[type="search"].search-field, .select2-container--default .select2-selection--single .select2-selection__rendered',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_text_secondary', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce ul.products li.product .price, .woocommerce .widget_price_filter .price_slider_amount, .woocommerce ul.cart_list li .reviewer, .woocommerce ul.product_list_widget li .reviewer, .woocommerce .woocommerce-result-count, .woocommerce .product_meta, .woocommerce div.product p.price del,.woocommerce div.product span.price del, .woocommerce .woocommerce-review-link, .woocommerce-review__published-date, .woocommerce table.shop_table th, .woocommerce table.shop_table_responsive tr td::before, .woocommerce-page table.shop_table_responsive tr td::before, .select2-container--default .select2-results__option[aria-selected=true], .select2-container--default .select2-results__option[data-selected=true]',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_links', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce ul.products li.product .price ins, .woocommerce .widget_layered_nav ul li.chosen a:before, .woocommerce div.product p.price, .woocommerce div.product span.price, .woocommerce .quantity-controls input, .woocommerce .woocommerce-review-link:hover, .woocommerce div.product .woocommerce-tabs ul.tabs li a, .woocommerce p.stars a:hover, .woocommerce .order-total .amount',
			'property' => 'color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce a.remove',
			'property' => 'color',
			'suffix'   => '!important',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_links_hover', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce .widget_layered_nav ul li.chosen a:hover:before, .woocommerce p.stars a, .woocommerce .woocommerce-MyAccount-navigation-link.is-active a',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_colors_borders', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce.widget_product_search input[type="search"].search-field, .woocommerce .cart-collaterals .cart_totals, .woocommerce form.checkout_coupon, .woocommerce form.login, .woocommerce form.register, .select2-container--default .select2-selection--single, .select2-dropdown, .woocommerce form .form-row.woocommerce-validated .select2-container, .woocommerce form .form-row.woocommerce-validated input.input-text, .woocommerce form .form-row.woocommerce-validated select, .woocommerce table.woocommerce-checkout-review-order-table, #add_payment_method #payment, .woocommerce-cart #payment, .woocommerce-checkout #payment, #add_payment_method table.cart td.actions .coupon .input-text, .woocommerce-cart table.cart td.actions .coupon .input-text, .woocommerce-checkout table.cart td.actions .coupon .input-text, .woocommerce table.woocommerce-table--order-details, .woocommerce .woocommerce-MyAccount-navigation ul',
			'property' => 'border-color',
		) );
		array_push( $rules, array(
			'element'  => ' .woocommerce .widget_shopping_cart .total, .woocommerce.widget_shopping_cart .total, .wc-block-product-categories > ul > li:not(:first-child), .widget_product_categories > ul > li:not(:first-child), .woocommerce .widget_layered_nav > ul > li:not(:first-child), .woocommerce .product_meta, .pk-nav-tabs .pk-nav-link.pk-active, .woocommerce div.product .woocommerce-tabs ul.tabs li.active a, .woocommerce #review_form, .woocommerce table.shop_table td, #add_payment_method .cart-collaterals .cart_totals tr td, #add_payment_method .cart-collaterals .cart_totals tr th, .woocommerce-cart .cart-collaterals .cart_totals tr td, .woocommerce-cart .cart-collaterals .cart_totals tr th, .woocommerce-checkout .cart-collaterals .cart_totals tr td, .woocommerce-checkout .cart-collaterals .cart_totals tr th, .woocommerce table.shop_table tbody th, .woocommerce table.shop_table tfoot td, .woocommerce table.shop_table tfoot th',
			'property' => 'border-top-color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce div.product .woocommerce-tabs ul.tabs',
			'property' => 'border-bottom-color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce div.product .woocommerce-tabs ul.tabs li.active a',
			'property' => 'border-left-color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce div.product .woocommerce-tabs ul.tabs li.active a',
			'property' => 'border-right-color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce .widget_price_filter .price_slider_wrapper .ui-widget-content',
			'property' => 'background-color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce .star-rating:before',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_colors_borders', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.wc-block-product-categories > ul > li:not(:first-child)',
			'property' => 'border-top-color',
			'context'  => array( 'editor' ),
		) );
		return $rules;
	} );

	add_filter( 'csco_colors_accent', function( $rules ) {
		array_push( $rules, array(
			'element'  => 'div.quantity input, .woocommerce-error, .woocommerce-info, .woocommerce-message, .progress, .woocommerce div.product .woocommerce-tabs ul.tabs li:not(.active) a:hover, .woocommerce table.shop_attributes tr:nth-child(even) td, .woocommerce table.shop_attributes tr:nth-child(even) th, .woocommerce .woocommerce-Reviews #comments, .woocommerce #review_form_wrapper, #add_payment_method #payment div.form-row, .woocommerce-cart #payment div.form-row, .woocommerce-checkout #payment div.form-row, .woocommerce ul.order_details',
			'property' => 'background-color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_headings', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce .widget_shopping_cart .total strong, .woocommerce.widget_shopping_cart .total strong, .woocommerce .widget_shopping_cart .total .amount, .woocommerce.widget_shopping_cart .total .amount, .woocommerce-review__author, .comment-reply-title, #ship-to-different-address > label',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_btn_primary_text', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce #respond input#submit, .woocommerce a.button, .woocommerce button.button, .woocommerce input.button, .woocommerce #respond input#submit.alt, .woocommerce a.button.alt, .woocommerce button.button.alt, .woocommerce input.button.alt, .woocommerce #respond input#submit.alt:hover, .woocommerce a.button.alt:hover, .woocommerce button.button.alt:hover, .woocommerce input.button.alt:hover, .woocommerce span.onsale, .header-cart .cart-quantity, .woocommerce.widget_product_search input[type=submit], .product-thumbnail .added_to_cart, .woocommerce a.remove:hover, .select2-container--default .select2-results__option--highlighted[aria-selected], .woocommerce.widget_product_search button',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_btn_primary_text_hover', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce #respond input#submit:hover, .woocommerce a.button:hover, .woocommerce button.button:hover, .woocommerce input.button:hover,  .header-cart:hover .cart-quantity, .post-tags a:focus, .post-tags a:hover, .woocommerce.widget_product_search input[type=submit]:hover, .product-thumbnail .added_to_cart:hover, .woocommerce.widget_product_search button:hover',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_btn_primary_bg', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce #respond input#submit, .woocommerce a.button, .woocommerce button.button, .woocommerce input.button, .woocommerce span.onsale, .header-cart .cart-quantity, .woocommerce .widget_price_filter .ui-slider .ui-slider-handle, .woocommerce .widget_price_filter .ui-slider .ui-slider-range, .woocommerce.widget_product_search input[type=submit], .product-thumbnail .added_to_cart, .woocommerce #respond input#submit.alt, .woocommerce a.button.alt, .woocommerce button.button.alt, .woocommerce input.button.alt, .woocommerce a.remove:hover, .select2-container--default .select2-results__option--highlighted[aria-selected], .woocommerce.widget_product_search button',
			'property' => 'background-color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce .star-rating span:before',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_btn_primary_bg_hover', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce #respond input#submit:hover, .woocommerce a.button:hover, .woocommerce button.button:hover, .woocommerce input.button:hover,  .header-cart:hover .cart-quantity, .woocommerce.widget_product_search input[type=submit]:hover, .product-thumbnail .added_to_cart:hover, .woocommerce #respond input#submit.alt:hover, .woocommerce a.button.alt:hover, .woocommerce button.button.alt:hover, .woocommerce input.button.alt:hover, .woocommerce.widget_product_search button:hover',
			'property' => 'background-color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_btn_secondary_text', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce #respond input#submit.disabled, .woocommerce #respond input#submit:disabled, .woocommerce a.button.disabled, .woocommerce a.button:disabled, .woocommerce button.button.disabled, .woocommerce button.button:disabled, .woocommerce input.button.disabled, .woocommerce input.button:disabled, .woocommerce.widget_product_search input[type=submit].disabled, .woocommerce.widget_product_search input[type=submit]:disabled, .woocommerce .added_to_cart.disabled, .woocommerce .added_to_cart:disabled, .woocommerce #respond input#submit.alt.disabled, .woocommerce #respond input#submit.alt.disabled:hover, .woocommerce #respond input#submit.alt:disabled, .woocommerce #respond input#submit.alt:disabled:hover, .woocommerce #respond input#submit.alt:disabled[disabled], .woocommerce #respond input#submit.alt:disabled[disabled]:hover, .woocommerce a.button.alt.disabled, .woocommerce a.button.alt.disabled:hover, .woocommerce a.button.alt:disabled, .woocommerce a.button.alt:disabled:hover, .woocommerce a.button.alt:disabled[disabled], .woocommerce a.button.alt:disabled[disabled]:hover, .woocommerce button.button.alt.disabled, .woocommerce button.button.alt.disabled:hover, .woocommerce button.button.alt:disabled, .woocommerce button.button.alt:disabled:hover, .woocommerce button.button.alt:disabled[disabled], .woocommerce button.button.alt:disabled[disabled]:hover, .woocommerce input.button.alt.disabled, .woocommerce input.button.alt.disabled:hover, .woocommerce input.button.alt:disabled, .woocommerce input.button.alt:disabled:hover, .woocommerce input.button.alt:disabled[disabled], .woocommerce input.button.alt:disabled[disabled]:hover',
			'property' => 'color',
			'suffix'   => '!important',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_btn_secondary_bg', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce #respond input#submit.disabled, .woocommerce #respond input#submit:disabled, .woocommerce a.button.disabled, .woocommerce a.button:disabled, .woocommerce button.button.disabled, .woocommerce button.button:disabled, .woocommerce input.button.disabled, .woocommerce input.button:disabled, .woocommerce.widget_product_search input[type=submit].disabled, .woocommerce.widget_product_search input[type=submit]:disabled, .woocommerce .added_to_cart.disabled, .woocommerce .added_to_cart:disabled, .woocommerce #respond input#submit.alt.disabled, .woocommerce #respond input#submit.alt.disabled:hover, .woocommerce #respond input#submit.alt:disabled, .woocommerce #respond input#submit.alt:disabled:hover, .woocommerce #respond input#submit.alt:disabled[disabled], .woocommerce #respond input#submit.alt:disabled[disabled]:hover, .woocommerce a.button.alt.disabled, .woocommerce a.button.alt.disabled:hover, .woocommerce a.button.alt:disabled, .woocommerce a.button.alt:disabled:hover, .woocommerce a.button.alt:disabled[disabled], .woocommerce a.button.alt:disabled[disabled]:hover, .woocommerce button.button.alt.disabled, .woocommerce button.button.alt.disabled:hover, .woocommerce button.button.alt:disabled, .woocommerce button.button.alt:disabled:hover, .woocommerce button.button.alt:disabled[disabled], .woocommerce button.button.alt:disabled[disabled]:hover, .woocommerce input.button.alt.disabled, .woocommerce input.button.alt.disabled:hover, .woocommerce input.button.alt:disabled, .woocommerce input.button.alt:disabled:hover, .woocommerce input.button.alt:disabled[disabled], .woocommerce input.button.alt:disabled[disabled]:hover',
			'property' => 'background-color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_footer_text', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.site-footer .widget_price_filter .ui-slider .ui-slider-handle',
			'property' => 'background-color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_footer_link', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce .site-footer .widget_shopping_cart .total strong, .site-footer .woocommerce.widget_shopping_cart .total strong, .woocommerce .site-footer .widget_shopping_cart .total .amount, .site-footer .woocommerce.widget_shopping_cart .total .amount, .woocommerce .site-footer .star-rating span::before',
			'property' => 'color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce .site-footer a.remove',
			'property' => 'color',
			'suffix'   => '!important',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_footer_border', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce .site-footer .widget_price_filter .ui-slider .ui-slider-range, .woocommerce .site-footer .widget_price_filter .price_slider_wrapper .ui-widget-content',
			'property' => 'background-color',
		) );
		array_push( $rules, array(
			'element'  => '.site-footer .widget_product_categories > ul > li:not(:first-child), .site-footer .widget_layered_nav > ul > li:not(:first-child), .woocommerce .site-footer .widget_shopping_cart .total, .site-footer .woocommerce.widget_shopping_cart .total',
			'property' => 'border-top-color',
		) );
		array_push( $rules, array(
			'element'  => '.woocommerce .site-footer .star-rating::before',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_footer_btn_text', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce .site-footer a.button, .woocommerce .site-footer button.button, .site-footer .pk-subscribe-submit, .woocommerce .site-footer input.button',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_footer_btn_text_hover', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce .site-footer a.button:hover, .woocommerce .site-footer button.button:hover, .woocommerce .site-footer input.button:hover',
			'property' => 'color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_footer_btn_bg', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce .site-footer a.button, .woocommerce .site-footer button.button, .woocommerce .site-footer input.button',
			'property' => 'background-color',
		) );
		return $rules;
	} );

	add_filter( 'csco_color_footer_btn_bg_hover', function( $rules ) {
		array_push( $rules, array(
			'element'  => '.woocommerce .site-footer a.button:hover, .woocommerce .site-footer button.button:hover, .woocommerce .site-footer input.button:hover',
			'property' => 'background-color',
		) );
		return $rules;
	} );

	/**
	 * -------------------------------------------------------------------------
	 * [ Set Typography of Kirki ]
	 * -------------------------------------------------------------------------
	 */
	add_filter( 'csco_section_heading_font', function( $rules ) {
		array_push( $rules, array(
			'element' => '.woocommerce .cart_totals > h2, .woocommerce-billing-fields > h3, #ship-to-different-address > label, #order_review_heading, .woocommerce .woocommerce-order-details__title, .woocommerce .woocommerce-customer-details > h2, .woocommerce .woocommerce-column__title, .woocommerce .woocommerce-Address-title h3',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_base', function( $rules ) {
		array_push( $rules, array(
			'element' => '.woocommerce.widget_product_search input[type="search"].search-field',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_text_small', function( $rules ) {
		array_push( $rules, array(
			'element' => '.woocommerce .widget_price_filter .price_slider_amount, .woocommerce ul.cart_list li .reviewer, .woocommerce ul.product_list_widget li .reviewer, .woocommerce .woocommerce-result-count, .woocommerce .product_meta,  .woocommerce-error, .woocommerce-info, .woocommerce-message, .woocommerce .woocommerce-review-link, .woocommerce-review__published-date, .woocommerce table.shop_table th, .woocommerce table.shop_table_responsive tr td::before, .woocommerce-page table.shop_table_responsive tr td::before, .header-cart .cart-quantity',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_buttons', function( $rules ) {
		array_push( $rules, array(
			'element' => '.woocommerce #respond input#submit, .woocommerce a.button, .woocommerce button.button, .woocommerce input.button, .woocommerce .widget_price_filter .price_slider_amount .button, body .woocommerce.widget_product_search input[type=submit], .woocommerce span.onsale, .product-thumbnail .added_to_cart, .woocommerce div.product form.cart .reset_variations, .woocommerce div.product .woocommerce-tabs ul.tabs li a, #add_payment_method .wc-proceed-to-checkout a.checkout-button, .woocommerce-cart .wc-proceed-to-checkout a.checkout-button, .woocommerce-checkout .wc-proceed-to-checkout a.checkout-button, .woocommerce.widget_product_search button',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_headings', function( $rules ) {
		array_push( $rules, array(
			'element' => '.woocommerce ul.cart_list li a, .woocommerce ul.product_list_widget li a, .woocommerce .widget_shopping_cart .total strong, .woocommerce.widget_shopping_cart .total strong, .woocommerce .widget_shopping_cart .total .amount, .woocommerce.widget_shopping_cart .total .amount, .woocommerce-review__author, .woocommerce .cart_item .product-name a, #ship-to-different-address > label',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_h5', function( $rules ) {
		array_push( $rules, array(
			'element' => '.woocommerce ul.cart_list li a, .woocommerce ul.product_list_widget li a, .woocommerce .widget_shopping_cart .total strong, .woocommerce.widget_shopping_cart .total strong, .woocommerce-loop-product__title, .woocommerce .cart_item .product-name a',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_h6', function( $rules ) {
		array_push( $rules, array(
			'element' => '.woocommerce-review__author',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_menus', function( $rules ) {
		array_push( $rules, array(
			'element' => '.wc-block-product-categories li, .woocommerce.widget_product_categories li, .woocommerce .widget_layered_nav li, .woocommerce .woocommerce-MyAccount-navigation-link a',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_submenus', function( $rules ) {
		array_push( $rules, array(
			'element' => '.wc-block-product-categories ul ul li a, .widget_product_categories .children li a',
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_menus', function( $rules ) {
		array_push( $rules, array(
			'element' => '.wc-block-product-categories li',
			'context' => array( 'editor' ),
		) );
		return $rules;
	} );

	add_filter( 'csco_typography_submenus', function( $rules ) {
		array_push( $rules, array(
			'element' => '.wc-block-product-categories ul ul li a',
			'context' => array( 'editor' ),
		) );
		return $rules;
	} );

	/**
	 * -------------------------------------------------------------------------
	 * [ General ]
	 * -------------------------------------------------------------------------
	 */

	/**
	 * Declare WooCommerce Support
	 */
	function csco_woocommerce_support() {
		add_theme_support( 'woocommerce', array(
			'gallery_thumbnail_image_width' => 560,
			'thumbnail_image_width'         => 560,
			'single_image_width'            => 560,
		) );
		add_theme_support( 'wc-product-gallery-zoom' );
		add_theme_support( 'wc-product-gallery-lightbox' );
	}

	add_action( 'after_setup_theme', 'csco_woocommerce_support' );

	/**
	 * Enqueues WooCommerce assets.
	 */
	function csco_wc_enqueue_scripts() {

		$theme   = wp_get_theme();
		$version = $theme->get( 'Version' );

		// Register WooCommerce styles.
		wp_register_style( 'csco_css_wc', csco_style( get_template_directory_uri() . '/css/woocommerce.css' ), array(), $version );

		// Enqueue WooCommerce styles.
		wp_enqueue_style( 'csco_css_wc' );

		// Add RTL support.
		wp_style_add_data( 'csco_css_wc', 'rtl', 'replace' );
	}

	add_action( 'wp_enqueue_scripts', 'csco_wc_enqueue_scripts' );

	/**
	 * PinIt exclude selectors
	 *
	 * @param string $selectors List selectors.
	 */
	function csco_wc_pinit_exclude_selectors( $selectors ) {
		$selectors[] = '.woocommerce .products img';
		$selectors[] = '.woocommerce-product-gallery img';
		$selectors[] = '.woocommerce-cart-form .product-thumbnail img';
		$selectors[] = '.wc-block-featured-category';
		$selectors[] = '.wc-block-featured-product';
		$selectors[] = '.wp-block-handpicked-products';
		$selectors[] = '.wc-block-grid';

		return $selectors;
	}
	add_filter( 'powerkit_pinit_exclude_selectors', 'csco_wc_pinit_exclude_selectors' );

	/**
	 * Define WooCommerce image sizes
	 */
	function csco_wc_after_switch_theme() {

		if ( get_option( 'csco_authentic_wc_image_sizes_set' ) ) {
			return;
		}

		$catalog   = array(
			'width'  => '560',
			'height' => '560',
			'crop'   => true,
		);
		$single    = array(
			'width'  => '560',
			'height' => '560',
			'crop'   => true,
		);
		$thumbnail = array(
			'width'  => '90',
			'height' => '90',
			'crop'   => true,
		);

		update_option( 'shop_catalog_image_size', $catalog );
		update_option( 'shop_single_image_size', $single );
		update_option( 'shop_thumbnail_image_size', $thumbnail );

		update_option( 'csco_authentic_wc_image_sizes_set', true );
	}

	add_action( 'after_switch_theme', 'csco_wc_after_switch_theme' );

	/**
	 * -------------------------------------------------------------------------
	 * [ Layout ]
	 * -------------------------------------------------------------------------
	 */

	// Remove default wrappers.
	remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
	remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );

	/**
	 * Wrapper Start
	 */
	function csco_wc_wrapper_start() {
		?><div id="primary" class="content-area">
		<?php
	}

	/**
	 * Wrapper End
	 */
	function csco_wc_wrapper_end() {
		?>
		</div>
		<?php
	}

	add_action( 'woocommerce_before_main_content', 'csco_wc_wrapper_start', 10 );
	add_action( 'woocommerce_after_main_content', 'csco_wc_wrapper_end', 10 );

	/**
	 * Check if Wide Container
	 *
	 * @param bool $status Th status.
	 */
	function csco_wc_is_wide_container( $status ) {

		if ( is_shop() || is_woocommerce() ) {
			$status = false;
		}

		return $status;
	}

	add_filter( 'csco_is_wide_container', 'csco_wc_is_wide_container' );

	/**
	 * Get Page Layout
	 *
	 * @param string $layout Page layout.
	 */
	function csco_wc_get_page_layout( $layout ) {

		if ( is_woocommerce() && ! ( is_cart() || is_checkout() || is_account_page() ) ) {

			if ( is_shop() || is_product_category() || is_product_tag() ) {

				$page_id = get_option( 'woocommerce_shop_page_id' );
				$layout  = get_post_meta( $page_id, 'csco_singular_layout', true );

				if ( ! $layout || 'default' === $layout ) {

					if ( get_theme_mod( 'page_layout_default', true ) ) {

						// Get Layout, specified in Layout > General.
						$layout = get_theme_mod( 'layout', 'layout-sidebar-right' );

					} else {

						// Get Layout for pages.
						$layout = get_theme_mod( 'page_layout', 'layout-sidebar-right' );

					}
				}
			} else {

				$layout = 'layout-fullwidth';

			}
		}

		return $layout;

	}

	add_filter( 'csco_page_layout', 'csco_wc_get_page_layout' );

	/**
	 * Get Page Header Type
	 *
	 * @param string $page_header_type Page header type.
	 */
	function csco_wc_get_page_header_type( $page_header_type ) {

		if ( is_shop() ) {

			global $paged;

			if ( $paged < 1 ) {

				$page_id = get_option( 'woocommerce_shop_page_id' );

				// Get Page Header Type for current post or page.
				$page_header_type = get_post_meta( $page_id, 'csco_page_header_type', true );

				if ( ! $page_header_type || 'default' === $page_header_type ) {

					if ( ! get_theme_mod( 'page_page_header_default', true ) ) {

						// Get Page Header Type, specified in Page > Layout.
						$page_header_type = get_theme_mod( 'page_page_header', 'simple' );

					} else {

						// Get Page Header Type, specified in Layout > General.
						$page_header_type = get_theme_mod( 'page_header', 'simple' );

					}
				}
			} else {

				// Don't show page header except for the first page.
				$page_header_type = 'none';

			}
		} elseif ( is_product_category() ) {

			$cat = get_queried_object();
			$id  = $cat->term_id;

			// Get Page Header Type for current category.
			$page_header_type = get_term_meta( $id, 'csco_page_header_type', true );

			if ( ! $page_header_type || 'default' === $page_header_type ) {
				// Get default page header.
				$page_header_type = get_theme_mod( 'page_header', 'simple' );

			}
		}

		return $page_header_type;

	}
	add_filter( 'csco_page_header_type', 'csco_wc_get_page_header_type' );

	/**
	 * Page Header Post Thumbnail Size
	 *
	 * @param string $thumbnail_size Post Thumbnail Size.
	 */
	function csco_wc_shop_page_thumbnail_size( $thumbnail_size ) {

		if ( is_shop() || is_product_category() ) {

			$type = csco_get_page_header_type();

			if ( 'wide' === $type || 'large' === $type ) {
				$thumbnail_size = 'csco-1920';
			} else {
				if ( 'layout-fullwidth' === csco_get_page_layout() ) {
					$thumbnail_size = 'csco-1160';
				} else {
					$thumbnail_size = 'csco-800';
				}
			}
		}

		return $thumbnail_size;
	}
	add_filter( 'csco_page_header_thumbnail_size', 'csco_wc_shop_page_thumbnail_size' );

	/**
	 * Page Header Post Thumbnail ID
	 *
	 * @param string $thumbnail_id Post Thumbnail ID.
	 */
	function csco_wc_shop_page_thumbnail_id( $thumbnail_id ) {

		if ( is_shop() ) {

			$thumbnail_id = get_post_thumbnail_id( get_option( 'woocommerce_shop_page_id' ) );

		} elseif ( is_product_category() ) {

			$cat = get_queried_object();
			$id  = $cat->term_id;

			$thumbnail_id = get_term_meta( $id, 'thumbnail_id', true );
		}

		return $thumbnail_id;
	}
	add_filter( 'csco_page_header_thumbnail_id', 'csco_wc_shop_page_thumbnail_id' );

	/**
	 * Add Small and Simple Page Headers
	 */
	function csco_wc_get_page_header() {
		if ( ! is_product() ) {
			csco_get_page_header();
		}
	}
	add_action( 'woocommerce_before_main_content', 'csco_wc_get_page_header' );

	/**
	 * WC Breadcrumbs
	 *
	 * @param bool $echo Output type.
	 */
	function csco_wc_breadcrumbs( $echo = true ) {
		$display_options = get_option( 'wpseo_titles' );

		if ( ! isset( $display_options['breadcrumbs-enable'] ) ) {
			$display_options['breadcrumbs-enable'] = false;
		}

		ob_start();
		if ( function_exists( 'yoast_breadcrumb' ) && $display_options['breadcrumbs-enable'] ) {
			yoast_breadcrumb( '<div class="cs-breadcrumbs" id="breadcrumbs">', '</div>' );
		} else {
			woocommerce_breadcrumb();
		}

		// Check the number of levels in breadcrumbs.
		preg_match_all( '/<\/a>/', ob_get_contents(), $matches );

		if ( ! isset( $matches[0] ) || count( $matches[0] ) <= 1 ) {
			ob_end_clean();

			return;
		}

		if ( $echo ) {
			return ob_end_flush();
		}

		return ob_get_clean();
	}

	/**
	 * WC Change Theme Breadcrumbs
	 *
	 * @param bool $enabled The enabled breadcrumbs.
	 */
	function csco_wc_theme_breadcrumbs( $enabled ) {
		if ( is_product_taxonomy() || is_product() || is_cart() || is_checkout() || is_account_page() ) {
			csco_wc_breadcrumbs();
			return false;
		}
		return $enabled;
	}
	add_filter( 'csco_breadcrumbs', 'csco_wc_theme_breadcrumbs' );

	/**
	 * Reassign default breadcrumbs
	 */
	function csco_wc_reassign_breadcrumbs() {
		remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0 );

		if ( is_product() ) {
			add_action( 'woocommerce_before_main_content', 'csco_wc_breadcrumbs', 20, 0 );
		}
	}
	add_action( 'template_redirect', 'csco_wc_reassign_breadcrumbs' );

	/**
	 * Add Shop Options on Shop Page
	 */
	function csco_wc_custom_meta_boxes() {
		$function = sprintf( 'add_meta_%s', 'box' );

		if ( (int) get_the_ID() === (int) get_option( 'woocommerce_shop_page_id' ) ) {
			$function( 'csco_mb_shop_options', esc_html__( 'Shop Options', 'authentic' ), 'csco_mb_shop_options_markup', array( 'page' ), 'side' );
		}
	}
	add_action( sprintf( 'add_meta_%s', 'boxes' ), 'csco_wc_custom_meta_boxes' );

	/**
	 * Options Shop markup
	 *
	 * @param object $post The post object.
	 */
	function csco_mb_shop_options_markup( $post ) {
		wp_nonce_field( 'shop_options', 'csco_wc_shop_options' );

		$products_per_row  = get_post_meta( $post->ID, 'csco_products_per_row', true );
		$products_per_page = get_post_meta( $post->ID, 'csco_products_per_page', true );

		// Set Default.
		$products_per_row  = $products_per_row ? (int) $products_per_row : 3;
		$products_per_page = $products_per_page ? (int) $products_per_page : 9;
		?>
			<p><strong><label for="csco_products_per_row"><?php esc_html_e( 'Products per Row', 'authentic' ); ?>:</label></strong>
			<input class="small-text" type="number" max="4" id="csco_products_per_row" name="csco_products_per_row" value="<?php echo esc_attr( $products_per_row ); ?>"></p>

			<p><strong><label for="csco_products_per_page"><?php esc_html_e( 'Products per Page', 'authentic' ); ?>:</label></strong>
			<input class="small-text" type="number" id="csco_products_per_page" name="csco_products_per_page" value="<?php echo esc_attr( $products_per_page ); ?>"></p>
		<?php
	}

	/**
	 * Save meta box
	 *
	 * @param int $post_id The post id.
	 */
	function csco_wc_save_meta_boxes( $post_id ) {

		// Bail if we're doing an auto save.
		if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
			return;
		}

		// if our nonce isn't there, or we can't verify it, bail.
		if ( isset( $_POST['csco_wc_shop_options'] ) && wp_verify_nonce( $_POST['csco_wc_shop_options'], 'shop_options' ) ) { // Input var ok; sanitization ok.

			if ( isset( $_POST['csco_products_per_row'] ) ) { // Input var ok; sanitization ok.
				$products_per_row = intval( $_POST['csco_products_per_row'] ); // Input var ok; sanitization ok.

				update_post_meta( $post_id, 'csco_products_per_row', $products_per_row );
			}

			if ( isset( $_POST['csco_products_per_page'] ) ) { // Input var ok; sanitization ok.
				$products_per_page = intval( $_POST['csco_products_per_page'] ); // Input var ok; sanitization ok.

				update_post_meta( $post_id, 'csco_products_per_page', $products_per_page );
			}
		}
	}
	add_action( 'save_post', 'csco_wc_save_meta_boxes' );

	/**
	 * Override Shop Home Page Title
	 *
	 * @param string $title Page Title.
	 */
	function csco_wc_the_title( $title ) {

		if ( is_shop() ) {
			$title = get_the_title( get_option( 'woocommerce_shop_page_id' ) );
		} elseif ( is_product_category() || is_product_tag() ) {
			$title = single_term_title( '', false );
		}
		return $title;
	}
	add_filter( 'get_the_archive_title', 'csco_wc_the_title' );

	/**
	 * Remove Default WooCommerce Page Title
	 */
	function csco_wc_show_page_title() {
		if ( is_shop() ) {
			return false;
		}
	}
	add_filter( 'woocommerce_show_page_title', 'csco_wc_show_page_title' );

	/**
	 * Product Count Template
	 */
	function csco_wc_archive_product_count() {
		if ( is_archive() ) {
			global $wp_query;
			$found_posts = $wp_query->found_posts;
			?>
			<div class="product-count">
				<?php
					/* translators: 1: number of products */
					printf( esc_html( _n( '%s product', '%s products', $found_posts, 'authentic' ) ), intval( $found_posts ) );
				?>
			</div>
		<?php
		}
	}

	/**
	 * Add Product Count
	 */
	function csco_wc_add_product_count() {
		if ( is_shop() || is_product_category() || is_product_tag() ) {
			remove_action( 'csco_page_header_end', 'csco_archive_post_count' );
			add_action( 'csco_page_header_end', 'csco_wc_archive_product_count' );
		}
	}
	add_action( 'wp', 'csco_wc_add_product_count' );

	/**
	 * Register WooCommerce Sidebar
	 */
	function csco_wc_widgets_init() {

		register_sidebar(
			array(
				'name'          => esc_html__( 'WooCommerce', 'authentic' ),
				'id'            => 'sidebar-woocommerce',
				'before_widget' => '<div class="widget %1$s %2$s">',
				'after_widget'  => '</div>',
				'before_title'  => csco_section_heading( null, 'before', false, $class = 'title-widget' ),
				'after_title'   => csco_section_heading( null, 'after', false, $class = 'title-widget' ),
			)
		);
	}

	add_action( 'widgets_init', 'csco_wc_widgets_init' );

	/**
	 * Overwrite Default Sidebar
	 *
	 * @param string $sidebar Sidebar slug.
	 */
	function csco_wc_sidebar( $sidebar ) {
		if ( is_woocommerce() ) {
			return 'sidebar-woocommerce';
		}
		return $sidebar;
	}

	add_filter( 'csco_sidebar', 'csco_wc_sidebar' );

	/**
	 * Display Cart in Header
	 *
	 * @param array $fragments Cart fragments.
	 */
	function csco_wc_header_add_to_cart_fragment( $fragments ) {

		$quantity = intval( WC()->cart->get_cart_contents_count() );
		ob_start();
		?>

		<a class="header-cart" href="<?php echo esc_url( wc_get_cart_url() ); ?>" title="<?php esc_html_e( 'View your shopping cart', 'authentic' ); ?>">
			<i class="cs-icon cs-icon-cart"></i>
			<span class="cart-quantity"><?php echo intval( $quantity ); ?></span>
		</a>

		<?php

		$fragments['a.header-cart'] = ob_get_clean();

		return $fragments;

	}
	add_filter( 'woocommerce_add_to_cart_fragments', 'csco_wc_header_add_to_cart_fragment' );

	/**
	 * Add Cart Checkbox To Navbar Customizer
	 */
	function csco_wc_add_fields_customizer() {
		CSCO_Kirki::add_field(
			'csco_theme_mod', array(
				'type'     => 'custom',
				'settings' => 'navbar_collapsible_cart',
				'section'  => 'navbar',
				'default'  => '<div class="customize-collapsible"><h3>' . esc_html__( 'Cart', 'authentic' ) . '</h3></div>',
				'priority' => 10,
			)
		);

		CSCO_Kirki::add_field(
			'csco_theme_mod', array(
				'type'     => 'checkbox',
				'settings' => 'navbar_cart',
				'label'    => esc_html__( 'Cart', 'authentic' ),
				'section'  => 'navbar',
				'default'  => false,
				'priority' => 10,
			)
		);
	}
	add_filter( 'init', 'csco_wc_add_fields_customizer' );

	/**
	 * Loop
	 */
	remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
	remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
	remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 );

	/**
	 * Open Thumbnail Wrap
	 */
	function csco_wc_before_shop_loop_item() {
		?>
			<div class="product-thumbnail">
		<?php
	}
	add_action( 'woocommerce_before_shop_loop_item', 'csco_wc_before_shop_loop_item', 5 );

	/**
	 * Close Link
	 */
	add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 15 );

	/**
	 * Add To Cart Button
	 */
	add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_add_to_cart', 20 );

	/**
	 * Close Thumbnail Wrap
	 */
	function csco_wc_before_shop_loop_item_title() {
		?>
		</div>
	<?php
	}
	add_action( 'woocommerce_before_shop_loop_item_title', 'csco_wc_before_shop_loop_item_title', 25 );

	/**
	 * Open Link
	 */
	add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 30 );

	/**
	 * Override number of products per row
	 */
	function csco_wc_loop_columns() {
		$products_per_row = get_post_meta( get_option( 'woocommerce_shop_page_id' ), 'csco_products_per_row', true );

		// Set default products_per_row.
		if ( ! $products_per_row ) {
			$products_per_row = 3;
		}

		return $products_per_row;
	}
	add_filter( 'loop_shop_columns', 'csco_wc_loop_columns' );

	/**
	 * Override number of products per row
	 */
	function csco_wc_loop_shop_per_page() {
		$products_per_page = get_post_meta( get_option( 'woocommerce_shop_page_id' ), 'csco_products_per_page', true );

		// Set default products_per_page.
		if ( ! $products_per_page ) {
			$products_per_page = 9;
		}

		return $products_per_page;
	}
	add_filter( 'loop_shop_per_page', 'csco_wc_loop_shop_per_page', 20 );

	/**
	 * Adds classes to <body> tag
	 *
	 * @param array $classes is an array of all body classes.
	 */
	function csco_wc_body_class( $classes ) {
		if ( is_shop() || is_product_category() || is_product_tag() ) {
			$csco_products_per_row = get_post_meta( get_option( 'woocommerce_shop_page_id' ), 'csco_products_per_row', true );

			// Set default csco_products_per_row.
			if ( ! $csco_products_per_row ) {
				$csco_products_per_row = 3;
			}

			$classes[] = 'wc-col-' . intval( $csco_products_per_row );
		}
		if ( is_product() ) {
			$classes[] = 'wc-col-4';
		}
		return $classes;
	}
	add_filter( 'body_class', 'csco_wc_body_class' );

	/**
	 * Override pagination
	 */
	function csco_wc_woocommerce_pagination() {

		global $wp_query;

		if ( $wp_query->max_num_pages <= 1 ) {
			return;
		}

		?>

		<div class="archive-pagination">

		<?php
		the_posts_pagination(
			apply_filters(
				'woocommerce_pagination_args', array(
					'base'      => esc_url_raw( str_replace( 999999999, '%#%', remove_query_arg( 'add-to-cart', get_pagenum_link( 999999999, false ) ) ) ),
					'format'    => '',
					'add_args'  => false,
					'current'   => max( 1, get_query_var( 'paged' ) ),
					'total'     => $wp_query->max_num_pages,
					'prev_text' => esc_html__( 'Previous', 'authentic' ),
					'next_text' => esc_html__( 'Next', 'authentic' ),
					'end_size'  => 3,
					'mid_size'  => 3,
				)
			)
		);
		?>

		</div>

		<?php
	}

	remove_action( 'woocommerce_after_shop_loop', 'woocommerce_pagination', 10 );
	add_action( 'woocommerce_after_shop_loop', 'csco_wc_woocommerce_pagination', 10 );

	/**
	 * Single Product
	 */

	/**
	 * Open Gallery Wrapper
	 */
	function csco_wc_open_gallery_image_wrapper() {
		?>
		<div class="slider-container product-gallery-wrapper">
			<div class="owl-carousel">
		<?php
	}
	add_action( 'woocommerce_product_thumbnails', 'csco_wc_open_gallery_image_wrapper', 15 );

	/**
	 * Close Gallery Wrapper
	 */
	function csco_wc_close_gallery_image_wrapper() {
		?>
			</div>
			<div class="owl-dots"></div>
		</div>
		<?php
	}
	add_action( 'woocommerce_product_thumbnails', 'csco_wc_close_gallery_image_wrapper', 25 );

	/**
	 * Remove Product Description Title
	 */
	add_filter( 'woocommerce_product_description_heading', '__return_null' );
}