?> <li> <a class="ts-wg-thumbnail" href="<?php echo esc_url(get_permalink($product->id)); ?> " title="<?php echo esc_attr($product->get_title()); ?> "> <?php echo $product->get_image(); ?> </a> <div class="ts-wg-meta"> <?php ts_template_loop_categories(); ?> <a href="<?php echo esc_url(get_permalink($product->id)); ?> " title="<?php echo esc_attr($product->get_title()); ?> "> <?php echo $product->get_title(); ?> </a> <span class="price"><?php echo $product->get_price_html(); ?>
function widget($args, $instance) { if (!ts_has_woocommerce()) { return; } extract($args); $title = apply_filters('widget_title', $instance['title']); $limit = $instance['limit'] != 0 ? absint($instance['limit']) : 8; $product_type = $instance['product_type']; $product_cats = $instance['product_cats']; $row = $instance['row'] != 0 ? absint($instance['row']) : 4; $show_thumbnail = empty($instance['show_thumbnail']) ? 0 : $instance['show_thumbnail']; $show_categories = empty($instance['show_categories']) ? 0 : $instance['show_categories']; $show_product_title = empty($instance['show_product_title']) ? 0 : $instance['show_product_title']; $show_price = empty($instance['show_price']) ? 0 : $instance['show_price']; $show_rating = empty($instance['show_rating']) ? 0 : $instance['show_rating']; $is_slider = empty($instance['is_slider']) ? 0 : $instance['is_slider']; $show_nav = empty($instance['show_nav']) ? 0 : $instance['show_nav']; $auto_play = empty($instance['auto_play']) ? 0 : $instance['auto_play']; if ($limit == $row) { $is_slider = false; } $args = array('post_type' => 'product', 'post_status' => 'publish', 'ignore_sticky_posts' => 1, 'posts_per_page' => $limit, 'orderby' => 'date', 'order' => 'desc', 'meta_query' => array(array('key' => '_visibility', 'value' => array('catalog', 'visible'), 'compare' => 'IN'))); switch ($product_type) { case 'sale': $args['meta_query'][] = array('key' => '_sale_price', 'value' => 0, 'compare' => '>', 'type' => 'NUMERIC'); break; case 'featured': $args['meta_query'][] = array('key' => '_featured', 'value' => 'yes'); break; case 'best_selling': $args['meta_key'] = 'total_sales'; $args['orderby'] = 'meta_value_num'; $args['order'] = 'desc'; break; case 'top_rated': add_filter('posts_clauses', array(WC()->query, 'order_by_rating_post_clauses')); break; default: /* Recent */ $args['orderby'] = 'date'; $args['order'] = 'desc'; break; } if (is_array($product_cats) && count($product_cats) > 0) { $field_name = is_numeric($product_cats[0]) ? 'term_id' : 'slug'; $args['tax_query'] = array(array('taxonomy' => 'product_cat', 'terms' => $product_cats, 'field' => $field_name)); } global $post, $product, $smof_data; $lazy_load = isset($smof_data['ts_prod_lazy_load']) && $smof_data['ts_prod_lazy_load']; $placeholder_img_src = isset($smof_data['ts_prod_placeholder_img']) ? $smof_data['ts_prod_placeholder_img'] : wc_placeholder_img_src(); echo $before_widget; if ($title) { echo $before_title . $title . $after_title; } $products = new WP_Query($args); if ($products->have_posts()) { $count = 0; $num_posts = $products->post_count; if ($num_posts <= $row) { $is_slider = false; } if (!$is_slider) { $row = $num_posts; } $extra_class = ''; $extra_class .= $is_slider ? 'ts-slider loading' : ''; $extra_class .= $is_slider && $show_nav ? ' has-navi' : ''; ?> <div class="ts-products-widget-wrapper woocommerce <?php echo esc_attr($extra_class); ?> " data-show_nav="<?php echo esc_attr($show_nav); ?> " data-auto_play="<?php echo esc_attr($auto_play); ?> "> <?php while ($products->have_posts()) { $products->the_post(); $product = wc_get_product($post->ID); ?> <?php if ($count % $row == 0) { ?> <div class="per-slide"> <ul class="product_list_widget"> <?php } ?> <li> <a class="ts-wg-thumbnail" href="<?php echo esc_url(get_permalink($product->id)); ?> " title="<?php echo esc_attr($product->get_title()); ?> "> <?php if ($show_thumbnail) { if (!$lazy_load) { echo $product->get_image(); } else { $image_size = 'shop_thumbnail'; $img_src = ''; $alt = ''; $dimensions = wc_get_image_size($image_size); if (has_post_thumbnail($product->id)) { $post_thumbnail_id = get_post_thumbnail_id($product->id); $image_obj = wp_get_attachment_image_src($post_thumbnail_id, $image_size, 0); if (isset($image_obj[0])) { $img_src = $image_obj[0]; } $alt = trim(strip_tags(get_post_meta($post_thumbnail_id, '_wp_attachment_image_alt', true))); } else { if (wc_placeholder_img_src()) { $img_src = wc_placeholder_img_src(); } } echo '<img src="' . esc_url($placeholder_img_src) . '" data-src="' . esc_url($img_src) . '" alt="' . esc_attr($alt) . '" class="attachment-shop_thumbnail wp-post-image ts-lazy-load" width="' . $dimensions['width'] . '" height="' . $dimensions['height'] . '" />'; } } ?> </a> <div class="ts-wg-meta"> <?php if ($show_categories) { ts_template_loop_categories(); } ?> <a href="<?php echo esc_url(get_permalink($product->id)); ?> " title="<?php echo esc_attr($product->get_title()); ?> "> <?php if ($show_product_title) { echo esc_html($product->get_title()); } ?> </a> <?php if ($show_price) { woocommerce_template_loop_price(); } ?> <?php if ($show_rating) { woocommerce_template_loop_rating(); } ?> </div> </li> <?php if ($count % $row == $row - 1 || $count == $num_posts - 1) { ?> </ul> </div> <?php } ?> <?php $count++; } ?> </div> <?php } echo $after_widget; if ($product_type == 'top_rated') { remove_filter('posts_clauses', array(WC()->query, 'order_by_rating_post_clauses')); } wp_reset_postdata(); }