Advertisement
RussianSysOps

mk_product_categories.php

Aug 20th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 13.01 KB | None | 0 0
  1. <?php
  2.  
  3. extract(shortcode_atts(array(
  4.     'style' => 'classic',
  5.     'display' => 'recent',
  6.     'category' => '',
  7.     'orderby' => 'DESC',
  8.     'order' => 'date',
  9.     'column' => '3',
  10.     'product_per_page' => '12',
  11.     'pagination' => 'true',
  12.     'el_class' => ''
  13. ), $atts));
  14.  
  15. require_once THEME_INCLUDES . "/image-cropping.php";    
  16.  
  17. global $woocommerce_loop, $woocommerce, $mk_settings, $post, $wp_query;
  18.  
  19. $output =  '';
  20.  
  21. $meta_query = '';
  22. if($display == "recent"){
  23.     $meta_query = WC()->query->get_meta_query();
  24. }
  25. if($display == "featured"){
  26.     $meta_query = array(
  27.         array(
  28.             'key'       => '_visibility',
  29.             'value'       => array('catalog', 'visible'),
  30.             'compare'   => 'IN'
  31.         ),
  32.         array(
  33.             'key'       => '_featured',
  34.             'value'       => 'yes'
  35.         )
  36.     );
  37. }
  38. if($display == "top_rated"){
  39.     add_filter( 'posts_clauses',  array( WC()->query, 'order_by_rating_post_clauses' ) );
  40.     $meta_query = WC()->query->get_meta_query();
  41. }
  42.  
  43. $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
  44. $args = array(
  45.     'post_type'             => 'product',
  46.     'post_status'           => 'publish',
  47.     'ignore_sticky_posts'   => 1,
  48.     'posts_per_page'        => $product_per_page,
  49.     'orderby'               => $orderby,
  50.     'order'                 => $order,
  51.     'paged'                 => $paged,
  52.     'meta_query'            => $meta_query
  53. );
  54. if($display == "sale"){
  55.     $product_ids_on_sale = woocommerce_get_product_ids_on_sale();
  56.     $meta_query = array();
  57.     $meta_query[] = $woocommerce_loop->query->visibility_meta_query();
  58.     $meta_query[] = $woocommerce_loop->query->stock_status_meta_query();
  59.     $args['meta_query'] = $meta_query;
  60.     $args['post__in'] = $product_ids_on_sale;
  61. }
  62. if($display == "best_selling"){
  63.     $args['meta_key'] = 'total_sales';
  64.     $args['orderby'] = 'meta_value_num';
  65.     $args['meta_query'] = array(
  66.             array(
  67.                 'key'       => '_visibility',
  68.                 'value'     => array( 'catalog', 'visible' ),
  69.                 'compare'   => 'IN'
  70.             )
  71.         );
  72. }
  73.  
  74. if($display == "product_category"){
  75.     $args['tax_query'] = array(
  76.         array(
  77.             'taxonomy'   => 'product_cat',
  78.             'terms'         => explode(",", $category),
  79.             'field'         => 'slug'
  80.         )
  81.     );
  82. }
  83.  
  84. $output .= '<div class="woocommerce column-'.$column.' '.$el_class.'">';
  85. $output .= '<ul class="products isotope-enabled '.$style.'-style">';
  86. $query = new WP_Query( $args );
  87. if($query->have_posts()):
  88.     while ( $query->have_posts() ) : $query->the_post();
  89.         $product_id = get_the_ID();
  90.         $loop_image_size = isset($mk_settings['woo_loop_image_size']) ? $mk_settings['woo_loop_image_size'] : 'crop';
  91.         $quality = $mk_settings['woo-image-quality'] ? $mk_settings['woo-image-quality'] : 1;
  92.         $grid_width = $mk_settings['grid-width'];
  93.         $content_width = $mk_settings['content-width'];
  94.         $height = $mk_settings['woo-loop-thumb-height'];
  95.         global $product;
  96.  
  97.         switch ($column) {
  98.             case 4:
  99.                     $classes[] = 'four-column';
  100.                     $width = round($grid_width/4) - 38;
  101.                     $column_width = round($grid_width/4);
  102.                 break;
  103.             case 3:
  104.                     $classes[] = 'three-column';
  105.                     $width = round($grid_width/3) - 41;
  106.                     $column_width = round($grid_width/3);
  107.                 break;
  108.             case 2:
  109.                     $classes[] = 'two-column';
  110.                     $width = round($grid_width/2) - 49;
  111.                     $column_width = round($grid_width/2);
  112.                 break;
  113.             case 1:
  114.                     $classes[] = 'one-column';
  115.                     $width = $grid_width - 66;
  116.                     $column_width = $grid_width;
  117.                 break;
  118.  
  119.             default:
  120.                     $classes[] = 'four-column';
  121.                     $width = round($grid_width/4) - 36;
  122.                     $column_width = round($grid_width/4);
  123.                 break;
  124.         }
  125.  
  126.         ob_start();
  127.             post_class($classes);
  128.  
  129.  
  130.  
  131.         $output .= '<li style="" '.ob_get_clean().' >';
  132.         $output .= '    <div class="item-holder">';
  133.         $output .= '        <span class="product-loading-icon"></span>';
  134.         /*
  135.         * Product add to card & out of stock badge
  136.         */
  137.         $out_of_stock_badge = '';
  138.         if ( ! $product->is_in_stock() ) {
  139.             $out_of_stock_badge = '<span class="out-of-stock">'.__( 'OUT OF STOCK', 'mk_framework' ).'</span>';
  140.         }
  141.  
  142.         if($style == 'modern'){
  143.             $output .= '<div class="modern-style-holder">';
  144.             $output .= '<div class="modern-hover-holder">';
  145.             $output .= '<a href="'. apply_filters( 'out_of_stock_add_to_cart_url', get_permalink( $product->get_id() ) ).'" alt="'. apply_filters( 'out_of_stock_add_to_cart_text', __( 'READ MORE', 'mk_framework' ) ).'" class="product_loop_button">'.__( 'PURCHASE', 'mk_framework' ).'</a>';
  146.             $output .= $out_of_stock_badge;
  147.             if ($product->is_on_sale()) :
  148.             $output .= apply_filters('woocommerce_sale_flash', '<span class="onsale">'.__( 'SALE', 'mk_framework' ).'</span>', $post, $product);
  149.             endif;
  150.             $output .= '</div>';
  151.         }else if($style == 'classic'){
  152.             $output .= $out_of_stock_badge;
  153.             if ($product->is_on_sale()) :
  154.             $output .= apply_filters('woocommerce_sale_flash', '<span class="onsale">'.__( 'SALE', 'mk_framework' ).'</span>', $post, $product);
  155.             endif;
  156.         }
  157.        
  158.  
  159.         /* Product loop thumbnail */
  160.         if ( has_post_thumbnail() ) {
  161.             switch ($loop_image_size) {
  162.                 case 'full':
  163.                     $image_src_array = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full', true);
  164.                     $image_output_src = $image_src_array[0];
  165.                     break;
  166.                 case 'crop':
  167.                     $image_src_array = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full', true);
  168.                     $image_output_src = bfi_thumb($image_src_array[0], array(
  169.                         'width' => $width*$quality,
  170.                         'height' => $height*$quality
  171.                     ));
  172.                     break;            
  173.                 case 'large':
  174.                     $image_src_array = wp_get_attachment_image_src(get_post_thumbnail_id(), 'large', true);
  175.                     $image_output_src = $image_src_array[0];
  176.                     break;
  177.                 case 'medium':
  178.                     $image_src_array = wp_get_attachment_image_src(get_post_thumbnail_id(), 'medium', true);
  179.                     $image_output_src = $image_src_array[0];
  180.                     break;        
  181.                 default:
  182.                     $image_src_array = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full', true);
  183.                     $image_output_src = bfi_thumb($image_src_array[0], array(
  184.                         'width' => $width*$quality,
  185.                         'height' => $height*$quality
  186.                     ));
  187.                     break;
  188.             }
  189.  
  190.             $output .= '<a href="'. get_permalink().'" class="product-loop-thumb">';
  191.  
  192.             $output .= '<img src="'.mk_thumbnail_image_gen($image_output_src, $width, $height).'" class="product-loop-image" alt="'.get_the_title().'" title="'.get_the_title().'" itemprop="image">';
  193.  
  194.             $product_gallery = get_post_meta( $post->ID, '_product_image_gallery', true );
  195.  
  196.             if ( !empty( $product_gallery ) ) {
  197.  
  198.                 $gallery = explode( ',', $product_gallery );
  199.                 $hover_image_id  = $gallery[0];
  200.  
  201.                 $image_src_hover_array = wp_get_attachment_image_src($hover_image_id, 'full', true );
  202.                
  203.                 switch ($loop_image_size) {
  204.                 case 'full':
  205.                     $image_src_hover_array = wp_get_attachment_image_src($hover_image_id, 'full', true);
  206.                     $image_hover_src = $image_src_hover_array[0];
  207.                     break;
  208.                 case 'crop':
  209.                     $image_src_hover_array = wp_get_attachment_image_src($hover_image_id, 'full', true);
  210.                     $image_hover_src = bfi_thumb($image_src_hover_array[0], array(
  211.                         'width' => $width*$quality,
  212.                         'height' => $height*$quality
  213.                     ));
  214.                     break;            
  215.                 case 'large':
  216.                     $image_src_hover_array = wp_get_attachment_image_src($hover_image_id, 'large', true);
  217.                     $image_hover_src = $image_src_hover_array[0];
  218.                     break;
  219.                 case 'medium':
  220.                     $image_src_hover_array = wp_get_attachment_image_src($hover_image_id, 'medium', true);
  221.                     $image_hover_src = $image_src_hover_array[0];
  222.                     break;        
  223.                 default:
  224.                     $image_src_hover_array = wp_get_attachment_image_src($hover_image_id, 'full', true);
  225.                     $image_hover_src = bfi_thumb($image_src_hover_array[0], array(
  226.                         'width' => $width*$quality,
  227.                         'height' => $height*$quality
  228.                     ));
  229.                     break;
  230.             }
  231.  
  232.             $output .= '<img src="'.mk_thumbnail_image_gen($image_hover_src, $width, $height).'" alt="'.get_the_title().'" class="product-hover-image" title="'.get_the_title().'" >';
  233.             }
  234.  
  235.             $output .= '<span class="product-hover-items">';
  236.             if ( get_option( 'woocommerce_enable_review_rating' ) !== 'no' ) :
  237.                     if(version_compare(WC_VERSION, '3.0', '>=')) {
  238.                         $rating_html = wc_get_rating_html( $product->get_average_rating() );
  239.                     } else {
  240.                         $rating_html = $product->get_rating_html();
  241.                     }
  242.                 $output .= '<span class="product-item-rating">'.$rating_html.'</span>';
  243.             endif;
  244.  
  245.  
  246.             if( function_exists('mk_love_this') ) {
  247.                 ob_start();
  248.                 mk_love_this();
  249.                 $output .= ob_get_clean();
  250.             }
  251.  
  252.             $output .= '</span>';
  253.  
  254.             $output .= '</a>';
  255.  
  256.             if($style == 'modern'){
  257.                 $output .= '</div>';            
  258.             }
  259.         }
  260.        
  261.         $output .= '    <div class="product-item-details">';
  262.         $output .= '        <h3><a href="'.get_permalink().'">'.get_the_title().'</a></h3>';
  263.         ob_start();
  264.         do_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
  265.         $output .=           ob_get_clean();
  266.         if($style == 'classic'){
  267.  
  268.           switch ( $product->get_type() ) {
  269.                     case "variable" :
  270.                         $icon_class = 'mk-theme-icon-plus';
  271.                         break;
  272.                     case "grouped" :
  273.                         $icon_class = 'mk-theme-icon-plus';
  274.                         break;
  275.                     case "external" :
  276.                         $icon_class = 'mk-theme-icon-magnifier';
  277.                         break;
  278.                     default :
  279.                         $icon_class = 'mk-theme-icon-cart2';
  280.                         break;
  281.                 }
  282.  
  283.                 if(!$product->is_purchasable() || !$product->is_in_stock()) {
  284.                     $icon_class = 'mk-theme-icon-magnifier';
  285.                 }
  286.  
  287.                 $button_class = implode( ' ', array(
  288.                                     'product_loop_button',
  289.                                     'product_type_' . $product->get_type(),
  290.                                     $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
  291.                                     $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : ''
  292.                             ) );
  293.  
  294.  
  295.                 $output .= apply_filters( 'woocommerce_loop_add_to_cart_link',
  296.                     sprintf( '<a rel="nofollow" href="%s" data-quantity="1" data-product_id="%s" data-product_sku="%s" class="%s"><i class="%s"></i>%s</a>',
  297.                         esc_url( $product->add_to_cart_url() ),
  298.                         esc_attr( $product->get_id() ),
  299.                         esc_attr( $product->get_sku() ),
  300.                         esc_attr( $button_class ),
  301.                         esc_attr( $icon_class ),
  302.                         esc_html( $product->add_to_cart_text() )
  303.                     ),
  304.                 $product );
  305.         }
  306.         $output .= '        </div>';
  307.         $output .= '    </div>';
  308.         $output .= '</li>';
  309.     endwhile;
  310. endif;
  311. $output .= '</ul>';
  312.  
  313. if($pagination == "true"){
  314.         $output .= '<nav class="woocommerce-pagination">';
  315.         $output .= mk_woocommerce_pagination($query->max_num_pages);
  316.         $output .= '</nav>';
  317. }
  318. $output .= '</div>';
  319.     wp_reset_postdata();
  320. echo $output;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement