HEX
Server: Apache
System: Linux webm014.cluster128.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: circuix (152771)
PHP: 8.0.30
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/circuix/www/wp-content/themes/estore/inc/woocommerce.php
<?php
/**
 * eStore functions and definitions related to WooCommerce.
 *
 * @package ThemeGrill
 * @subpackage eStore
 * @since eStore 1.0.1
 */

/* Removes woocommerce_breadcrumbs function from woocommerce_before_main_content hook */
remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 );

remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );

// Removes product-thumbnail hook from loop
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
// Removes sales-tag
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );

// Adds our own product-thumbnail to loop
add_action( 'woocommerce_before_shop_loop_item_title', 'estore_template_loop_product_thumbnail', 11 );

// Removes link end
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );

// Adds the wishlist button
add_action( 'woocommerce_after_shop_loop_item', 'estore_template_loop_add_to_wishlist', 10 );

// Single Page - Rating
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 11 );


add_action( 'woocommerce_before_main_content', 'estore_wrapper_start', 10 );
add_action( 'woocommerce_after_main_content', 'estore_wrapper_end', 10 );

function estore_wrapper_start() {
	echo '<div id="primary">';
}

function estore_wrapper_end() {
	echo '</div>';
}

add_action( 'widgets_init', 'estore_woocommerce_widgets_init' );

/**
 * Register widget area related to WooCommerce.
 *
 * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar
 */
function estore_woocommerce_widgets_init() {

	// Register sidebar for WooCommerce Pages
	register_sidebar( array(
		'name'          => esc_html__( 'Shop Sidebar', 'estore' ),
		'id'            => 'estore_woocommerce_sidebar',
		'description'   => esc_html__( 'Widget area for WooCommerce Pages.', 'estore' ),
		'before_widget' => '<section id="%1$s" class="widget %2$s">',
		'after_widget'  => '</section>',
		'before_title'  => '<h3 class="widget-title"><span>',
		'after_title'   => '</span></h3>'
	) );

	// Register Widgets using WooCommerce data
	register_widget( "estore_woocommerce_full_width_promo_widget" );
	register_widget( "estore_woocommerce_product_carousel" );
	register_widget( "estore_woocommerce_product_grid" );
	register_widget( "estore_woocommerce_product_slider" );
	register_widget( "estore_woocommerce_vertical_promo_widget" );
}

/**
 * Register WooCommerce related Theme Settings
 *
 */
function estore_woocommerce_settings_register( $wp_customize ) {

	// WooCommerce Category Color Options
	$wp_customize->add_panel( 'estore_woocommerce_panel', array(
		'priority'    => 1000,
		'title'       => esc_html__( 'WooCommerce Settings', 'estore' ),
		'capability'  => 'edit_theme_options',
		'description' => esc_html__( 'Change WooCommerce settings related to theme.', 'estore' )
	) );

	// Header My Account Link
	$wp_customize->add_setting( 'estore_header_ac_btn', array(
			'default'           => '',
			'capability'        => 'edit_theme_options',
			'sanitize_callback' => 'estore_sanitize_checkbox',
		)
	);

	$wp_customize->add_control( 'estore_header_ac_btn', array(
			'label'    => esc_html__( 'Enable My Account Button', 'estore' ),
			'section'  => 'estore_header_integrations',
			'type'     => 'checkbox',
			'priority' => 10
		)
	);

	// Header Currency Info
	$wp_customize->add_setting( 'estore_header_currency', array(
			'default'           => '',
			'capability'        => 'edit_theme_options',
			'sanitize_callback' => 'estore_sanitize_checkbox',
		)
	);

	$wp_customize->add_control( 'estore_header_currency', array(
			'label'    => esc_html__( 'Enable Currency Symbol', 'estore' ),
			'section'  => 'estore_header_integrations',
			'type'     => 'checkbox',
			'priority' => 20
		)
	);

	$wp_customize->add_section( 'estore_woocommerce_category_color_setting', array(
		'priority' => 1,
		'title'    => esc_html__( 'Category Color Settings', 'estore' ),
		'panel'    => 'estore_woocommerce_panel'
	) );

	$priority         = 1;
	$categories       = get_terms( 'product_cat' ); // Get all WooCommerce Categories
	$wp_category_list = array();

	foreach ( $categories as $category_list ) {

		$wp_customize->add_setting( 'estore_woocommerce_category_color_' . $category_list->term_id,
			array(
				'default'              => '',
				'capability'           => 'edit_theme_options',
				'sanitize_callback'    => 'estore_hex_color_sanitize',
				'sanitize_js_callback' => 'estore_color_escaping_sanitize'
			)
		);

		$wp_customize->add_control(
			new WP_Customize_Color_Control(
				$wp_customize, 'estore_woocommerce_category_color_' . $category_list->term_id,
				array(
					'label'    => sprintf( __( ' %s', 'estore' ), $category_list->name ),
					'section'  => 'estore_woocommerce_category_color_setting',
					'settings' => 'estore_woocommerce_category_color_' . $category_list->term_id,
					'priority' => $priority
				)
			)
		);
		$priority++;
	}

	// WooCommerce Pages layout
	$wp_customize->add_section(
		'estore_woocommerce_global_layout_section',
		array(
			'priority' => 10,
			'title'    => esc_html__( 'Archive Page Layout', 'estore' ),
			'panel'    => 'estore_woocommerce_panel'
		)
	);

	$wp_customize->add_setting(
		'estore_woocommerce_global_layout',
		array(
			'default'           => 'no_sidebar_full_width',
			'capability'        => 'edit_theme_options',
			'sanitize_callback' => 'estore_sanitize_radio'
		)
	);

	$wp_customize->add_control(
		new Estore_Image_Radio_Control (
			$wp_customize,
			'estore_woocommerce_global_layout',
			array(
				'label'   => esc_html__( 'This layout will be reflected in archives, categories, search page etc. of WooCommerce.', 'estore' ),
				'section' => 'estore_woocommerce_global_layout_section',
				'type'    => 'radio',
				'choices' => array(
					'right_sidebar'               => Estore_ADMIN_IMAGES_URL . '/right-sidebar.png',
					'left_sidebar'                => Estore_ADMIN_IMAGES_URL . '/left-sidebar.png',
					'no_sidebar_full_width'       => Estore_ADMIN_IMAGES_URL . '/no-sidebar-full-width-layout.png',
					'no_sidebar_content_centered' => Estore_ADMIN_IMAGES_URL . '/no-sidebar-content-centered-layout.png'
				)
			)
		)
	);

	// WooCommerce Product Page Layout
	$wp_customize->add_section(
		'estore_woocommerce_product_layout_section',
		array(
			'priority' => 20,
			'title'    => esc_html__( 'Product Page Layout', 'estore' ),
			'panel'    => 'estore_woocommerce_panel'
		)
	);

	$wp_customize->add_setting(
		'estore_woocommerce_product_layout',
		array(
			'default'           => 'right_sidebar',
			'capability'        => 'edit_theme_options',
			'sanitize_callback' => 'estore_sanitize_radio'
		)
	);

	$wp_customize->add_control(
		new Estore_Image_Radio_Control (
			$wp_customize,
			'estore_woocommerce_product_layout',
			array(
				'label'   => esc_html__( 'This layout will be reflected in product page of WooCommerce.', 'estore' ),
				'section' => 'estore_woocommerce_product_layout_section',
				'type'    => 'radio',
				'choices' => array(
					'right_sidebar'               => Estore_ADMIN_IMAGES_URL . '/right-sidebar.png',
					'left_sidebar'                => Estore_ADMIN_IMAGES_URL . '/left-sidebar.png',
					'no_sidebar_full_width'       => Estore_ADMIN_IMAGES_URL . '/no-sidebar-full-width-layout.png',
					'no_sidebar_content_centered' => Estore_ADMIN_IMAGES_URL . '/no-sidebar-content-centered-layout.png'
				)
			)
		)
	);

	$wp_customize->add_setting(
		'estore_woocommerce_product_thumb_mask',
		array(
			'default'           => '',
			'capability'        => 'edit_theme_options',
			'sanitize_callback' => 'estore_sanitize_checkbox'
		)
	);

	$wp_customize->add_control(
		'estore_woocommerce_product_thumb_mask',
		array(
			'label'   => esc_html__( 'Check to hide hover effect on Product Images in WooCommerce Archive Pages.', 'estore' ),
			'section' => 'estore_woocommerce_global_layout_section',
			'type'    => 'checkbox',
		)
	);

}

add_action( 'customize_register', 'estore_woocommerce_settings_register' );

if ( ! function_exists( 'estore_woocommerce_category_color_css' ) ) :
	/**
	 * Generate color for WooCommerce Category and print on head
	 */
	function estore_woocommerce_category_color_css() {

		$categories = get_terms( 'product_cat', array( 'hide_empty' => false ) );

		//print_r($categories);

		$cat_color_css = '';
		foreach ( $categories as $category ) {
			$cat_color   = get_theme_mod( 'estore_woocommerce_category_color_' . $category->term_id );
			$hover_color = estore_darkcolor( $cat_color, -20 );
			$cat_id      = $category->term_id;
			if ( ! empty( $cat_color ) ) {
				$cat_color_css .= '

			/* Border Color */
			.widget-collection .estore-cat-color_' . $cat_id . ' .cart-wishlist-btn a.added_to_cart:hover::after, .widget-collection .estore-cat-color_' . $cat_id . ' .cart-wishlist-btn a.added_to_cart::after, .woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .products-img .products-hover-wrapper .products-hover-block a:hover, .widget-collection .estore-cat-color_' . $cat_id . '  .cart-wishlist-btn a i, .estore-cat-color_' . $cat_id . ' .hot-product-content-wrapper .hot-img {border-color: ' . $cat_color . '}
			/* Background Color */
			  .widget-collection .estore-cat-color_' . $cat_id . ' .cart-wishlist-btn a.added_to_cart:hover::after, .woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .products-img .products-hover-wrapper .products-hover-block a:hover, .woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .yith-wcwl-add-to-wishlist .add_to_wishlist.button.alt, .woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .yith-wcwl-add-to-wishlist .yith-wcwl-wishlistexistsbrowse a, .woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .yith-wcwl-add-to-wishlist .yith-wcwl-wishlistaddedbrowse a,.product-collection.estore-cat-color_' . $cat_id . ' .page-title::after,.estore-cat-color_' . $cat_id . ' .hot-content-wrapper .single_add_to_wishlist, .widget-collection .estore-cat-color_' . $cat_id . ' .cart-wishlist-btn a i:hover, .estore-cat-color_' . $cat_id . ' .hot-product-title, .widget-collection .estore-cat-color_' . $cat_id . '  .page-title::after{background: ' . $cat_color . '}
			/* Color */
			.estore-cat-color_' . $cat_id . ' .hot-content-wrapper .hot-title a:hover, .estore-cat-color_' . $cat_id . ' .hot-product-content-wrapper .hot-img .cart-price-wrapper .added_to_cart:hover, .widget-collection .estore-cat-color_' . $cat_id . ' .cart-wishlist-btn a.added_to_cart::after, .woocommerce-page .estore-cat-color_' . $cat_id . '  ul.products li.product .price ins, .estore-cat-color_' . $cat_id . ' .product-list-wrap .product-list-block .product-list-content .price ins, .woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .products-title a:hover, .woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .star-rating, .estore-cat-color_' . $cat_id . ' .view-all a:hover, .estore-cat-color_' . $cat_id . '  .hot-product-content-wrapper .hot-img .cart-price-wrapper .add_to_cart_button:hover, .widget-collection .estore-cat-color_' . $cat_id . '  .cart-wishlist-btn a i, .estore-cat-color_' . $cat_id . ' .product-list-wrap .product-list-block .product-list-content .product-list-title a:hover, .estore-cat-color_' . $cat_id . ' .hot-content-wrapper .star-rating, .estore-cat-color_' . $cat_id . ' .sorting-form-wrapper a, .estore-cat-color_' . $cat_id . ' .section-title-wrapper .section-title-block .page-title a:hover{color:' . $cat_color . '}

			/*hover */
			.estore-cat-color_' . $cat_id . ' .hot-content-wrapper .single_add_to_wishlist:hover,
			.woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .yith-wcwl-add-to-wishlist .add_to_wishlist.button.alt:hover,
			.woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .yith-wcwl-add-to-wishlist .yith-wcwl-wishlistexistsbrowse a:hover,
			.woocommerce-page .estore-cat-color_' . $cat_id . ' ul.products li.product .yith-wcwl-add-to-wishlist .yith-wcwl-wishlistaddedbrowse a:hover{
				background: ' . $hover_color . '
			}
			';
			}
		}

		if ( ! empty( $cat_color_css ) ) {
			?>
			<!-- WooCommerce Category Color -->
			<style type="text/css"><?php echo $cat_color_css; ?></style>
			<?php
		}
	}
endif;

add_action( 'wp_head', 'estore_woocommerce_category_color_css', 30 );

if ( ! function_exists( 'estore_template_loop_product_thumbnail' ) ) {

	/**
	 * Get the product thumbnail, or the placeholder if not set.
	 *
	 * @subpackage    Loop
	 *
	 * @param string $size (default: 'shop_catalog')
	 *
	 * @return string
	 */
	function estore_template_loop_product_thumbnail() {
		global $product, $post;

		$size = 'shop_catalog';

		if ( has_post_thumbnail() ) {
			$image_id  = get_post_thumbnail_id( $post->ID );
			$image_url = wp_get_attachment_image_src( $image_id, $size, false ); ?>
			<figure class="products-img">
				<a href="<?php echo esc_url( get_permalink( $product->get_id() ) ); ?>" alt="<?php the_title(); ?>"><img
							src="<?php echo esc_url( $image_url[0] ); ?>"></a>
				<?php if ( $product->is_on_sale() ) : ?>
					<?php echo apply_filters( 'woocommerce_sale_flash', '<div class="sales-tag">' . esc_html__( 'Sale!', 'estore' ) . '</div>', $post, $product ); ?>
				<?php endif; ?>

				<?php if ( get_theme_mod( 'estore_woocommerce_product_thumb_mask', '' ) != 1 ) : ?>
					<div class="products-hover-wrapper">
						<div class="products-hover-block">
							<a href="<?php echo $image_url[0]; ?>" class="zoom" data-rel="prettyPhoto"><i
										class="fa fa-search-plus"> </i></a>

							<?php woocommerce_template_loop_add_to_cart( $product ); ?>
						</div>
					</div><!-- featured hover end -->
					<?php
					remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
				else:
					add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
				endif; ?>
			</figure>
			<?php
		} else { ?>
			<figure class="products-img">
				<a href="<?php echo esc_url( get_permalink( $product->get_id() ) ); ?>" alt="<?php the_title(); ?>"><img
							src="<?php echo estore_woocommerce_placeholder_img_src(); ?>"></a>
				<?php if ( $product->is_on_sale() ) : ?>
					<?php echo apply_filters( 'woocommerce_sale_flash', '<div class="sales-tag">' . esc_html__( 'Sale!', 'estore' ) . '</div>', $post, $product ); ?>
				<?php endif; ?>

				<?php if ( get_theme_mod( 'estore_woocommerce_product_thumb_mask', '' ) != 1 ) : ?>
					<div class="products-hover-wrapper">
						<div class="products-hover-block">
							<a href="<?php echo estore_woocommerce_placeholder_img_src(); ?>" class="zoom"
							   data-rel="prettyPhoto"><i class="fa fa-search-plus"> </i></a>
							<?php woocommerce_template_loop_add_to_cart( $product ); ?>
						</div>
					</div><!-- featured hover end -->
					<?php
					remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
				else:
					add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
				endif; ?>
			</figure>
		<?php }
	}
}

if ( ! function_exists( 'estore_template_loop_add_to_wishlist' ) ) {

	/**
	 * Get the add-to-wishlist button.
	 *
	 * @subpackage    Loop
	 * @return string
	 */
	function estore_template_loop_add_to_wishlist() {
		if ( function_exists( 'YITH_WCWL' ) ) {
			echo do_shortcode( '[yith_wcwl_add_to_wishlist]' );
		}
	}
}

if ( ! function_exists( 'woocommerce_template_loop_product_title' ) ) {

	/**
	 * Show the product title in the product loop. By default this is an H3.
	 */
	function woocommerce_template_loop_product_title() {
		echo '<h3 class="products-title"><a href=' . esc_url( get_the_permalink() ) . '>' . esc_html( get_the_title() ) . '</a></h3>';
	}
}

add_filter( 'body_class', 'estore_woocommerce_body_class' );

if ( ! function_exists( 'estore_woocommerce_body_class' ) ) {

	/**
	 * Adds class to body based on page template
	 */
	function estore_woocommerce_body_class( $woocommerce_class ) {
		if ( is_page_template( 'page-templates/template-wc-collection.php' ) ) {
			// add 'woocommerce-page' class to the $classes array
			$woocommerce_class[] = 'woocommerce-page';
			// return the $woocommerce_class array
		}

		return $woocommerce_class;
	}
}
/**
 * Disables theme products per page option for WC >= 3.3 since WC provides option in customizer
 */
if ( ! estore_woo_version_check( '3.3' ) ) {
	add_filter( 'loop_shop_columns', 'estore_woocommerce_loop_columns' );

	if ( ! function_exists( 'estore_woocommerce_loop_columns' ) ) {

		/**
		 * Change product per row to 4
		 */
		function estore_woocommerce_loop_columns() {
			return 4; // 4 products per row
		}
	}
}

if ( ! function_exists( 'estore_woocommerce_layout_class' ) ) :
	/**
	 * Generate layout class for sidebar based on customizer and post meta settings for woocommerce pages.
	 */
	function estore_woocommerce_layout_class() {
		global $post;

		$layout = get_theme_mod( 'estore_woocommerce_global_layout', 'right_sidebar' );


		// Front page displays in Reading Settings
		$page_for_posts = get_option( 'page_for_posts' );

		// Get Layout meta
		if ( $post ) {
			$layout_meta = get_post_meta( $post->ID, 'estore_page_specific_layout', true );
		}
		// Home page if Posts page is assigned
		if ( is_home() && ! ( is_front_page() ) ) {
			$queried_id  = get_option( 'page_for_posts' );
			$layout_meta = get_post_meta( $queried_id, 'estore_page_specific_layout', true );

			if ( $layout_meta != 'default_layout' && $layout_meta != '' ) {
				$layout = get_post_meta( $queried_id, 'estore_page_specific_layout', true );
			}
		} elseif ( is_page() ) {
			$layout = get_theme_mod( 'estore_woocommerce_global_layout', 'right_sidebar' );
			if ( $layout_meta != 'default_layout' && $layout_meta != '' ) {
				$layout = get_post_meta( $post->ID, 'estore_page_specific_layout', true );
			}
		} elseif ( is_single() ) {
			$layout = get_theme_mod( 'estore_woocommerce_product_layout', 'right_sidebar' );
			if ( $layout_meta != 'default_layout' && $layout_meta != '' ) {
				$layout = get_post_meta( $post->ID, 'estore_page_specific_layout', true );
			}
		}

		return $layout;
	}
endif;

/**
 * Get the estore's placeholder image URL for products.
 *
 * @return string
 */
function estore_woocommerce_placeholder_img_src( $image_size = '' ) {

	if ( $image_size == '' ) {
		return apply_filters( 'woocommerce_placeholder_img_src', get_template_directory_uri() . '/images/placeholder-shop.jpg' );
	} else {

		$size           = estore_get_image_size( $image_size );
		$size['width']  = isset( $size['width'] ) ? $size['width'] : '';
		$size['height'] = isset( $size['height'] ) ? $size['height'] : '';


		return apply_filters( 'woocommerce_placeholder_img_src', get_template_directory_uri() . '/images/placeholder-shop-' . $size['width'] . 'x' . $size['height'] . '.jpg' );
	}
}

function estore_get_image_size( $name ) {
	global $_wp_additional_image_sizes;

	if ( isset( $_wp_additional_image_sizes[ $name ] ) ) {
		return $_wp_additional_image_sizes[ $name ];
	}

	return false;
}

// Ensure cart contents update when products are added to the cart via AJAX
add_filter( 'woocommerce_add_to_cart_fragments', 'estore_woocommerce_header_add_to_cart_fragment' );

function estore_woocommerce_header_add_to_cart_fragment( $fragments ) {
	ob_start();
	?>
	<div class="estore-cart-views">

		<?php $cart_url = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : WC()->cart->get_cart_url(); ?>

		<a href="<?php echo esc_url( $cart_url ); ?>" class="wcmenucart-contents">
			<i class="fa fa-shopping-cart"></i>
			<span class="cart-value"><?php echo wp_kses_data( WC()->cart->get_cart_contents_count() ); ?></span>
		</a> <!-- quick wishlist end -->
		<div class="my-cart-wrap">
			<div class="my-cart"><?php esc_html_e( 'Total', 'estore' ); ?></div>
			<div class="cart-total"><?php echo wp_kses_data( WC()->cart->get_cart_subtotal() ); ?></div>
		</div>
	</div>
	<?php

	$fragments['div.estore-cart-views'] = ob_get_clean();

	return $fragments;
}

/**
 * Check if WooCommerce version is greater than specified version
 *
 * @param string $version
 *
 * @return bool
 */
function estore_woo_version_check( $version = '3.0' ) {
	if ( class_exists( 'WooCommerce' ) ) {
		global $woocommerce;
		if ( version_compare( $woocommerce->version, $version, ">=" ) ) {
			return true;
		}
	}

	return false;
}