HEX
Server: nginx/1.27.1
System: Linux in-4 5.15.0-131-generic #141-Ubuntu SMP Fri Jan 10 21:18:28 UTC 2025 x86_64
User: ilikadirect (1186)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source
Upload Files
File: /storage/v6964/srce/public_html/wp-content/themes/construction-light/inc/woocommerce.php
<?php
/**
 * WooCommerce Compatibility File
 *
 * @link https://woocommerce.com/
 *
 * @package Construction Light
 */

/**
 * WooCommerce setup function.
 *
 * @link https://docs.woocommerce.com/document/third-party-custom-theme-compatibility/
 * @link https://github.com/woocommerce/woocommerce/wiki/Enabling-product-gallery-features-(zoom,-swipe,-lightbox)-in-3.0.0
 *
 * @return void
 */
function construction_light_woocommerce_setup() {

	add_theme_support( 'woocommerce' );
	add_theme_support( 'wc-product-gallery-zoom' );
	add_theme_support( 'wc-product-gallery-lightbox' );
	add_theme_support( 'wc-product-gallery-slider' );
}
add_action( 'after_setup_theme', 'construction_light_woocommerce_setup' );

/**
 * Disable the default WooCommerce stylesheet.
 *
 * Removing the default WooCommerce stylesheet and enqueing your own will
 * protect you during WooCommerce core updates.
 *
 * @link https://docs.woocommerce.com/document/disable-the-default-stylesheet/
 */
//add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' );

/**
 * Add 'woocommerce-active' class to the body tag.
 *
 * @param  array $classes CSS classes applied to the body tag.
 * @return array $classes modified to include 'woocommerce-active' class.
 */
function construction_light_woocommerce_active_body_class( $classes ) {

	$classes[] = 'woocommerce-active';

	return $classes;
}
add_filter( 'body_class', 'construction_light_woocommerce_active_body_class' );


/**
 * Product gallery thumnbail columns.
 *
 * @return integer number of columns.
 */
function construction_light_woocommerce_thumbnail_columns() {
	return 4;
}
add_filter( 'woocommerce_product_thumbnails_columns', 'construction_light_woocommerce_thumbnail_columns' );

/**
 * Descriptions on Header Menu
 * @author AF themes
 * @param string $item_output , HTML outputp for the menu item
 * @param object $item , menu item object
 * @param int $depth , depth in menu structure
 * @param object $args , arguments passed to wp_nav_menu()
 * @return string $item_output
 */
function construction_light_header_menu_desc($item_output, $item, $depth, $args){

    if ('menu-1' == $args->theme_location && $item->description)

        $item_output = str_replace('</a>', '<span class="menu-description">' . $item->description . '</span></a>', $item_output);

    return $item_output;
}
//add_filter('walker_nav_menu_start_el', 'construction_light_header_menu_desc', 10, 4);


remove_action( 'woocommerce_before_main_content','woocommerce_breadcrumb', 20 );
add_filter( 'woocommerce_show_page_title', '__return_false' );
remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );

function construction_light_woocommerce_template_loop_product_thumbnail(){ ?>

    <div class="construction_light_products_item">
        <div class="construction_light_products_item_body">
			<?php
		        global $post, $product, $product_label_custom; 

		        $sale_class = '';
		        if( $product->is_on_sale() == 1 ){
					$sale_class = 'new_sale';
				}
			?>
			<div class="flash <?php echo esc_attr( $sale_class ); ?>">

				<?php construction_light_sale_percentage_loop(); ?>

				<?php 
		            if ($product_label_custom != ''){

						echo '<span class="onnew"><span class="text">'.esc_html__('New','construction-light').'</span></span>';
					}

		            if ( $product->is_on_sale() ) :

		             	echo apply_filters( 'woocommerce_sale_flash', '<span class="construction_light_sale_label"><span class="text">' . esc_html__( 'Sale!', 'construction-light' ) . '</span></span>', $post, $product );
		            
					endif;
	            ?>
			</div>

            <a href="<?php the_permalink(); ?>" class="construction_light_product_item_link">
            	<?php the_post_thumbnail('woocommerce_thumbnail'); #Products Thumbnail ?>
            </a>
			
        </div>
    </div>    
  	<?php 
}
add_action( 'woocommerce_before_shop_loop_item_title', 'construction_light_woocommerce_template_loop_product_thumbnail', 10 );

remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );

if ( !function_exists('construction_light_woocommerce_shop_loop_item_title') ) {

    function construction_light_woocommerce_shop_loop_item_title(){ ?>

        <div class="construction_light_products_item_details">
        	<h3>
	          	<a class="construction_light_products_title" href="<?php the_permalink(); ?>">
	            	<?php the_title( ); ?>
	          	</a>
          	</h3>
      <?php 
    }
}
add_action( 'woocommerce_shop_loop_item_title', 'construction_light_woocommerce_shop_loop_item_title', 10 );


remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5);
remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10);

add_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10);
add_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 11);

/**
 * Price & Rating Wrap
*/
if (!function_exists('construction_light_woocommerce_before_rating_loop_price')) {

    function construction_light_woocommerce_before_rating_loop_price(){ ?>

    	 <div class="price-rating-wrap clearfix"> 

      <?php 
    }
}
add_action( 'woocommerce_after_shop_loop_item_title', 'construction_light_woocommerce_before_rating_loop_price', 6);

if (!function_exists('construction_light_woocommerce_after_rating_loop_price')) {

    function construction_light_woocommerce_after_rating_loop_price(){ ?>

    	</div>

      <?php 
    }
}
add_action( 'woocommerce_after_shop_loop_item_title', 'construction_light_woocommerce_after_rating_loop_price', 12 );



if (!function_exists('construction_light_woocommerce_product_item_details_close')) {

    function construction_light_woocommerce_product_item_details_close(){ ?>

    	</div>

      <?php 
    }
}
add_action( 'woocommerce_template_loop_price', 'construction_light_woocommerce_product_item_details_close', 9 );


/**
 * Result Count & Pagination Wrap
*/
if (!function_exists('construction_light_woocommerce_before_catalog_ordering')) {

    function construction_light_woocommerce_before_catalog_ordering(){ ?>

    	<div class="shop-before-control">

      <?php 
    }
}
add_action( 'woocommerce_before_shop_loop', 'construction_light_woocommerce_before_catalog_ordering', 9);



if (!function_exists('construction_light_woocommerce_after_catalog_ordering')) {

    function construction_light_woocommerce_after_catalog_ordering(){ ?>

    	</div>

      <?php 
    }
}
add_action( 'woocommerce_before_shop_loop', 'construction_light_woocommerce_after_catalog_ordering', 31 );


/**
 * Remove default WooCommerce wrapper.
 */
remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );

if ( ! function_exists( 'construction_light_woocommerce_wrapper_before' ) ) {
	/**
	 * Before Content.
	 *
	 * Wraps all WooCommerce content in wrappers which match the theme markup.
	 *
	 * @return void
	 */
	function construction_light_woocommerce_wrapper_before() { ?>
		<div class="container">
			<div class="row">
				<div id="primary" class="content-area col-lg-8 col-md-8 col-sm-12">
					<main id="main" class="site-main" role="main">
				<?php
	}
}
add_action( 'woocommerce_before_main_content', 'construction_light_woocommerce_wrapper_before' );

if ( ! function_exists( 'construction_light_woocommerce_wrapper_after' ) ) {
	/**
	 * After Content.
	 *
	 * Closes the wrapping divs.
	 *
	 * @return void
	 */
	function construction_light_woocommerce_wrapper_after() {
			?>
					</main><!-- #main -->
				</div><!-- #primary -->

				<?php get_sidebar('woocommerce'); ?>
				
			</div>

		</div>

		<?php
	}
}
add_action( 'woocommerce_after_main_content', 'construction_light_woocommerce_wrapper_after' );

remove_action('woocommerce_sidebar', 'woocommerce_get_sidebar', 10 );


/**
 * Single Product Page Wrapper
*/
if (!function_exists('construction_light_woocommerce_before_single_product_summary')) {

    function construction_light_woocommerce_before_single_product_summary(){ ?>

    	<div class="product-summary-wrapper clearfix wow fadeInUp">

      <?php 
    }
}
add_action( 'woocommerce_before_single_product_summary', 'construction_light_woocommerce_before_single_product_summary', 9);



if (!function_exists('construction_light_woocommerce_after_single_product_summary')) {

    function construction_light_woocommerce_after_single_product_summary(){ ?>

    	</div>

      <?php 
    }
}
add_action( 'woocommerce_after_single_product_summary', 'construction_light_woocommerce_after_single_product_summary', 9 );


/* 
 * Product Single Page
*/
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 );
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );

function construction_light_group_flash(){

    global $post, $product; ?>

	<div class="flash">
		<?php 

			construction_light_sale_percentage_loop(); 

		    $newness_days = 7;
		    
		    $created = strtotime( $product->get_date_created() );
		    if ( ( time() - ( 60 * 60 * 24 * $newness_days ) ) > $created ) {
		        echo '<span class="onnew"><span class="text">' . esc_html__( 'New!', 'construction-light' ) . '</span></span>';
		    }

            if ( $product->is_on_sale() ) :

             	echo apply_filters( 'woocommerce_sale_flash', '<span class="construction_light_sale_label"><span class="text">' . esc_html__( 'Sale!', 'construction-light' ) . '</span></span>', $post, $product );
            
			endif;
        ?>
	</div>

	<?php 
}
add_action( 'woocommerce_single_product_summary','construction_light_group_flash', 10 );


function construction_light_custom_ratting_single_product(){
	global $product;
	if ( get_option( 'woocommerce_enable_review_rating' ) === 'no' ) {
		return;
	}
	$rating_count = $product->get_rating_count();
	$average      = $product->get_average_rating();
	if ( $rating_count > 0 ) : ?>
        <div class="woocommerce-product-rating">
            <span class="star-rating">
                <span style="width:<?php echo( ( intval($average) / 5 ) * 100 ); ?>%">
                    <?php printf(
						wp_kses( '%1$s out of %2$s', 'construction-light' ),
						'<strong class="rating">' . esc_html( $average ) . '</strong>',
						'<span>5</span>'
					); ?>
                </span>
            </span>

            <span>
                <?php printf(
					wp_kses( 'based on %s rating', 'Based on %s ratings', $rating_count, 'construction-light' ),
					'<span class="rating">' . esc_html( $rating_count ) . '</span>'
				); ?>
            </span>

			<?php if ( comments_open() ) : ?>
                <a href="#reviews" class="woocommerce-review-link" rel="nofollow">
                    <i class="fa fa-pencil" aria-hidden="true"></i>
					<?php echo esc_html__( 'write a preview', 'construction-light' ) ?>
                </a>
			<?php endif ?>
        </div>
	<?php endif;
}
add_action( 'woocommerce_single_product_summary', 'construction_light_custom_ratting_single_product', 5 );


if( !function_exists ('construction_light_sale_percentage_loop') ){
	/**
     * Woocommerce Products Discount Show
     *
     * @since 1.0.0
    */
	function construction_light_sale_percentage_loop() {

		global $product;
		
		if ( $product->is_on_sale() ) {
			
			if ( ! $product->is_type( 'variable' ) and $product->get_regular_price() and $product->get_sale_price() ) {
				
				$max_percentage = ( ( $product->get_regular_price() - $product->get_sale_price() ) / $product->get_regular_price() ) * 100;
			
			} else {
				$max_percentage = 0;
				
				foreach ( $product->get_children() as $child_id ) {

					$variation = wc_get_product( $child_id );

					$price = $variation->get_regular_price();

					$sale = $variation->get_sale_price();

					$percentage = '';

					if ( $price != 0 && ! empty( $sale ) ) $percentage = ( $price - $sale ) / $price * 100;

						if ( $percentage > $max_percentage ) {
							$max_percentage = $percentage;
						}
				}
			
			}
			
			echo "<span class='on_sale'>" . esc_html( round( - $max_percentage ) ) . esc_html__("%", 'construction-light')."</span>";
		
		}

	}
}


function construction_light_woocommerce_related_products_args( $args ) {

	$defaults = array(
		'posts_per_page' => 6,
		'columns'        => 3,
	);

	$args = wp_parse_args( $defaults, $args );

	return $args;
}
add_filter( 'woocommerce_output_related_products_args', 'construction_light_woocommerce_related_products_args' );


/**
 * Output product up sells.
 *
 * @param int $posts_per_page (default: -1)
 * @param int $columns (default: 2)
 */
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );

if ( ! function_exists( 'construction_light_woocommerce_upsell_display' ) ) {

  	function construction_light_woocommerce_upsell_display() {
	    
    	woocommerce_upsell_display( 6, 3 ); 

  	}
}
add_action( 'woocommerce_after_single_product_summary', 'construction_light_woocommerce_upsell_display', 15 );

/**
 * WooCommerce Compatibility File
 *
 * @link https://woocommerce.com/
 *
 * @package Blog99
 */

if ( ! function_exists( 'construction_light_woocommerce_cart_link_fragment' ) ) {
	/**
	 * Cart Fragments.
	 *
	 * Ensure cart contents update when products are added to the cart via AJAX.
	 *
	 * @param array $fragments Fragments to refresh via AJAX.
	 * @return array Fragments to refresh via AJAX.
	 */
	function construction_light_woocommerce_cart_link_fragment( $fragments ) {
		ob_start();
		construction_light_woocommerce_header_cart();
		$fragments['li.site-header-cart'] = ob_get_clean();

		return $fragments;
	}
}
add_filter( 'woocommerce_add_to_cart_fragments', 'construction_light_woocommerce_cart_link_fragment' );

if ( ! function_exists( 'construction_light_woocommerce_cart_link' ) ) {
	/**
	 * Cart Link.
	 *
	 * Displayed a link to the cart including the number of items present and the cart total.
	 *
	 * @return void
	 */
	function construction_light_woocommerce_cart_link() {
		?>
		<li id="site-header-cart" class="site-header-cart">
			
			<a class="cart-contents" href="<?php echo esc_url( wc_get_cart_url() ); ?>" title="<?php esc_attr_e( 'View your shopping cart', 'construction-light' ); ?>">
				<i class="fa fa-cart-arrow-down" aria-hidden="true"></i>
				<span class="cart-count-item"><?php echo WC()->cart->get_cart_contents_count(); ?></span>
			</a>
		</li>
		<?php
	}
}

if ( ! function_exists( 'construction_light_woocommerce_header_cart' ) ) {
	/**
	 * Display Header Cart.
	 *
	 * @return void
	 */
	function construction_light_woocommerce_header_cart() {

		construction_light_woocommerce_cart_link();
	}
}
add_action('construction_light_woocommerce_header_cart_section','construction_light_woocommerce_header_cart');